在線生成JVM參數配置


在線生成JVM參數配置

網址:http://jvmmemory.com

堆參數設置

-XX:+PrintGC

使用這個參數,虛擬機啟動后,只要遇到GC就會打印日志。

-XX:+PrintGCDetails

可以查看詳細信息,包括各個區的情況

-XX:+PrintHeapAtGC 

打印 GC 前后的詳細堆棧信息

-Xms

設置Java程序啟動時初始化JVM堆內存大小。

-Xmx

設置Java程序能獲得最大JVM堆內存大小。

在實際工作中,我們可以直接將初始的堆大小與最大堆大小設置相等,這樣的好處是可以減少程序運行時的垃圾回收次數,從而提高性能。

-XX:+PrintFlagsInitial

打印JVM初始化參數。

 -XX:+PrintFlagsFinal 

標記人為修改過的參數。

-XX:+PrintCommandLineFlags

查看默認垃圾回收器。
新生代參數設置

-XX:NewSize=5m

設置新生代最小空間大小

-XX:MaxNewSize=10m

設置新生代最大空間大小

-Xmn2g

可以設置新生代的大小,設置一個比較大的新生代會減少老年代的大小,這個參數對系統性能以及GC行為有很大的影響,新生代大小一般會設置整個堆空間的1/3。

-XX:SurvivorRatio=8(默認) 

用來設置新生代中eden空間和from/to空間的比例。含義:-XX:SurvivorRatio=eden/from=eden/to。基本策略:盡可能將對象預留在新生代,減少老年代的GC次數。

-XX:NewRatio=2(默認) 

設置新生代和老年代的比例:-XX:NewRatio=老年代/新生代。

對象進入老年代參數設置

 -XX:MaxTenuringThreshold=15 

新生代每次GC之后如果對象沒有被回收,則年齡加1,默認情況下為15

堆溢出參數配置

-XX:+HeapDumpOnOutOfMemoryError

使用該參數可以在內存溢出時導出整個堆信息

-XX:HeapDumpPath=D:/OOM.dump

可以設置導出堆的存放路徑。

堆棧相關參數配置

 -Xss1m(默認)

來指定線程的最大棧空間

方法區相關參數配置

JDK1.2 ~ JDK6,使用永久代來實現方法區

-XX:PermSize=64M

設置永久代最小空間大小。

-XX:MaxPermSize=64M(默認) 

如果系統運行時生產大量的類,就需要設置一個相對合適的方法區,以免出現永久區內存溢出的問題。

Java8,元空間取代永久代,存儲位置不同,永久代物理是堆的一部分,和新生代,老年代地址是連續的

而元數據放到本地化的堆內存(native heap)中,這一塊區域就叫Metaspace,中文名叫元空間。

存儲內容不同,元空間存儲類的元信息
靜態變量和常量池等並入堆中。
相當於永久代的數據被分到了堆和元空間中。

-XX:MetaspaceSize=128m(默認)

初始化大小。

 -XX:MaxMetaspaceSize=128m 

JVM默認在運行時根據需要動態地設置MaxMetaspaceSize的大小。

直接內存(堆外內存)參數配置

-XX:MaxDirectMemorySize=64m

該值是有上限的,默認是64M,最大為sun.misc.VM.maxDirectMemory()。 直接內存使用達到上限時,就會觸發垃圾回收(Full GC),如果不能有效的釋放空間,就會引起系統的OOM。

注:heap ByteBuffer,該類對象分配在JVM的堆內存里面,直接由Java虛擬機負責垃圾回收。
direct ByteBuffer是通過jni在虛擬機外內存中分配的。

生命周期中等或較長的對象,適合堆外內存。
直接的文件拷貝操作,或者I/O操作,適合堆外內存:
直接使用堆外內存就能少去資源從用戶內存拷貝到系統內存的操作。

DirectByteBuffer是通過虛引用(Phantom Reference)來實現堆外內存的釋放的:
虛引用主要被用來跟蹤對象被垃圾回收的狀態,
通過查看引用隊列(ReferenceQueue)中是否包含對象所對應的虛引用來判斷它是否即將被垃圾回收,從而采取行動。
它並不被期待用來取得目標對象的引用。

初始化DirectByteBuffer對象時,如果當前堆外內存的條件很苛刻時,會主動調用System.gc()強制執行Full GC。

TLAB參數配置

Thread Local Allocation Buffer即線程本地分配緩存:
一個線程專用的內存分配區域,是為了加速對象分配對象而生的。
每一個線程都會產生一個TLAB,該線程獨享的工作區域,Java虛擬機使用這種TLAB區來避免多線程沖突問題,提高了對象分配的效率。

-XX:+UseTLAB(默認開啟) 

使用TLAB

-XX:TLABSize=64k(默認) 

設置TLAB初始化大小

-XX:TLABRefillWasteFraction=64

設置維護進入TLAB空間的單個對象大小,它是一個比例值,默認為64,即如果對象大於整個空間的1/64,則在堆創建對象。

 -XX:+ResizeTLAB 

自調整TLABRefillWasteFraction閾值。

-XX:+PrintTLAB 

查看TLAB信息

from https://mp.weixin.qq.com/s/_n8l5VNKnUYCACbDsmKk8w


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM