最近项目中的仿真模块出现了java.lang.OutOfMemoryError:java heap space(内存不足)异常,简单查了一下,怀疑可能是内存泄露或者内存溢出;
内存泄露指的是程序中动态分配内存给一些临时对象,但是对象不会被GC(java垃圾回收机制gabage collection)所回收,它始终占用内存。即被分配的对象可达但已无用;
内存溢出指的是程序运行过程中无法申请到足够的内存而导致的一种错误。内存溢出通常发生于OLD段或Perm段垃圾回收后,仍然无内存空间容纳新的Java对象的情况;
从定义上可以看出内存泄露是内存溢出的一种诱因,不是唯一因素;
有时单单从代码上很难知道是哪里的问题,所以需要借助一下JDK提供的工具,实时了解程序中的资源的使用情况,JDK为我们提供了JSTATD和Java VisualVM进行远超监控:
一、启动JSTATD:在JDK的bin目录下新建jstatd.all.policy文件(其实目录可以自己选择)键入一下代码用于启动JSTATD:
grant codebase “file:${java.home}/../lib/tools.jar” {
permission java.security.AllPermission;
};
保存;然后使用以下命令启动JSTATD:
jstatd -J-Djava.security.policy=/jstatd.all.policy文件的目录/jstatd.all.policy -p 端口号(用于Java VisualVM远程链接)
二、检查JSTATD是否已经启动
键入 jps ,如果看到jstatd已经起来了,说明启动成功;
三、在本地JDK的安装目录下bin目录,找到jvisualvm.exe文件双击打开,
打开后输入ip,端口
然后我们就可以实时的进行监控了
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/16414.html