java优化

1.为每个线程生成自己的Random对象,因为不同线程在使用Random对象时,为更新一个内部种子而竞争。

2.使用ConcurrentHashMap而不是SynchronizedMap

3.使用各Collection类、StringBuilder和StringBuffer时,预先给定一个容量大小,因为自动扩容会占用不少的CPU。

4.对生产环境可以用 -server -XX:TieredCompilation 启动JVM,让JVM更多的优化代码.

5.2G~32G环境,用 -d64 -XX:+UseCompressedOops

6,32G以上环境,用 -d64

7.使用 -XX:+UseParallelOldGC 来启用多程的垃圾回收,如果不支持 -XX:+UseParallelOldGC ,可以用 -XX:+UseParallelGC 只开启多线程新生代垃圾回收

8.用 -Xms 和 -Xmx 将 JVM的堆空间最小值和最大值设定为相同大小,可以减少动态调整空间,fullGC对系统的影响。

9.用 -Xmn  将 JVM的新生代空间最小值和最大值设定为相同大小,可以减少动态调整空间,fullGC对系统的影响,仅在前一条配置下生效。

10.用 -XX:PermSize 和 -XX:MaxPermSize 指定JVM永久代的大小为相同值,可以减少动态调整空间,fullGC对系统的影响

11.大小设定经验:不设置空间参数,让系统正常运行一段时间,收集在JVM自动进行FullGC时几个空间的大小,堆空间大小建议值为FullGC时老年代大小的3~4倍。永久代的大小建议值为FullGC时永久代大小的1.2~1.5倍。新生代空间建议值为FullGC时老年代大小1~1.5倍。

12.如果MinorGC的时间过长,超过系统可接受的最大停顿时间,减小新生代空间,不得小于总堆大小的10%如果MinorGC的过于频繁,超过系统可接受的停顿频率,增大新生代空间。

13.如果日志中只有FullGC,每次老年代空间并得到足够的释放,需增加老年代空间的大小。

14.如果启用 -XX:+UseConcMarkSweepGC ,采用CMS收集器并行的老年代GC时,需增大老年代大小约20~30%,因为并发的老年代GC需要的时间更长,增加空间能减少GC的频率。

你可能感兴趣的:(java优化)