一、概述

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

二、准备环境

eclipse 默认配置:eclipse.ini

  1. -startup
  2. plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
  3. --launcher.library
  4. plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.300.v20150602-1417
  5. -clean
  6. -product
  7. org.eclipse.epp.package.jee.product
  8. --launcher.defaultAction
  9. openFile
  10. --launcher.XXMaxPermSize
  11. 256M
  12. -showsplash
  13. org.eclipse.platform
  14. --launcher.XXMaxPermSize
  15. 256m
  16. --launcher.defaultAction
  17. openFile
  18. --launcher.appendVmargs
  19. -vmargs
  20. -Dosgi.requiredJavaVersion=1.7
  21. -Xms256m
  22. -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文件:

  1. -startup
  2. plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
  3. --launcher.library
  4. plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.300.v20150602-1417
  5. -clean
  6. -product
  7. org.eclipse.epp.package.jee.product
  8. --launcher.defaultAction
  9. openFile
  10. --launcher.XXMaxPermSize
  11. 256M
  12. -showsplash
  13. org.eclipse.platform
  14. --launcher.XXMaxPermSize
  15. 256m
  16. --launcher.defaultAction
  17. openFile
  18. --launcher.appendVmargs
  19. -vmargs
  20. -Dosgi.requiredJavaVersion=1.7
  21. -Xms1024m
  22. -Xmx1024m
  23. -Xverify:none
  24. -XX:+PrintGCDetails
  25. -XX:+PrintGCDateStamps
  26. -Xloggc:gc.log

jvm调优-从eclipse开始的更多相关文章

  1. jvm系列(六):jvm调优-从eclipse开始

    jvm调优-从eclipse开始 概述 什么是jvm调优呢?jvm调优就是根据gc日志分析jvm内存分配.回收的情况来调整各区域内存比例或者gc回收的策略:更深一层就是根据dump出来的内存结构和线程 ...

  2. JVM 调优之 Eclipse 启动调优实战

    本文是我12年在学习<深入理解Java虚拟机:JVM高级特性与最佳实践>时,做的一个 JVM 简单调优实战笔记,版本都有些过时,不过调优思路和过程还是可以分享给大家参考的. 环境基础配置 ...

  3. jvm系列(五):jvm调优-从eclipse开始

    概述 什么是jvm调优呢?jvm调优就是根据gc日志分析jvm内存分配.回收的情况来调整各区域内存比例或者gc回收的策略:更深一层就是根据dump出来的内存结构和线程栈来分析代码中不合理的地方给予改进 ...

  4. jvm系列(七):jvm调优-工具篇

    16年的时候花了一些时间整理了一些关于jvm的介绍文章,到现在回顾起来还是一些还没有补充全面,其中就包括如何利用工具来监控调优前后的性能变化.工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗 ...

  5. JVM调优-工具篇

    原文地址 16年的时候花了一些时间整理了一些关于jvm的介绍文章,到现在回顾起来还是一些还没有补充全面,其中就包括如何利用工具来监控调优前后的性能变化.工具做为图形化界面来展示更能直观的发现问题,另一 ...

  6. 老李分享:JVM调优

    老李分享:JVM调优   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨 ...

  7. 《深入理解Java虚拟机》-----第5章 jvm调优案例分析与实战

    案例分析 高性能硬件上的程序部署策略 例 如 ,一个15万PV/天左右的在线文档类型网站最近更换了硬件系统,新的硬件为4个CPU.16GB物理内存,操作系统为64位CentOS 5.4 , Resin ...

  8. JVM调优的几种策略

    一.JVM内存模型及垃圾收集算法  1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) 永久代(Perm) 其中New和Tenured属于堆内存,堆内存会从J ...

  9. Java虚拟机(七):JVM调优案列

    Eclispe启动优化 概述 什么是jvm调优呢?jvm调优就是根据gc日志分析jvm内存分配.回收的情况来调整各区域内存比例或者gc回收的策略:更深一层就是根据dump出来的内存结构和线程栈来分析代 ...

随机推荐

  1. window.print()小知识

    window.print()  实际上,是浏览器打印功能菜单的一种程序调用.与点击打印功能菜单一样,不能精确分页,不能设置纸型,套打的问题更加无从谈起,只不过,可以让用户不用去点菜单,直接点击网页中的 ...

  2. JVM虚拟机学习一:垃圾回收算法总结

    1.java虚拟机中涉及到的数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型. 基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了某 ...

  3. Android项目实战(五十一):浅谈GreenDao

    比较出名的数据库框架 GreenDao使用步骤: 1.app目录下的build.gradle文件 添加依赖 compile 'org.greenrobot:greendao:3.2.0' 顶部添加插件 ...

  4. 2014/08/31 Zushi

    今天是逗子森户海滨浴场开放的最后一天,趁着最后的光景来这里透透气. 在学皮划艇准备下海的人们,貌似还挺有趣. 来自云端的上帝之手. 谁愿意和我一起向着夕阳弄桨. 夕阳西下,那里是家乡的方向. 灯塔和神 ...

  5. git 入门教程之版本控制

    版本控制 我们知道 git 是分布式版本控制系统,所以称被控制对象是版本本身没错,但是从git 命令中发现,并没有版本这个名词,有的只是commit,所以前几节我一直称其为提交. 为了避免后续教程引发 ...

  6. LNMP + Apache 架构配置

    从事前端开发已3年有余,越来越发现前端开发要学习的知识已不仅仅是html+css+js那么简单了,2017年市场上就有了大前端的概念,可以说对前端工程师的要求也越来越高了,从招聘的要求中可以看到熟悉一 ...

  7. web前端(14)—— JavaScript的数据类型,语法规范1

    编辑器选择 对js的编辑器选用,有很多,能对html编辑的,也能对js编辑,比如notepad++,visual studio code,webstom,atom,pycharm,sublime te ...

  8. Linux内存描述之概述--Linux内存管理(一)

    1 前景回顾 1.1 UMA和NUMA两种模型 共享存储型多处理机有两种模型 均匀存储器存取(Uniform-Memory-Access,简称UMA)模型 将可用内存以连续方式组织起来, 非均匀存储器 ...

  9. Node 各个版本支持ES2015特性的网站

    如果想了解Node 各个版本支持ES2015到那个程度,可以看下面网站. https://node.green/

  10. 几个常用dos网络命令

    ping www.baidu.com 测试网络的同时,查看ip地址 1. 如图:百度的ip为  14.215.177.39.浏览器直接输入ip即可进入百度首页. 另外还有,14.215.177.38 ...