內存泄露指的是程序中動態分配內存給一些臨時對象,可是對象不會被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,端口
而後咱們就能夠實時的進行監控了