基于JVM的异常诊断和性能调优

基于JVM的异常诊断和性能调优

ID:43962877

大小:367.85 KB

页数:19页

时间:2019-10-17

基于JVM的异常诊断和性能调优_第1页
基于JVM的异常诊断和性能调优_第2页
基于JVM的异常诊断和性能调优_第3页
基于JVM的异常诊断和性能调优_第4页
基于JVM的异常诊断和性能调优_第5页
资源描述:

《基于JVM的异常诊断和性能调优》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、基于JVM的异常诊断和性能调优一、JVMGC原理介绍:以前我作为java开发人员,用的都是sun的JVM(这也是当今最好用的虚拟机),由于垃圾收集的工作都是交给JVM做,只要编码的时候注意不要在静态的集合对象中只添加对彖,而不删除对彖的情况发牛,就可以避免内存泄漏,所以口己从没有认真考虑过要将GC好好学习一下;然而实际的工作表明,不深入的学习GC的原理,很难解决牛产中的问题。学习开始从理解JVM的GC工作原理入手。垃圾收集的过程主要分三个步骤:标记(mark),清除(sweep),整理(compact)。标记过程就是看看在JVM堆中有哪些对象

2、还有用,哪些对象不用了,有用的对象就作个标记,不用的对象就不作标记;对未作标记的对象(即不用的对象)就作第二步清除;当清除完以后,山于有用的对象此时是分散的分布在JVM堆中,JVM堆就会有许多堆碎片,因而需要做第三步報理;整理(也有人翻译成“压缩”,实际上最准确的翻译是“使紧凑”)就是将散放在JVM堆中的有川对象移动到堆底部,削除堆碎片。然而,原理虽然简单,可各个厂商在对GC的具体实现上却有区别,从而导致相同的应用,在不同的JVM上会出现不同问题。现在我们主要看看IBMJVMGC和SUNJVMGC的实现方式和行为。java与C/C++在内存泄

3、鉤上定义不同,java上内存泄露是说持有了不该再持有的对彖一).SUN的JVM介绍SUN的JVM釆用分代垃圾收集(generationalgarbagecollection)的方式,从JDK1.4.1开始,它将JVM堆栈分成三个部分:年轻代(younggeneration)、年老代(old/tenuredgeneration)和持久代(permanentgeneration)。关于分代垃圾收集的详细介绍请杏阅参考文献([25]、[26])o持久代用于存储装载的类、方法対象(Class对象和Method対象)和其它相关的元数据,默认大小为4MB

4、。以下是几个常用的设置持久代的JVM参数:-XX:PermSize=4m设定持久代的大小-XX:MaxPermSize=64m设定持久代大小的兹大值-Xnoclassgc禁止对持久代进行收集对于年轻代和年老代的设定,是基于这样的统计分析结果:在绝大多数的应用程序中,一些对象在创建后很快成为了垃圾,这部分对象占到了新创建对象的90%以上;而另一些对象,数R相对较少,但要长期驻留在内存屮;于是对于这两种存活时间不同的对象,SUN的JVM将堆分出了两个不同的区域,采用不同算法进行收集。SUN的JVM通过不同的收集器实现不同的收集算法。卞而就详细介绍

5、儿种收集器,以及在这两个代中所采用的收集器。复制收集器(CopyingCollector):堆被分成两个大小相等的空间,其中一个为活跃的空间用丁•分配对象,另一个为不活跃的空间未使用;当用于分配的空间占满后,程序就会停止,活跃的对象被从活跃的空间复制到不活跃的空间屮;复制完成后,空间的角色就会转换,原来不活跃的空间成为了新的活跃空间。由于活跃的对象直接被复制到不活跃的空间,所以此过程并不存在标记这个步骤。标记-淸除收集器(MarkandSweepCollector):在标记过程中,死对象•所占用的地址空间将被记录在专门的表中;标记过程结束后,

6、相邻的死对彖所占的空间将合并在一起,rh于此收集器不整理堆,将会产生越来越多的堆碎片。标记■整理收集器(MarkandCompactCollector):在标记过程中,给活的对彖或死的对彖做标记;标记过程结朿后,将堆中活对象复制到堆的底部,使这些活的对象紧凑的排列在一起,避免堆碎片产生;在执行此收集过程中将停止所有应用程序线程的执行。在年轻代主要采用复制收集器进行收集。实际上SUN的JVM对此收集器做了一些改进,它将年轻代分为一个创建空间(edenspace)和两个残存空间(survivorspace)。小的收集将活的对彖从创建空间和一个残存

7、空间复制到另一个残存空间;然后将创建空间和另一个残存空间看成是一个整体,分配对彖;当空间被占满,就将活的对彖从创建空间和另一个残存空间复制到第一个残存空间;如此反复。若残存空间过小,部分活的对象将溢出到年老代,从而增加了年老代的的收集频率,由于在年老代进行的收集所花的时间远多于在年轻代进行的收集,运行系统性能就会恶化,所以合理设置残存空间的大小,可以对JVM进行调优。以下是几个常用的设置年轻代的JVM参数:-XX:SurvivorRatio=8设定创建空间和残存空间之间的大小比率-XX:MaxTenuringThreshold=0设定残存空间

8、期限阈值(TenuringThreshold)-XX:NewSize=size设定年轻代的大小(字节)-XX:MaxNewSize=size设定年轻代的最大大小(字

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。