JVM 性能优化实践

配置介绍

神舟笔记本 I7-3610QM+8G+240SSD+500G

模仿

使用JAVA开发的著名软件有两个EclipseIdea,我们从此剖析

Idea 2017

JVM参数如下

JVM 性能优化实践_第1张图片
image.png
  1. -Server 运行模式
    虚拟机在解释执行相对应的另一方面,虚拟机还有力度更强的编译器:当虚拟机运行在客户端模式是使用C1轻量级,服务端是C2重量级。显而易见,重量级会消耗更多的系统资源但是带来更强的性能。如果大家像我一样系统资源足够且长时间使用编译软件推荐是用C2

  2. -Xms -Xmx
    堆初始值128m 最大750m
    计算 最大值为不超过系统1/4

  3. ReservedCodeCacheSize
    保留代码所用的Cache大小

  4. UseConcMarkSweepGC
    -XX:+UseConcMarkSweepGC:设置年老代为并发收集。测试中配置这个以后,-XX:NewRatio=4的配置失效了,原因不明。所以,此时年轻代大小最好用-Xmn设置。

  5. XX:SoftRefLRUPolicyMSPerMB
    -XX:SoftRefLRUPolicyMSPerMB=N 这个参数比较有用的,官方解释是:Soft reference在虚拟机中比在客户集中存活的更长一些。其清除频率可以用命令行参数 -XX:SoftRefLRUPolicyMSPerMB=来控制,这可以指定每兆堆空闲空间的 soft reference 保持存活(一旦它不强可达了)的毫秒数,这意味着每兆堆中的空闲空间中的 soft reference 会(在最后一个强引用被回收之后)存活1秒钟。注意,这是一个近似的值,因为 soft reference 只会在垃圾回收时才会被清除,而垃圾回收并不总在发生。系统默认为一秒,我觉得没必要等1秒,客户集中不用就立刻清除,改为 -XX:SoftRefLRUPolicyMSPerMB=0;

  6. ea
    -ea[:"..." | : ]
    上述参数就用来设置jvm是否启动断言机制(从JDK 1.4开始支持),缺省时jvm关闭断言机制。
    用-ea 可打开断言机制,不加和classname时运行所有包和类中的断言,如果希望只运行某些包或类中的断言,可将包名或类名加到-ea之后。例如要启动包com.wombat.fruitbat中的断言,可用命令java -ea:com.wombat.fruitbat...

  7. useCanonCaches
    使用标准IO缓存

  8. preferIPv4Stack
    优先使用IPv4栈

  9. HeapDumpOnOutOfMemoryError
    堆内存溢出输出

  10. OmitStackTraceInFastThrow
    开启追踪

Eclipse

JVM 性能优化实践_第2张图片
1image.png

前面是使用了一些插件可以忽略

Diff

默认使用了G1收集器
Eclipse更使用更多内存
在使用G1垃圾回收器的时候,通过 JVM参数 -XX:+UseStringDeduplication 。 我们可以通过删除重复的字符串,只保留一个char[]来优化堆内存。这个选择在Java 8 u 20被引入

推荐文章

JVM

你可能感兴趣的:(JVM 性能优化实践)