關於VM和mode

不出意外這既是6月的第一份文章也是最後一份文章,由於到期末要考試了html

目前本機使用JDK11和1.8,默認是1.8,所以輸入java -version會是這樣java

java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)服務器

我的對Server VMmixed mode字眼表示不太理解,所以找了一下相關的JVM資料oracle

1.關於Server和Clientide

二者有不一樣的JIT編譯器應用於相同的運行時環境性能

Client VM是專門爲快速啓動和小內存(small footprints)而優化的,像GUI就很適合測試

而Server VM是專門爲高性能應用而優化的,如服務器應用優化

其餘的話有編譯的方法(compile policy),堆的默認值(heap defaults),內聯方法(inline policy)ui

比方說,Client VM的編譯器沒有采用複雜的優化技術,所以才能快速啓動,反之,Server VM採用大量複雜的優化,致使開始時響應很慢,但性能牛逼code

同時Server JVM的默認堆和最大堆都比Client的大

命令以下java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'

一些可能有用的信息↓

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/parallel.html#sthref30

怎麼切換默認的VM?不知道hhh

查了一下能夠經過java -client -version來切換,但實機測試過並沒有效果。。。

2.關於各類mode

JVM能夠用-Xint -Xcomp -Xmixed指定相應的模式(解釋interpreted、編譯compiled、混合)

簡單的總結是
解釋器模式就是執行字節碼
編譯器模式是所有轉換本地代碼
混合模式是在熱點方法使用本地代碼,而不常使用的就僅執行解釋(HotSpot由來)

前二者顯然是編譯期就能完成的事情(javac),然後者是運行期的事情就歸JIT來管了,這部分比較硬核有待惡補

相關文章
相關標籤/搜索