知识大全 JVM优化:缩短eclipse的启动时间

Posted 时间

篇首语:浪再高,也在船底;山再高,也在脚底。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 JVM优化:缩短eclipse的启动时间相关的知识,希望对你有一定的参考价值。

JVM优化:缩短eclipse的启动时间  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  最近自从eclipse安装了很多插件以后 启动变得非常的慢 每次启动 要消耗近半分钟 这是不正常的 今天决定好好优化一下

  我所使用的eclipse是Eclipse Java EE IDE for Web Developers 版本 跑在MAC OSX上 SSD+ G RAM 这么高性能的机器竟然不能秒开eclipse 这太说不过去了 哦 还有我使用的JVM是Oracle的HotSpot 来自于JDK bit

  首先 在优化前 让我们看看eclipse启动时 JVM的各项性能指标 因为我并不能准确的判定eclipse的启动完成时间 所以我只能说大约事件

  首先启动JDK自带的JVM性能监视工具 在java\\bin的目录下 有一个jvisualvm 它是绑定在JDK中的visualvm 双击启动 visualvm 然后启动eclipse 在eclipse启动完成以后 使用visualvm的查看eclipse的Visual GC情况 如图:

  

  上图中说明在eclipse的启动过程中 JIT对字节码进行了向机器码的编译 花去了 秒的时间 Class加载花去了 秒的时间 Minor GC发生了 次 花去 秒 Full GC发生了 次 仅仅花去了 毫秒

  我们再去MBean选项查看 发现新生代使用ParNew垃圾收集器 而老年代使用的是CMS垃圾收集器

  

  总上情况看出 由于MAC的性能比较好 所以垃圾回收并没有消耗太多的时间 并且CMS+ParNew本身就是并行垃圾回收 不会造成用户程序太多的停顿 时间主要消耗在了JIT的即时编译和Class加载上了

  首先要优化的就是class加栽 因为eclipse这个工具是一个成熟的工具 经过了这么多人的验证 所以我充分信任eclipse的代码 允许 eclipse的代码在加载的时候 跳过字节码验证 关闭字节码验证的方法是在vm的args中加入参数 Xverify:none 对于eclipse来说 找到eclipse ini 加入 Xverify:none 让我们再重启一下eclipse 看看class加载时间是否减小 再次启动 发现class加载事件缩小到 秒 比之前少了 秒

  然后优化的是JIT的时间 在使用eclipse编写程序时 主要是文本编辑 编译和运行 JIT虽然可以带给我们高性能 但是JIT在编译机器码的时候 却要消耗很多的时间 eclipse对项目的编译和运行本身就很慢 切运行时是启动一个新的java进程 跟eclipse本身无关 所以 我可以接受抛弃JIT编译器 而只是用JVM解释器执行字节码所带来的效率降低 这样可以去除JIT编译的时间 做法如下 在eclipse ini中加入vm的参数 Xint 意思是只使用解释器 让我们来看看结果:

  

  JVM编译器时间变成了 一下减掉 秒 但是 由于缺少了运行时的即时编译优化方案 代码的运行时间变长了 eclipse的整体启动时间慢了更多 超过了 秒 由此可见 JIT是多么有用的一项技术 所以禁止JIT的尝试失败了 我们把之前的参数 Xint去掉

  哦 对了 我还装了很多的插件 尤其是android开发插件 启动的时候对插件的激活也会花去很多时间 屏蔽插件激活的方法: Windows > Preferences 输入 startup 点击 Startup and Shutdown 把不需要的插件勾掉 此外 还需要关掉不必要的validation 方法为:Windows > Preferences > Validation 只选你需要的

  做完以上工作 我发现eclipse启动稍微快了一些 掐著秒表计算的花了大约 秒

  最后 再优化一下GC和堆栈吧 虽然说 GC已经表现的很好了 都没有超过 秒 但是GC的频率如此高 说明JVM的内存的分配是不合理的 为此 我们需要重新对JVM内存进行划分 为了对JVM的内存进行合理分配 我们需要了解eclipse启动过程中 GC到底发生了什么事情 打开gc log的方法如下:

  想eclipse ini的vm参数中添加

   XX:+PrintGCDetails

   Xloggc:/users/joey/Documents/gc log

  启动eclipse 生成gc log 打开log 进行分析

  第一次Minor GC发现 新生代的大小约为 M 堆的大小约为 M 再接下来的GC中 新生代始终没有扩容 这说明 新生代的大小合适

   : [GC : [ParNew: K > K( K) secs] K > K( K) secs] [Times: user= sys= real= secs]

  第一次发生Full GC时 发现老年代已经扩容到约 M 而永生代扩容到约 M

   : [Full GC (System) : [CMS: K > K( K) secs] K > K( K) [CMS Perm : K > K( K)] secs] [Times: user= sys= real= secs]

  而直到最后一次GC 老年代占用也没超过 M 永生带占用也没有超过 M 但他们的占用空间均超过了 M 由此 我们有理由规定一个初始堆大小 最终 通过分析 我给eclipse ini添加了如下几个参数:

   server

   Xverify:none

   XX:PermSize= m

   XX:MaxPermSize= m

   Xms m

   Xmx m

   Xmn m

   Xss m

   server是让JVM以server模式运行 加重JIT的优化作用 由于eclipse是经常开着不关 在server模式下 JIT会随着运行的时间 把字节码更深刻的变成成机器代码 加快运行速度

   Xverify:none 跳过对字节码的验证

  PermSize永生带设置为 M 堆的初始大小设置为 M 新生代站了 M 每个线程栈大小设为 M

  在这种设置下 Full GC已经完全消失 但还是剩下了 次左右的Minor GC 大约花掉 秒 这是可以接受的 如果为了完全消除GC而把新生代的空间设大 那也是一种内存的浪费 重启eclipse 启动时间已经落在了 秒之内 如图:

