一張PDF瞭解JDK11 GC調優祕籍-附PDF下載

簡介

JDK11相比JDK10,添加了一個新的Source-File Mode,能夠直接經過java來運行單個java源文件,而不須要進行編譯。同時還提供了新的HTTP API,支持響應性stream。java

固然上面的都不是重點,重點的是JDK11是一個LTS版本,是繼JDK8以後的又一個LTS版本,也多是你們往後使用的最多的一個版本。git

因此JDK11的JVM參數吸取了JDK9,JDK10的新特性和改動,並在他們的基礎上進行了微調。github

一樣在文章最後,我也將JDK11的GC調優祕籍作成了一張PDF,歡迎你們下載。優化

廢棄的VM選項

JDK11和JDK9,JDK10相比,廢棄的選項都差很少。這裏重點講下面幾個:spa

-XX:+AggressiveOpts

aggressive的中文意思是激進的,有進取心的意思。這個參數的意思是啓用激進的優化選項,默認狀況下是禁止的,而且是做爲一個體驗選項提供的。code

由於這個選項可能在後面的版本中做爲默認選項,因此在JDK11中是廢棄的。教程

-XX:+UseAppCDS

AppCDS是在JDK9 JPMS中引入的新特性,能夠提高java程序的啓動速度。內存

AppCDS默認狀況下是開啓的因此這裏也廢棄掉了。資源

注意,JVM中的參數若是是被廢棄掉了,並不必定說這個選項的特性JVM已經不支持了,也有多是JVM默認是開啓了這個選項。

Source-File Mode

什麼是Source-File Mode呢?get

Source-File Mode就是指能夠直接使用java命令來運行java源代碼,而不用使用javac進行編譯。

固然這個只對單文件的源代碼有效。

有兩種方式使用Source-File Mode,一種是源文件後面帶.java後綴,如:

java HelloWorld.java

一種是添加參數--source version選項:

java -source 11 HelloWorld
這裏的version指的是JDK版本號,能夠取值6,7,8,9,10,11。

若是沒有使用.java,則必須使用-source。

Source-File Mode的原理是將源代碼編譯到內存中,而後執行源代碼中的第一個class。

Code Heap狀態分析

咱們知道JVM中的JIT編譯器會將一些熱點的java代碼編譯成機器碼,而這些機器碼會存儲在一個叫作code cache的地方。

CodeHeap就是用來生成和管理這些機器碼的類。每次存儲請求都會分配必定大小的空間,這個值是由CodeCacheSegmentSize來定義的。

固然,爲了提高效率,你能夠將CodeCacheSegmentSize的大小設置爲和cache line大小一致。不過這不是必須的。

Code Heap狀態分析就是分析code cache的狀態。

CodeHeap狀態分析分爲兩個部分。 第一部分檢查整個CodeHeap並彙總全部認爲有用/重要的信息。 第二部分能夠根據須要選的特定的命令來輸出本身須要的那部分。

咱們舉幾個例子:

實時分析:

jcmd <pid> Compiler.CodeHeap_Analytics [<function>] [<granularity>]

其中function能夠有下面的幾個選項:

  • all - 列出全部的信息
  • aggregate - 檢查CodeHeap,並記住本地結構中的數據。
  • UsedSpace - 輸出已使用的空間
  • FreeSpace - 輸出空閒的空間
  • MethodCount - 輸出method count信息
  • MethodSpace - 輸出method space信息
  • MethodAge - 輸出method age信息
  • MethodNames - 輸出name信息
  • discard - 釋放該方法的全部資源

granularity是和aggregate配合使用的,表明一個aggregate表明的存儲空間大小。

AppCDS

JDK11在AppCDS上面有所提高,能夠支持從module path導出 archiving classes:

$ java -Xshare:dump -XX:SharedClassListFile=class_list_file \
    -XX:SharedArchiveFile=shared_archive_file \
    --module-path=path_to_modular_jar -m module_name

使用:

$ java -XX:SharedArchiveFile=shared_archive_file \
    --module-path=path_to_modular_jar -m module_name

總結

一樣的,爲JDK11特地準備了一個PDF,下載連接以下:

JDK11GC-cheatsheet.pdf

本文連接: http://www.flydean.com/jdk11-gc-cheatsheet/

最通俗的解讀,最深入的乾貨,最簡潔的教程,衆多你不知道的小技巧等你來發現!

歡迎關注個人公衆號:「程序那些事」,懂技術,更懂你!

相關文章
相關標籤/搜索