GC的調優工具 :jstat 主要針對於GC的java
經過Dos命令運行 D:\compile\worker.java瀏覽器
從新開啓一個Dos窗口安全
jstat-class2041(java程序的pid值) :查看加載了多少個類多線程
jstat -compiler 2041 :查看編譯的狀況併發
jstat -gc 2041 查看垃圾的回收統計工具
jstat -gc 2041 1000 5 1秒打印一次總共打印5次this
GC的調優工具 jmap :主要針對於內存使用狀況的線程
1)經過 Dos 命令運行 D:\compile\Worker.javaorm
2)從新開啓一個Dos窗口對象
jmap-heap 2041(java程序的PID值) //查看內存使用狀況
jmap -histo 2041 |more //查看內存中對象數量及大小
jamp -dump:format=b,file=d:/test/dump.dat 2041 //將內存使用狀況dump到文件中
jhat -port 9999 d:/test/dump.dat //經過jhat對dump文件進行分析 端口號能夠自定義 而後在瀏覽器中經過 127.0.0.1:9999就能夠訪問了.
GC的調優工具 jstack :主要針對於線程
1)線程的六種狀態:
新建,就緒,運行(運行的時候會發生等待或者阻塞),死亡
2)經過jstack命令能夠查看java的程序狀態
jstack 2041(Java程序的pid值)
GC的可視化調優工具
本地調優:該工具位於JDK安裝目錄 /bin/jvisualvm.exe //雙擊能夠直接使用
該工具涵蓋了上述全部命令
遠程調優:
JVM的線程安全與鎖的倆種形式
線程安全:多線程,併發,操做統一數據 就可能引起安全問題 須要用到"同步"解決
"同步"分類:
同步代碼塊:
格式:
synchronized (鎖對象){
//要加鎖的代碼
}
注意:1)同步代碼塊的鎖對象能夠是任意類型的對象
2)必須使用同一把鎖 否側可能出現鎖不住的狀況
同步方法:
靜態同步方法:
鎖對象是:該類的字節碼文件對象
非靜態同步方法:鎖對象是this
Lock 鎖
1)LOCK鎖和synchronized的區別
1.1) synchronized 是java內置的語言,是java的關鍵字
1.2)synchronized 不須要手動區去釋放鎖 當synchronized方法或者synchronized代碼塊執行完畢後 系統會自動釋放該對象鎖的佔用
而lock必須手動釋放鎖,若是沒有主動釋放鎖,就有可能形成死鎖的問題
示例代碼