【eclipse】eclipse启动优化&打印GC信息&重要的堆结构连接
eclipse启动优化,终于不那么卡了!
网上找了好多都是myEclipse的优化的,跟eclipse有点区别,找了很多方法还是不能让这个eclipse(Version: Kepler Release)快起来,太费事了,终于给俺找到一个挺好用的方法,转来的。
首先了解下JVM中几个相关的概念:
Xms:最小堆大小
Xmx:最大堆大小
Xmn:年轻代堆大小
Xss:每个线程的堆大小
PermSize:初始持久代大小
MaxPermSize:最大持久代大小
一般Xms、Xmx设置相同,PermSize、MaxPermSize设置相同,这样可以避免伸缩堆大小带来的性能损耗。
首先eclipse安装根目录下打开eclipse.ini,加上配置:
1
2
3
|
-Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails |
目的是运行eclipse的时候可以打出详细gc过程。
启动eclipse,然后打开gc.log一看,哇塞启动一次就做了几十次GC,包括不少次Full GC,着手优化……
先解决Full GC的问题:
330.500: [GC [PSYoungGen: 525312K->78416K(612352K)] 525312K->78488K(2010624K), 0.1593021 secs] [Times: user=0.31 sys=0.03, real=0.16 secs]
411.536: [GC [PSYoungGen: 603728K->87025K(612352K)] 603800K->127661K(2010624K), 0.2689894 secs] [Times: user=0.53 sys=0.03, real=0.27 secs]
416.796: [GC [PSYoungGen: 150763K->87023K(612352K)] 191399K->134619K(2010624K), 0.1861188 secs] [Times: user=0.42 sys=0.00, real=0.19 secs]
416.983: [Full GC [PSYoungGen: 87023K->0K(612352K)] [ParOldGen: 47596K->99447K(1398272K)] 134619K->99447K(2010624K) [PSPermGen: 82334K->82282K(524288K)], 1.3994638 secs] [Times: user=2.89 sys=0.05, real=1.40 secs]
512.079: [GC [PSYoungGen: 17629K->96K(612352K)] 117076K->99543K(2010624K), 0.0077157 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
512.087: [Full GC [PSYoungGen: 96K->0K(612352K)] [ParOldGen: 99447K->98749K(1398272K)] 99543K->98749K(2010624K) [PSPermGen: 82297K->82297K(524288K)], 0.9666690 secs] [Times: user=1.09 sys=0.00, real=0.97 secs]
572.079: [GC [PSYoungGen: 16092K->64K(612352K)] 114842K->98813K(2010624K), 0.0094051 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
572.089: [Full GC [PSYoungGen: 64K->0K(612352K)] [ParOldGen: 98749K->98719K(1398272K)] 98813K->98719K(2010624K) [PSPermGen: 82297K->82297K(524288K)], 0.7332189 secs] [Times: user=1.14 sys=0.02, real=0.73 secs]
632.081: [GC [PSYoungGen: 15297K->64K(612352K)] 114016K->98783K(2010624K), 0.0081388 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
632.090: [Full GC [PSYoungGen: 64K->0K(612352K)] [ParOldGen: 98719K->98693K(1398272K)] 98783K->98693K(2010624K) [PSPermGen: 82297K->82297K(524288K)], 0.5883680 secs] [Times: user=1.76 sys=0.00, real=0.59 secs]
692.098: [GC [PSYoungGen: 24107K->960K(612352K)] 122801K->99661K(2010624K), 0.0099850 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
692.108: [Full GC [PSYoungGen: 960K->0K(612352K)] [ParOldGen: 98701K->99492K(1398272K)] 99661K->99492K(2010624K) [PSPermGen: 82381K->82381K(524288K)], 0.7610910 secs] [Times: user=1.61 sys=0.00, real=0.76 secs]
752.118: [GC [PSYoungGen: 20655K->32K(612352K)] 120148K->99524K(2010624K), 0.0244374 secs] [Times: user=0.02 sys=0.00, real=0.03 secs]
752.143: [Full GC [PSYoungGen: 32K->0K(612352K)] [ParOldGen: 99492K->99303K(1398272K)] 99524K->99303K(2010624K) [PSPermGen: 82382K->82382K(524288K)], 0.6761450 secs] [Times: user=0.98 sys=0.00, real=0.68 secs]
如上GC日志可以看出,Full GC主要是针对Tenured、Perm区(养老区和永久区)的GC,好那先调整Perm大小,指定充裕的持久代区域,eclipse.ini中加入:
-XX:PermSize=728m
-XX:MaxPermSize=728m
再次启动看gc.log,Full GC没有了,但是还有很多次普通GC,说明还是需要进一步优化。
eclipse的初始堆大小分配得很小,因此不利于年轻代堆大小的分配,如果设置的年轻代堆大小Xmn大于最小堆大小Xms,eclipse将无法启动。
因此,将Xms调整为728m,重启动后观察GC大幅减少。
最后调整Xmn,年轻代堆大小,经过反复比较后,发现设置“-Xmn3072m”效果最优。
优化后的GC日志:
1
2
|
3.203 : [GC 3.204 : [DefNew: 209776K->26176K(235968K), 0.0876304 secs] 209776K->27184K(498112K), 0.0876921 secs] [Times: user= 0.09 sys= 0.00 , real= 0.09 secs] 5.422 : [GC 5.422 : [DefNew: 235968K->12433K(235968K), 0.0989335 secs] 236976K->39296K(498112K), 0.0990229 secs] |
在接近6秒的启动时间内,eclipse总共只做了2次普通GC回收,怎么样效果明显吧!
一般在不对eclipse进行相关设置的时候,使用eclipse总是会觉得启动好慢,用起来好卡,其实只要对eclipse的相关参数进行一些配置,就会有很大的改善。
加快启动速度
1.在eclipse启动的时候,它总是会搜索让其运行的jre,往往就是这个搜索过程让eclipse启动变慢了。(没设置时,等2-3s出现进度条,设置后直接出现进度条)
只要在eclipse.ini中加入-vm的参数就可以了
2.取消所有启动时要激活的插件(在用时激活也一样)和其它的相关的在启动时执行的操作。
3.关闭自动更新
减少jvm内存回收引起的eclipse卡的问题
这个主要是jvm在client模式,进行内存回收时,会停下所有的其它工作,带回收完毕才去执行其它任务,在这期间eclipse就卡住了。所以适当的增加jvm申请的内存大小来减少其回收的次数甚至不回收,就会是卡的现象有明显改善。
主要通过以下的几个jvm参数来设置堆内存的:
-Xmx512m | 最大总堆内存,一般设置为物理内存的1/4 |
-Xms512m | 初始总堆内存,一般将它设置的和最大堆内存一样大,这样就不需要根据当前堆使用情况而调整堆的大小了 |
-Xmn192m | 年轻带堆内存,sun官方推荐为整个堆的3/8 |
堆内存的组成 | 总堆内存 = 年轻带堆内存 + 年老带堆内存 + 持久带堆内存 |
年轻带堆内存 | 对象刚创建出来时放在这里 |
年老带堆内存 | 对象在被真正会回收之前会先放在这里 |
持久带堆内存 | class文件,元数据等放在这里 |
-XX:PermSize=128m | 持久带堆的初始大小 |
-XX:MaxPermSize=128m | 持久带堆的最大大小,eclipse默认为256m。如果要编译jdk这种,一定要把这个设的很大,因为它的类太多了。 |
我的eclipse.ini配置(12g内存的笔记本):
-startup
plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.300.v20150602-
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.7
-Xms3072m
-Xmx3072m
-XX:PermSize=728m
-XX:MaxPermSize=728m
-XX:+UseParallelGC
-XX:+DisableExplicitGC
-Xloggc:gc.log
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
还有其它的相关参数可以看看下面的参考材料,很有启发的:
-XX:+UseParallelGC 使用并发内存回收
-XX:+DisableExplicitGC 禁用System.gc()的显示内存回收
eclipse相关设置来来减少卡的现象
1.关闭自动构建。在启用时,每保存一下,eclipse就会自动为我们构建整个项目,这样对于大的项目来说,每次保存时都会造成很卡。其实自动构建完全没有必要,只要保证在运行前构建一次就ok了,eclipse也会在运行前自动为我们构建,所以关闭是最明智的选择。
2.关闭拼写检查设置
参考材料
jvm启动参数大全:http://www.blogjava.net/midstr/archive/2008/09/21/230265.html
jvm结构的一些知识(其中的堆的构成):http://hllvm.group.iteye.com/group/wiki/2905-JVM
jvm堆与GC知识:http://ruijf.iteye.com/blog/1028455
eclipse启动调优:http://www.iteye.com/topic/756538
eclipse自带的help contents(搜索"Running Eclipse"可以找到启动相关的配置)
【eclipse】eclipse启动优化&打印GC信息&重要的堆结构连接的更多相关文章
- 如何让ubuntu启动时打印字符信息----字符启动
一.概述 要想实现字符启动,需要修改grub.cfg(启动配置文件),将“静态启动”改为“字符启动”. 但是grub.cfg通常只作为只读文件,修改它时实际上修改的是其他的文件然后再通过update- ...
- eclipse jetty启动内存溢出
一.eclipse jetty启动内存溢出, 异常信息 Exception in thread "ConfigClientWorker-Default" java.lang.Out ...
- Idea 打印GC
设置 Run ⇒ Edit Configurations ⇒ VM options 添加 -XX:+PrintGCDetails 运行程序后会在末尾打印GC信息 2019-11-02 13:07:47 ...
- 2013第51周二eclipse启动优化
2013第51周二eclipse启动优化 今天注意到了eclipse.ini配置文件中gc.log--在eclipse启动时清空,然后记录了eclipse每次运行过程中的gc分配情况,看到了一篇很好的 ...
- eclipse启动优化,终于不那么卡了!
eclipse启动优化,终于不那么卡了! 网上找了好多都是myEclipse的优化的,跟eclipse有点区别,找了很多方法还是不能让这个eclipse(Version: Kepler Release ...
- Eclipse打印GC日志
一.生成gc.log 第一步:右键项目或文件——Run As——Run Configurations. 第二步:点击Arguments,在VM arguments中填写-Xloggc:F:/gc.lo ...
- eclipse启动优化文章集合
1. eclipse启动优化,终于不那么卡了! http://www.cfei.net/archives/445
- eclipse使用和优化配置
一.简介 eclipse 可谓是Java开发界的神器,基本占据了大部分的Java开发市场,而且其官方还对其他语言提供支持,如C++,Ruby,JavaScript等等.为 什么使用它?我想离不开下面的 ...
- eclipse慢 优化(转)
1.打开 eclipse.ini -showsplash com.genuitec.myeclipse.product --launcher.XXMaxPermSize 256M -vmargs -D ...
随机推荐
- 递推DP UVA 1366 Martian Mining
题目传送门 /* 题意:抽象一点就是给两个矩阵,重叠的(就是两者选择其一),两种铺路:从右到左和从下到上,中途不能转弯, 到达边界后把沿途路上的权值相加求和使最大 DP:这是道递推题,首先我题目看了老 ...
- 392 Is Subsequence 判断子序列
给定字符串 s 和 t ,判断 s 是否为 t 的子序列.你可以认为 s 和 t 中仅包含英文小写字母.字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=10 ...
- JAVA使用Ldap操作AD域
项目上遇到的需要在集成 操作域用户的信息的功能,第一次接触ad域,因为不了解而且网上其他介绍不明确,比较费时,这里记录下. 说明: (1). 特别注意:Java操作查询域用户信息获取到的数据和域管理员 ...
- [ USACO 2007 FEB ] Lilypad Pond (Gold)
\(\\\) \(Description\) 一张\(N\times M\)的网格,已知起点和终点,其中有一些地方是落脚点,有一些地方是空地,还有一些地方是坏点. 现在要从起点到终点,每次移动走日字\ ...
- 什么是vuejs之重新认识vuejs
什么是vuejs? 1.它是一个轻量级的mvvm框架 2.数据驱动+组件化的前端开发 3.github超过25k+的stat数,社区完善 4.vuejs更轻量,gzip后大小只有20k+ 5.vuej ...
- Calendar的用法
DAY_OF_MONTH的主要作用是cal.get(DAY_OF_MONTH),用来获得这一天在是这个月的第多少天 Calendar.DAY_OF_YEAR的主要作用是cal.get(DAY_OF_Y ...
- Django - 自定义filter
自定义filter 自定义filter时,使用装饰器fileter 在html中,使用传参方式为: 参数1|函数名:参数2 并且函数和参数之间,不能有空格,如果有空格,会报错. filter和simp ...
- Crossword Answers UVA - 232
题目大意 感觉挺水的一道题.找出左面右面不存在或者是黑色的格子的白各,然后编号输出一横向单词和竖向单词(具体看原题) 解析 ①找出各个格子的编号 ②对每个节点搜索一下 ③输出的时候注意最后一个数据后面 ...
- [luogu4127 AHOI2009] 同类分布 (数位dp)
传送门 Solution 裸数位dp,空间存不下只能枚举数字具体是什么 注意memset最好为-1,不要是0,有很多状态答案为0 Code //By Menteur_Hxy #include < ...
- Python学习-while循环语句
Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务.即重复性的做一件事情 语法形式如下: while 判断条件: 条件满足执行语句…… ...