JConsole(可視化工具) 運行 JConsole記憶體監控 測試代碼 這裡看到我們有倆個線程。 JPS(JVM Process status) JPS是使用的頻率最高的工具,和linux下的ps命令差不多(把J去掉就是一個ps)。 因為我這裡開啟了一個eclipse,所以運行結果如下所示: 如果 ...
JConsole(可視化工具)
運行
JConsole記憶體監控
測試代碼
import java.util.ArrayList;
import java.util.List;
public class A {
byte[] b1 = new byte[128*1024];
public static void main(String[] args) {
try {
Thread.sleep(5000);
}catch(Exception e) {
}
System.out.println("start...");
fill(1000);
}
private static void fill(int n) {
List<A> jlist = new ArrayList<A>();
for(int i=0;i<n;i++) {
try {
Thread.sleep(100);
}catch(Exception e) {
jlist.add(new A());
}
}
}
}
然後開啟jconsole進行連接。
連接後執行一次GC後會發現Eden區域直降一次。
JConsole線程監控。
測試代碼:
import java.util.Scanner;
public class A {
byte[] b1 = new byte[128*1024];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
sc.next();
new Thread(()->{
while(true) {
}
},"while true線程").start();
new Thread(()->{
synchronized(A.class) {
try {
Thread.sleep(60000000);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
},"wait 線程").start();
}
}
這裡看到我們有倆個線程。
JPS(JVM Process status)
JPS是使用的頻率最高的工具,和linux下的ps命令差不多(把J去掉就是一個ps)。
因為我這裡開啟了一個eclipse,所以運行結果如下所示:
如果打開任務管理器,就會發現這裡的11612就是我們的pid
因此JPS能夠查看:本地虛擬機唯一ID(lvmid local virtual machine id)
測試代碼:
import java.util.Scanner;
public class A {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
sc.next();
}
}
使用jps -l 查看主類
jps -l
使用jps -m 查看運行時的參數
jps -m
使用jps -v 查看虛擬機參數
jps -v
(上次寫的程式還留著參數,所以看起來會有很多)
使用mlv就能查看所有參數。
jps -mlv
Jstat(JVM state)
能看到類載入,記憶體,垃圾收集。
jstat -gcutil
能查指定id的GC
看這個就已經矇蔽了,所以我們來看一下官方文檔。
看完之後翻譯一下:
|參數|作用|
|----|----|
|S0|Survivor空間0的利用率占當前容量的百分比|
|S1|Survivor空間1的利用率占當前容量的百分比|
|E|Eden區域。。。|
|O|老年代|
等等
jstat -gcutil 8082 1000
每隔1000ms導出一次gc
元空間:本質和永久代類似,都是對JVM規範中方法區的實現。不過元空間與永久代的最大區別在於:元空間並不在虛擬機中,而是使用本地記憶體。因此,預設情況下,元空間的大小僅受本地記憶體限制。
jinfo
實時查看和調整虛擬機的各種參數。
jinfo -flag UseG1GC 8082
我們可以看到eclipse使用的就是G1收集器。
還可以動態的去修改JVM參數設置。
jmap
將jvm堆記憶體dump下來
jmap -dump:format=b,file=C:\Users\GodofOrange\Desktop\a.bin 8082
顯示堆中的統計信息。
jmap -histo 8028 > a.txt
jstack
列印線程信息
jstack -F 8028
列印棧信息
jstack -m 8028