博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM性能调优(先占坑,陆续补充)
阅读量:2393 次
发布时间:2019-05-10

本文共 1717 字,大约阅读时间需要 5 分钟。

  • 第一部分:JVM概述

  • java类加载机制和内存分配

关于JVM体系的简单介绍参考以下博文,这里不再赘述。

  • 几种垃圾收集器对比

 

  • 垃圾回收算法

 

  • 第二部分:JVM监控

 

  • 第三部分:JVM调优

首先,对jvm调优时需要理解和遵循三项基本原则:

第一,每次Minor GC都尽可能多的收集垃圾对象,我们称之为“Minor GC回收原则”。遵守这一原则可以减少应用程序进行Full GC的频率。因为Full GC持续的时间很长,是导致程序延迟和影响吞吐量的罪魁祸首;

第二,处理吞吐量和延迟问题时,垃圾处理器能使用的内存越大,及java堆内存越大,垃圾收集的效果越好,应用程序越流畅,我们称之为“GC内存最大化原则”;

第三,吞吐量、延迟、内存占用三个属性中任意选择两个进行JVM垃圾收集器调优,我们称之为“GC调优的3选2原则”。

GC日志是收集所需调优信息的最好途径。因此我们进行设置将JVM的垃圾回收信息输出:

-XX:+PrintGCTimeStamps  -XX:+PrintGCDetail   -xloggc:<filename>

-XX:+PrintGCTimeStamps表示打印垃圾收集的时间戳信息;

-XX:+PrintGCDetails表示打印垃圾收集的细节信息;

-xloggc:<filename>表示将垃圾收集的信息输出到<filename>文件;

17.058: [GC17.059: [DefNew: 157312K->19648K(176960K), 0.0532497 secs]         157312K->25567K(504640K), 0.0534119 secs]          [Times: user=0.06 sys=0.00, real=0.05 secs]
1197.554: [Full GC1197.554:           [Tenured: 93097K->113201K(327680K), 0.6489667 secs]           259329K->113201K(504640K),           [Perm : 58938K->58938K(98304K)], 0.6490816 secs]           [Times: user=0.30 sys=0.02, real=0.65 secs]

以上是我从输出的垃圾回收信息里面截取的两段,上面是执行minor GC信息,下面是执行Full GC信息,我们以第一段为例:

[DefNew: 157312K->19648K(176960K), 0.0532497 secs]

这段表示的是新生代垃圾回收的信息,回收前157312K回收后变为19648K,新生代分为Eden区和两个survivor,minor GC之后Eden区为空,其实19648K就是survivor区的大小,后面是所用的时间;

157312K->25567K(504640K), 0.0534119 secs]

这段提供了堆空间的回收前后的信息,已知堆空间和新生代的大小,则可以大致算出老年代的大小为:504640K-176960K=327680,回收前老年代大小为:157312K-157312K=0,回收后老年代大小为:25567K-19648k=5919k。

知道了垃圾回收的信息以及调优的原则,那么调优就变得简单了。在这里我们可以借助jConsole和jvisualvm等工具进行调优。对堆空间大小、新生代大小进行不断地调整,调整后再进行分析和对比。这是一个反复和循序渐进的过程,在这里直接贴一个别人写的详细的调优过程,大家可以作为参考:

调整参数:

-Xms:堆空间初始化化大小;

-Xmx:堆空间的最大值,一般-Xms与-Xmx设置为同一个值;

-Xmn:新生代空间的大小;

-XX:PermSize:永久带空间初始值及最小值;

-XX:MaxPermSize:永久带空间最大值,这两个值一般也设置为同一个值;

-

转载于:https://my.oschina.net/powerisam/blog/690839

你可能感兴趣的文章
Android对Kernel的改动汇总
查看>>
WGET 通过代理下载
查看>>
JITTER BUFFER
查看>>
IP协议报头学习笔记
查看>>
关于SIGPIPE导致的程序退出
查看>>
基于MTD的NAND驱动开发
查看>>
linux mtd源码分析(好东西)
查看>>
关于SIGBUS的总结
查看>>
JSP--9大隐式对象
查看>>
Servelt中主要对象的使用
查看>>
EL表达式的深刻认识
查看>>
JSP技术的学习总结
查看>>
JavaBean的初步认知
查看>>
重识java反射
查看>>
Spring的核心中IOC、DI
查看>>
Spring中注解的使用
查看>>
Spring的认识
查看>>
gitee的使用
查看>>
maven项目出现如下错误,求指点;CoreException: Could not calculate build plan:
查看>>
理解Paxos算法的证明过程
查看>>