内存泄露指的是程序中动态分配内存给一些临时对象,可是对象不会被GC(java垃圾回收机制gabage collection)所回收,它始终占用内存。即被分配的对象很大但已无用;java
内存溢出指的是程序运行过程当中没法申请到足够的内存而致使的一种错误。内存溢出一般发生于OLD段或Perm段垃圾回收后,仍然无内存空间容纳新的Java对象的状况;工具
从定义上能够看出内存泄露是内存溢出的一种诱因,不是惟一因素;code
有时单单从代码上很难知道是哪里的问题,因此须要借助一下JDK提供的工具,实时了解程序中的资源的使用状况,JDK为咱们提供了JSTATD和Java VisualVM进行远超监控:对象
一、启动JSTATD:blog
cd /usr/local/java/jdk1.8.0_121/bin;ip
mkdir jstatd.all.policy; --新建文件(其实目录能够本身选择)键入一下代码用于启动JSTATD:内存
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};资源
保存;而后使用如下命令启动JSTATD:it
jstatd -J-Djava.security.policy=/jstatd.all.policy文件的目录/jstatd.all.policy -p 端口号(用于Java VisualVM远程连接)io
eg:jstatd -J-Djava.security.policy=/usr/local/java/jdk1.8.0_121/bin/jstatd.all.policy -p 12345
二、检查JSTATD是否已经启动
键入 jps ,若是看到jstatd已经起来了,说明启动成功;
3、在本地JDK的安装目录下bin目录,找到jvisualvm.exe文件双击打开,
打开后输入ip,端口
而后咱们就能够实时的进行监控了