JAVA之JVM调优-从eclipse开始

一、概述

     什么是jvm调优呢?jvm调优就是根据gc日志分析jvm内存分配、回收的情况来调整各区域内存比例或者gc回收的策略;更深一层就是根据dump出来的内存结构和线程栈来分析代码中不合理的地方给予改进。eclipse优化主要涉及的是前者,通过gc日志来分析。本文主要是通过分析eclipse gc日志为例来示例如何根据gc日志来分析jvm内存而进行调优,像根据关闭eclipse启动项、关闭各种校验等措施来优化eclipse本文不再阐述,网上有很多,本次测试的eclipse已经进行了配置上面的优化。

二、准备环境

eclipse 默认配置:eclipse.ini

-startup
plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.300.v20150602-1417
-clean
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.7
-Xms256m
-Xmx1024m

在配置的末尾处添加如下配置文件:

-XX:+PrintGCDetails   // 输出GC的详细日志            

-XX:+PrintGCDateStamps // 输出GC的时间戳(以日期的形式)

-Xloggc:gc.log  // 输出GC的详细日志

eclipse启动计时插件:

http://www.chendd.cn/information/viewInformation/experienceShare/148.a

下载后解压放置在eclipse或myeclipse的安装目录下dropins目录下即可。

GChisto.jar:gc日志分析工具jar包一个

直接点击gchisto.jar就可以运行,点add载入gc.log

Visual GC: java自带的内存监控工具,通过visual gc可以实时的监控到各个内存区域的变化。

Java VisualVM默认没有安装Visual GC插件,需要手动安装在JDK的安装目录的bin目录下双击jvisualvm.exe,即可打开Java VisualVM,在下面的启动界面中点击工具->插件->可用插件->Visual GC

安装完成后重启Java VisualVM,Visual GC界面自动打开,即可看到JVM中堆内存的分代情况

三、如何分析GC日志

摘录GC日志一部分(绿色为年轻代gc回收;蓝色为full gc回收):

2016-07-05T10:43:18.093+0800: 25.395: [GC [PSYoungGen: 274931K->10738K(274944K)] 371093K->147186K(450048K), 0.0668480 secs] [Times: user=0.17 sys=0.08, real=0.07 secs]

2016-07-05T10:43:18.160+0800: 25.462: [Full GC [PSYoungGen: 10738K->0K(274944K)] [ParOldGen: 136447K->140379K(302592K)] 147186K->140379K(577536K) [PSPermGen: 85411K->85376K(171008K)], 0.6763541 secs] [Times: user=1.75 sys=0.02, real=0.68 secs]

通过上面日志分析得出,PSYoungGen、ParOldGen、PSPermGen属于Parallel收集器。其中PSYoungGen表示gc回收前后年轻代的内存变化;ParOldGen表示gc回收前后老年代的内存变化;PSPermGen表示gc回收前后永久区的内存变化。young gc 主要是针对年轻代进行内存回收比较频繁,耗时短full gc 会对整个堆内存进行回城,耗时长,因此一般尽量减少full gc的次数。

通过两张图非常明显看出gc日志构成:

young gc 日志

Full GC日志

四、启动调优

启动eclipse查看默认配置下启动时间大概是70秒左右。

根据GChisto分析gc日志看出来,启动过程中进行了45次minor gc,没有进行full gc;young gc的时间差不多是0.56秒左右。

第一步优化:

为了避免内存频繁的动态扩展,直接把-Xms配置和-Xmx一致,修改如下:

-Xms1024m

修改完毕,重新启动:

启动时间缩小到17秒,分析gc日志得出young gc10次。

第二步优化:

通过Visual GC看到在eclipse启动的时候classloader加载class的时间有一些,关闭字节码可能会优化一部分启动时间,加入如下参数:

-Xverify:none(关闭Java字节码验证,从而加快了类装入的速度)

重新启动测试,启动时间已经优化到了15秒!

至此优化结束,附最终的eclipse.ini文件:

-startup
plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.300.v20150602-1417
-clean
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.7
-Xms1024m
-Xmx1024m
-Xverify:none
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:gc.log

参考文章:jvm调优-从eclipse开始 - 平凡希 - 博客园一、概述 什么是jvm调优呢?jvm调优就是根据gc日志分析jvm内存分配、回收的情况来调整各区域内存比例或者gc回收的策略;更深一层就是根据dump出来的内存结构和线程栈来分析代码中不合理的地方给予https://www.cnblogs.com/xiaoxi/p/6641940.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,JVM调优是为了优化Java程序的性能和内存管理。为了进行JVM调优,可以采取以下几个步骤: 1. 调整JVM参数: 可以通过修改JVM启动参数来调整JVM的堆大小、永久代空间大小等。例如,通过设置"-Xmx"参数来增加堆大小,通过设置"-XX:MaxPermSize"参数来调整永久代空间大小。这可以帮助程序更有效地使用内存资源。 2. 优化垃圾回收: JVM使用垃圾回收机制来自动管理内存。可以通过调整垃圾回收算法和参数来改善垃圾回收性能。例如,可以使用并行垃圾回收器(Parallel GC)或CMS垃圾回收器(Concurrent Mark-Sweep GC)来提高垃圾回收的效率。 3. 检查类加载器和重复类: 当运行Java应用程序时,可能会出现类加载器和重复类的问题。可以使用工具如jmap和Eclipse MAT来检查并解决这些问题。通过分析加载较慢或重复加载的类,可以减少不必要的内存开销和提高性能。 4. 分析内存分配和使用情况: 可以使用工具如jmap、jstat和VisualVM来监视和分析Java应用程序的内存分配和使用情况。这些工具可以提供有关堆、永久代和线程等方面的详细信息,帮助定位内存泄漏和性能瓶颈。 通过以上方法,可以进行JavaJVM的调优,以提高程序的性能和效率。注意,在调优过程中,应该根据具体情况进行调整,并进行有效的测试和验证,以确保调优策略的有效性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Java JVM调优](https://blog.csdn.net/weixin_40213018/article/details/116602377)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [javaJVM调优](https://blog.csdn.net/qq_39291929/article/details/80874097)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值