JDK8的内存调优

面试官:怎么做JDK8的内存调优?

JDK8的内存调优主要针对的是堆和元空间。内存调优时常用到JVM参数有这些:

-server
JVM的server模式, 在多CPU服务器中性能可以得到更好地发挥。JDK的64位版本只支持server模式,因此在这种情况下,选项是隐式的,即默认是server模式。

内存调优实例
尽可能把堆内存的空间设置大一些,以减少垃圾回收的次数。假设服务器上的可用内存还有12GB,那么先指定堆所分配内存的最大值和初始值为8GB。一般情况下,年轻代内存大小需在整个堆大小的1/2到1/4之间,那么就指定年轻代内存大小为3GB。再把Eden区和一个Survivor区的空间大小的比率设置为4。元空间第一次触发垃圾回收的内存大小的阈值设置为256MB,一般情况下足够用。元空间所分配内存的最大值设置为512MB,为了避免极端情况下占用大量内存。另外,还需要明确指定JVM以server模式启动。

java -server -Xmx8G -Xms8G -Xmn3G -XX:SurvivorRatio=4 -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M -jar one-more-study-0.0.1-SNAPSHOT.jar

如果执行jmap -heap命令查看对应Java进程的内存配置和使用情况,应该是这样的:

Attaching to process ID 31828, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.251-b08

using thread-local object allocation.
Parallel GC with 8 thread(s)

Heap Configuration:   #堆的内存配置
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   # 堆内存的最大值
   MaxHeapSize       = 8589934592 (8192.0MB) 
   # 年轻代内存的大小
   NewSize           = 3221225472 (3072.0MB) 
   # 年轻代内存的最大值
   MaxNewSize        = 3221225472 (3072.0MB) 
   # 老年代内存的大小
   OldSize           = 5368709120 (5120.0MB) 
    # 老年代和年轻代空间大小的比率
    # 因为设置Xmn参数,该设置未生效
   NewRatio                 = 2
   #Eden区和一个Survivor区的空间大小的比率
   SurvivorRatio            = 4 
    # 元空间第一次触发垃圾回收的内存大小
   MetaspaceSize       = 268435456 (256.0MB)
    # 元空间内存的最大值
   MaxMetaspaceSize    = 536870912 (512.0MB)
   G1HeapRegionSize    = 0 (0.0MB)

Heap Usage: # 堆的使用情况
PS Young Generation
Eden Space: # Eden区内存的使用情况
   capacity = 2147483648 (2048.0MB)
   used     = 901945720 (860.16MB)
   free     = 1245537928 (1187.83MB)
   42.000120505690575% used
From Space: # Survivor的From区内存的使用情况
   capacity = 536870912 (512.0MB)
   used     = 0 (0.0MB)
   free     = 536870912 (512.0MB)
   0.0% used
To Space: # Survivor的To区内存的使用情况
   capacity = 536870912 (512.0MB)
   used     = 0 (0.0MB)
   free     = 536870912 (512.0MB)
   0.0% used
PS Old Generation # 老年代内存的使用情况
   capacity = 5368709120 (5120.0MB)
   used     = 0 (0.0MB)
   free     = 5368709120 (5120.0MB)
   0.0% used

12047 interned Strings occupying 1045744 bytes.

猜你喜欢

转载自blog.csdn.net/yangshengwei230612/article/details/112302542