【Java虚拟机】Java虚拟机深度讲解、VisualVM工具、JVM调优
從控制臺看Java版本
HotSpot
它是Sun JDK和OpenJDK中所帶的虛擬機,也是目前使用范圍最廣的Java虛擬機。 最初并非由Sun公司開發,而是由一家名為“Longview Technologies”的小公司設計的。
HotSpot VM既繼承了Sun之前兩款商用虛擬機的優點(如前面提到的準確式內存管理),也有許多自己新的技術優勢, 如它名稱中的HotSpot指的就是它的熱點代碼探測技術。
JVM Client/Server是兩套不同的機制
Java語言可以做C/S,也可以做B/S
Client是對桌面級應用的內存分配做優化。桌面系統一次只能按一個按鈕,線程少很多。內存分配的空間,相比Server要小一些。
B/S是可以并發的,Server把內存分配的空間比較大。在內存比較緊張的情況下,可能會造成空間浪費。
一、JVM總體結構圖
二、JVM堆結構圖及分代
圖:Java堆示意圖,對象創建后,若不被回收,會從左到右一步一步走。
年輕代(Eden對象創建初始化的地方,垃圾回收率是最高的,大約80%、From、To)、老年代、持久代
1、新生代
整個過程,說白了就是,折騰這一堆對象,看誰能進入老年代。
2、老年代
3、永久代(JDK1.7之后,逐漸不使用)
三、JVM中垃圾回收算法
1、引用計數 (Reference Counting)
2、復制 (Copying)(比如Survivor區)
綠色是需要被復制的對象,藍色的是空的,灰色的是即將被回收的對象,橘色的是空的。
3、標記-清除 (Mark-Sweep)
4、標記-整理(Mark-Compact)
四、JVM中的垃圾收集器
如果說,垃圾回收算法是方法論的話,那么垃圾收集器就是對該方法論的具體實現。
HotSpot中的分代收集器
不想過長地占用工作線程的時間(減少用戶線程等待的時間)
收集器配合關系:
解決吞吐量的問題,通過減少
吞吐量 = CPU運行用戶程序的時間 / CPU運行用戶程序的時間+GC耗時
并發(包含用戶線程):GC線程一邊回收工作,用戶線程一邊運行
并行(不包含用戶線程):用戶線程停止在安全點上,多個GC的線程一起工作
含有Parallel的收集器都是并行收集器,是不能和用戶線程同時運行的。含有Concurrent的收集器可以和用戶線程同時工作。
年輕、老年代的回收期可以這樣組合:
JDK1.7加入
五、JVM優化
JDK自帶的小工具:在jdk bin目錄下
C:\Program Files\Java\jdk-11.0.3\bin
…
Visualvm從JDK9開始就不再打包在jdk里面了,可以從官方下載:https://visualvm.github.io/download.html
安裝完成后,可以下載使用強大的Visual GC插件
運行了一個爬蟲,效果如下:
獲取當前虛擬機的信息
在Eclipse的Run Configurations中,修改垃圾收集器
Eclipse調優
總結
以上是生活随笔為你收集整理的【Java虚拟机】Java虚拟机深度讲解、VisualVM工具、JVM调优的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java文件操作】一个将文件转化为十六
- 下一篇: 【Java】不需要正则表达式,提取字符串