cha138/Article/program/Java/hx/201311/26314

相关参考

知识大全 浅析打开eclipse出现Incompatible JVM的解决方法

浅析打开eclipse出现IncompatibleJVM的解决方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一

知识大全 JVM优化配置

JVM优化配置  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   J

知识大全 Java程序性能优化-JVM调优

Java程序性能优化-JVM调优  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   JV

知识大全 jvm性能优化及内存分区

   SomeofthedefaultvaluesforSunJVMsarelistedbelow      

旁路系统在大型再热式机组中,除了回收工质(凝结水)和缩短机组启动时间、调节新蒸汽压力和协调机、炉工况,满足机组负荷变化的

旁路系统在大型再热式机组中,除了回收工质(凝结水)和缩短机组启动时间、调节新蒸汽压力和协调机、炉工况,满足机组负荷变化的要求,实现机组滑压运行外,其作用还有()A、保护锅炉不致超压B、防止再热器因干烧

旁路系统在大型再热式机组中,除了回收工质(凝结水)和缩短机组启动时间、调节新蒸汽压力和协调机、炉工况,满足机组负荷变化的

旁路系统在大型再热式机组中,除了回收工质(凝结水)和缩短机组启动时间、调节新蒸汽压力和协调机、炉工况,满足机组负荷变化的要求,实现机组滑压运行外,其作用还有()A、保护锅炉不致超压B、防止再热器因干烧

知识大全 Eclipse的启动机制研究

Eclipse的启动机制研究  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近我一直在研究Ec

知识大全 Eclipse启动运行速度调优

Eclipse启动运行速度调优  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  提高JAVAIDE

抗生素废水处理工程优化设计及快速启动

天方药业股份有限公司以生物发酵法生产抗生素为主,主要产品是乙酰螺旋酶素。该企业于1998年第一期废水处理工程验收达标并投产运行后,分别于2000年、2002年进行了两次扩建,使其废水处理站总处理能力达

抗生素废水处理工程优化设计及快速启动

天方药业股份有限公司以生物发酵法生产抗生素为主,主要产品是乙酰螺旋酶素。该企业于1998年第一期废水处理工程验收达标并投产运行后,分别于2000年、2002年进行了两次扩建,使其废水处理站总处理能力达