1、StackOverFlowError:栈溢出

1)实例:下面代码报java.lang.StackOverError


public class StackeOverFlowTest{public static void main(String []args){new StackOverStackTest().testStackOver();
}public void testStackOver(){testStackOver();}}

2、其他的一些内存溢出

1)unable to create new native thread :栈本身是占用空间的,存放在Native Memory中,通过-Xss设置私有栈空间的大小,也就是对一个线程来将他的私有空间的最大的限制,若超出了这个大小,会报上述的错误

2)request{}byte for{}out of swap:基本是地址空间不够用,报该错误

3)IOEception:Too many open files:是由于有太多没有关闭的套接字导致的问题

3、常见的java工具

1)jps:jps是最简单的一种命令工具,仅仅过滤java本身的进程以及运行的引导类,jps是基于Java实现的,有点类似于下面的代码实现逻辑,代码中拿到虚拟机描述对象后,可以用过VirtualMachine.attach(des)来链接对应的服务器


public class JpsTest{public static void main(string [] args){List<VirtualMachineDescriptor> machineDescriptors = new VirtualMachine.list();for(VirtualMachineDescriptor des : machineDescriptors){System.out.prinln(des.id() + des.displayName());} }
}

2)jstat:用于快速的定位问题的一种方式,使用它可以方便看到JVM中每个区域的情况,根据不同的参数,看到每个区域的使用情况和比例,例如:jstat -gcutil<pid> 1000 2 ,其中<pid>代表进程号,1000代表每1000ms采集一次数据,最后一个参数2代表总共采集俩次数据

S0

S1

E

O

P

YGC

YGCT

FGC

FGCT

GCT

0.00

31.67

3.12

26.03

74.81

287

2.315

0

0.000

2.315

其中:S0、S1:俩个Survitor,E:Eden,O:Old,P:Perm,数字代表占的百分比,YGC、FGC:Minor GC、FULL GC的次数,YGCT、FGCT:俩种GC所用的总时间,GCT代表所有GC的时间

-gcutil可以换成-gccause、-gc、-gcnew、-gcnewcapacity、-calass、-compiler、-printcompilation等,查看不同的数据

3)jmap:使用dump内存时,系统会呗暂停,如果dump的一个超大的JVM内存的文件,普通的机器无法跑起来

a)jmap -heap<pid> :用于查看,某些OS上不支持

b)jmap -histo<pid>:输出活着的对象数以及大小,可以将其重定向到一个文件中

c)jmap -dump:format=b,file=heap.bin<pid>:导出JVM内存信息并形成二进制文件,都使用MAT工具分析

4)jstack:主要输出线程信息,例如:线程名称、地址、状态等

5)jinfo:查看某些运行时参数或者去做一些修改

6)JConsule:图形化工具,在具有图形化的OS命令行输入“jconsole”或者到JDK的bin目录下找到JSconsole五年级,双击运行

7)设置服务器用户名及密码:

a)Linux下在JAVA_HOME/jre/lib/management/目录下有个文件“jmxremote.password.template”(Windows下改为%JAVA_HOME%),复制一个,将template后缀删掉,将文件内容打开,去掉注释,该俩行是java默认额jmx用户及密码,同一目录下“jmxremote.access”文件,存在上诉的2个用户,可以在该文件里增加自己的用户

b)在启动JVM进程的启动参数上新增以下内容

-Dcom.sun.management.jmxremote

-Dcom.sun.management.jmxremote.port=9000

-Dcom.sun.management.jmxremote=false

c)客户端其动感JConsole,输入用户名和密码以及远程主机ip:port

d)修改“jmxremote.password”文件为 只读:Linux下使用root账号,修改完用户密码后将jmxremote.password文件属性设置为000也就是执行该命令:chmod 000 jmxremote.password,Windows下可以将jmxremote.password属性—》编辑—》安全 —》只读。
8)Visual VM :可以集成非常多工具的平台,在JDK的目录下运行“visualvm.exe”,安装插件时只需要关注Tools —》“Available Plugins”、“Installed”,

a)设置远程监控:编辑文件,例如文件名称为“visualvm.remote.policy”,可以放到任意的目录下,例如放在“/ux/security/“,文件内容如下:

grant codebase “file:${java.home}/../lib/tools.jar”{

permission java.security.AllPermission;

}

b)运行jstatd工具,如下命令:

Jstatd -J-Djava.policy=/ux/security/vosualvm.romote.policy -p 9000

c)若运行正常,则在对应的服务器上开启了9000端口,可以接受来自远程的Visual VM 工具访问

9)MAT:它是java的内存分析工具,分析的是JVM内存的dump文件,程序本身也是通过java写的

10)BTrace:程序出现问题时,可以将该问题类中的某个方法或写入过的数据的时候,将调用这个类的相应方法的“调用栈路径”打印出来。

a)内部实现:使用字节码增强技术来实现代码的跟踪,基于java的Attach API

11)HSDB:类似于Visual VM 集成了很多工具,只是它在命令行下使用

a)启动方式:java -classpath:$JAVA_HOME/lib/sa-jdi.jar sun.jvm.hotspot.CLHSDB,如果是windows,将$JAVA_HOME修改成%JAVA_HOME%

4、总结:

1)程序可控时,申请根小的内存可以做完的事情,不要申请多余的内存,但是要把握一个“度”

2)处理大数据量时,要分段来处理

3)处理大批量的肖I/O操作,尝试哟过批处理方式

4)局部代码块中已经申请了许多占用空间的对象,这些对象在其“作用域”内的后续代码块中还要执行很长时间,并且这块内存在后面不会在使用了,尝试着将一些大的对象设置为null

5)程序中的对象尽量缩小它的作用域

6)当应用中存在某些内存经常被用到,不会改变,但加载到内存代价比较大,在进程启动将其填充号,避免与业务代码中内存使用抢占Survivor空间

7)当某些数据中有Cache时,尽量使用它

8)当遇到一些反复叠加的操作,例如字符串的叠加,尝试使用一个外部引用变量或者是对象来操作,减少叠加过过程中产生的碎片

JVM第四篇之益处、常用java工具相关推荐

  1. MySQL数据库,从入门到精通:第四篇——MySQL中常用的运算符及其用法

    MySQl学习(MySQL数据库,从入门到精通:第四篇--MySQL中常用的运算符及其用法 第四篇_MySQL中常用的运算符及其用法运算符 1. 算术运算符 1.加法与减法运算符 2.乘法与除法运算符 ...

  2. 常用java工具代码备忘

    记录一些常用java工具代码,个人用,备忘 package com.szq.misc;import java.util.UUID;public enum MiscUtils {I;/*** 格式化UR ...

  3. Java多线程系列(四):4种常用Java线程锁的特点,性能比较、使用场景

    多线程的缘由 在出现了进程之后,操作系统的性能得到了大大的提升.虽然进程的出现解决了操作系统的并发问题,但是人们仍然不满足,人们逐渐对实时性有了要求. 使用多线程的理由之一是和进程相比,它是一种非常花 ...

  4. JVM 第四篇:可视化 JVM 故障处理工具

    本文内容过于硬核,建议有 Java 相关经验人士阅读. 1. 可视化工具 在 JDK 中为我们提供了大量的 JVM 故障处理工具,都在 JDK 的 bin 目录下: 这其中除了大量的命令行工具以外,还 ...

  5. 第四篇:ROS常用命令行指令【重点】

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.常用的ROS命令行指令 1.系统类指令 2.启动类指令 3.节点 ...

  6. SaltStack 学习笔记 - 第四篇: SaltStack常用模块

    SaltStack 通过模块来实现管理,具备丰富的模块功能,命令形式也比较自由,这里通过罗列几个有用的命令来作为入门的学习实验. sys.doc : 类似linux的man命令,可以显示minion支 ...

  7. 常用Java工具类:java抽奖码生成

    本案要求生成10W条由大写字母加数字组成的抽奖码. 由要求得字符集为:ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 为保证数据不重复,且不可破解的要求.阿咚使用5位的随机字 ...

  8. 一些常用java工具类

    1.json转换工具 package com.taotao.utils; import java.util.List; import com.fasterxml.jackson.core.JsonPr ...

  9. MySQL数据库,从入门到精通:第十四篇——MySQL视图详解

    MySQL数据库,从入门到精通:第十四篇--MySQL视图详解 第 14 篇_视图 1. 常见的数据库对象 2. 视图概述 2. 1 为什么使用视图? 2. 2 视图的理解 3. 创建视图 3. 1 ...

最新文章

  1. [SHOI2015]自动刷题机
  2. 为sap的alv的最左侧添加【选中】按钮用于同时选中多行...
  3. boost::signals2模块实现将参数从信号调用传递到槽的示例程序
  4. Python实现八皇后问题所有实现方式
  5. 最先进单插槽专业绘图解决方案
  6. 黑圈数字符号0到50复制_电脑上怎么打出特殊符号「收藏」
  7. 迁移学习中使用下载好的权重
  8. 高光谱图像处理和分析软件(包含雷尼绍Renishaw wdf 文件导入解析功能)
  9. qpython3 安装库_qpython3如何安装库
  10. 角色与使命:学生干部如何平衡工作与学习的关系?
  11. 使用layer打开新页面
  12. 一位网友的网络求职经历
  13. 计算机网络技术期末考试2010模拟试题及答案
  14. uniapp修改字体
  15. 傅里叶变化,短时傅里叶分析,小波变换
  16. Gaussian Smoothing(高斯平滑)
  17. 71个外贸工具集合!2023年外贸业务员开发客户必备!
  18. Soundex UVA - 10260(soundex编码)(水)(略坑)
  19. e-learning的移动学习:培训从电脑转移到手机,只是媒介的改变?
  20. Android 控件 RecyclerView

热门文章

  1. 读取文件路径中的图片
  2. 自制手机app的51蓝牙+WiFi+循迹+避障OLED显示速度小车
  3. Android关于虚拟控件、全面屏及悬浮球机型适配时遇到的问题
  4. 3个月疫情倒闭了近90000家企业,为什么互联网公司每天都在招人?招聘一个程序员要多少成本
  5. 学计算机的初衷,计算机学习心得体会5篇
  6. 局域网理论上的小常识(组网必备)
  7. JSP通过JDBC连接mysql数据库
  8. HTML基础-03-表单一
  9. [小黄书管理平台]Angularjs 2.0应用的国际化
  10. 51nod 1479 小Y的数论题