说说eclipse调优,缩短启动时间
初始配置:
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20150204-1316
-product
org.eclipse.epp.package.jee.product
-showsplash
org.eclipse.platform
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms40m
-Xmx512m
优化之前通过Java VisualVM监控的启动参数,主要:
- 发生了4次 FullGC
- 发生了14次 MinorGC
这是我们优化的重点,主要是将 FullGC降到0,减少 MinorGC的次数
第一步:
在 eclipse.ini中添加如下参数,将 GC日志输出到文件:
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-Xloggc:gc.log
gc.log中的内容:
0.681: [GC (Allocation Failure) [PSYoungGen: 10240K->1528K(11776K)] 10240K->2429K(39424K), 0.0083283 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
0.987: [GC (Allocation Failure) [PSYoungGen: 11768K->1528K(22016K)] 12669K->5986K(49664K), 0.0109152 secs] [Times: user=0.06 sys=0.00, real=0.01 secs]
1.204: [GC (Allocation Failure) [PSYoungGen: 22008K->1528K(22016K)] 26466K->14565K(49664K), 0.0291480 secs] [Times: user=0.09 sys=0.02, real=0.03 secs]
1.313: [GC (Allocation Failure) [PSYoungGen: 22008K->1504K(42496K)] 35045K->23357K(70144K), 0.0263866 secs] [Times: user=0.13 sys=0.00, real=0.03 secs] 1.339: [Full GC (Ergonomics) [PSYoungGen: 1504K->0K(42496K)] [ParOldGen: 21853K->21409K(49664K)] 23357K->21409K(92160K), [Metaspace: 6760K->6760K(1056768K)], 0.1901100 secs] [Times: user=0.64 sys=0.00, real=0.19 secs]
2.702: [GC (Allocation Failure) [PSYoungGen: 40960K->1509K(42496K)] 62369K->28244K(92160K), 0.0098152 secs] [Times: user=0.05 sys=0.01, real=0.01 secs]
3.485: [GC (Metadata GC Threshold) [PSYoungGen: 21650K->9716K(67584K)] 48385K->36459K(117248K), 0.0162970 secs] [Times: user=0.06 sys=0.00, real=0.02 secs] 3.502: [Full GC (Metadata GC Threshold) [PSYoungGen: 9716K->0K(67584K)] [ParOldGen: 26742K->31170K(68608K)] 36459K->31170K(136192K), [Metaspace: 19718K->19718K(1069056K)], 0.1742468 secs] [Times: user=0.48 sys=0.00, real=0.17 secs]
6.650: [GC (Allocation Failure) [PSYoungGen: 55296K->13299K(68608K)] 86466K->48886K(137216K), 0.0309857 secs] [Times: user=0.08 sys=0.01, real=0.03 secs]
6.990: [GC (Metadata GC Threshold) [PSYoungGen: 33294K->12934K(91136K)] 68881K->48529K(159744K), 0.0413872 secs] [Times: user=0.09 sys=0.01, real=0.04 secs] 7.032: [Full GC (Metadata GC Threshold) [PSYoungGen: 12934K->0K(91136K)] [ParOldGen: 35595K->40112K(87040K)] 48529K->40112K(178176K), [Metaspace: 32473K->32473K(1079296K)], 0.4352191 secs] [Times: user=1.25 sys=0.16, real=0.44 secs]
9.942: [GC (Allocation Failure) [PSYoungGen: 73216K->18418K(91648K)] 113328K->59604K(178688K), 0.0228894 secs] [Times: user=0.08 sys=0.00, real=0.02 secs]
12.391: [GC (Metadata GC Threshold) [PSYoungGen: 88358K->21486K(103424K)] 129544K->71185K(190464K), 0.0337033 secs] [Times: user=0.09 sys=0.03, real=0.03 secs] 12.425: [Full GC (Metadata GC Threshold) [PSYoungGen: 21486K->0K(103424K)] [ParOldGen: 49698K->68256K(131584K)] 71185K->68256K(235008K), [Metaspace: 52853K->52844K(1099776K)], 0.2803747 secs] [Times: user=0.83 sys=0.00, real=0.28 secs]
15.204: [GC (Allocation Failure) [PSYoungGen: 81920K->13244K(109568K)] 150176K->81508K(241152K), 0.0245405 secs] [Times: user=0.09 sys=0.00, real=0.02 secs]
注意:4个 FullGC的 ParOldGen部分:
[ParOldGen: 21853K->21409K(49664K)]
[ParOldGen: 26742K->31170K(68608K)]
[ParOldGen: 35595K->40112K(87040K)]
[ParOldGen: 49698K->68256K(131584K)]
结论:FullGC发生的节点都是老年代容量不足扩展导致的!
而 eclipse.ini中的 Heap配置如下:
-Xms40m
-Xmx512m
第二步:
修改配置,扩大老年代容量(PC内存8G),如下:
-Xms1024m
-Xmx1024m
-Xmn256m
-XX:PermSize=256m
-XX:MaxPermSize=256m
- 将年轻代固定为 128m,即 -Xmn128m;则老年代也固定下来了
- 将永久代固定为 96m(<java8)
- java8 不再有 Perm的概念,则需要配置
-XX:MetaspaceSize=256m
重启 eclipse,日志如下:
4.416: [GC (Allocation Failure) [PSYoungGen: 196608K->32758K(229376K)] 196608K->47446K(1015808K), 0.0670608 secs] [Times: user=0.14 sys=0.09, real=0.07 secs]
10.804: [GC (Allocation Failure) [PSYoungGen: 229366K->32751K(229376K)] 244054K->89691K(1015808K), 0.0876533 secs] [Times: user=0.27 sys=0.03, real=0.09 secs]
- 已经没有 FullGC啦! MinorGC也只有2次了!
第三步:
GC收集器优化:
- 从日志中看得出来默认使用的是 PS-GC(Parallel Scavenge + Parallel Old)器,别名:‘吞吐量优先’收集器,此收集器适合的场景是:后台运算而不需要太多前台交互的任务,显然做为 eclipse的收集器并不合适!
于是,考虑更换下 GC收集器,而CMS(Concurrent-Mark-Sweep)是一种以获取最短回收停顿时间为目标的收集器,考虑到工作时与 eclipse的频繁交互,显然此处使用 CMS更适合!
启用CMS
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:CMSInitiatingOccupancyFraction=85
下面是本次测试最终的配置:
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20150204-1316
-product
org.eclipse.epp.package.jee.product
-showsplash
org.eclipse.platform
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xverify:none
-Xms1024m
-Xmx1024m
-Xmn256m
-XX:MetaspaceSize=256m
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:+DisableExplicitGC
-Xnoclassgc
-XX:CMSInitiatingOccupancyFraction=85
-- java8中已经没有Perm了
-- -XX:PermSize=256m
-- -XX:MaxPermSize=256m
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-Xloggc:gc.log
本次学习是基于《深入理解java虚拟机.第二版.第五章.调优案例分析与实践》进行的,感谢作者深厚的内功,更多详细内容请参考原著!学习是必须滴!
说说eclipse调优,缩短启动时间的更多相关文章
- eclipse调优
基于Eclipse 4.7.0 (Oxygen) 目的:加快eclipse启动速度 修改eclipse安装目录下配置文件eclipse.ini(1)指定eclipse运行的jre,不让其进行搜索-vm ...
- 2、MyEclipse和Eclipse调优,MyEclipse配置(tomcat和jdk的内存设置),jar引入相关知识点,将Java项目编程web项目的办法
1.WindowàPreferenceàGeneralàWorkspaceàText file encoding都改成UTF-8 2.WindowàPreferenceàGeneralàEdito ...
- Eclipse设置、调优、使用(转自)
转自http://yuanzhifei89.iteye.com/blog/974082 eclipse调优 一般在不对eclipse进行相关设置的时候,使用eclipse总是会觉得启动好慢,用起来好卡 ...
- Eclipse设置、调优、使用
eclipse调优 一般在不对eclipse进行相关设置的时候,使用eclipse总是会觉得启动好慢,用起来好卡,其实只要对eclipse的相关参数进行一些配置,就会有很大的改善. 加快启动速度 1. ...
- Eclipse的设置、调优、使用(解决启动卡顿等问题)----转
eclipse调优 一般在不对eclipse进行相关设置的时候,使用eclipse总是会觉得启动好慢,用起来好卡,其实只要对eclipse的相关参数进行一些配置,就会有很大的改善. 加快启动速度 1. ...
- 转: Eclipse设置、调优、使用 (强烈推荐)
转注:写的非常详累,并且图文并茂,值得一看. http://yuanzhifei89.iteye.com/blog/974082 eclipse调优 一般在不对eclipse进行相关设置的时候,使用e ...
- jvm内存模型、常见参数及调优
JVM内存结构: 主要分为:方法区.堆.虚拟机栈.本地方法栈.程序计数器,其中方法区和堆是线程共享的,其他的都是线程隔离的. 方法区: 主要存放类的信息.静态变量.常量.编译后的方法代码,永久代Per ...
- jvm系列(六):jvm调优-从eclipse开始
jvm调优-从eclipse开始 概述 什么是jvm调优呢?jvm调优就是根据gc日志分析jvm内存分配.回收的情况来调整各区域内存比例或者gc回收的策略:更深一层就是根据dump出来的内存结构和线程 ...
- eclipse定制化配置调优、初始化配置指南、可以解决启动慢等问题
配置eclipse的jvm参数 打开eclipse根目录下的eclipse.ini在最后面加上如下的jvm参数 -Xms400m -Xmx1400m -XX:NewSize=128m -XX:MaxN ...
随机推荐
- CentOS 6.0 VNC远程桌面配置方法(转帖)
问题:新装开发机,安装VNC软件后,按照下面文档配置后,无法用VNC view连接,关闭防火墙后可以连上 解决方法:说明问题出在防火墙配置上,除了允许15900端口外,还有其他要设,经过排查后,加上如 ...
- GNU Radio: 射频子板
本文简要介绍 USRP 配套的子板参数信息. 射频子板WBX-40 性能特点 频率覆盖:50 MHz – 2.2GHz 最大信号处理带宽:40MHz 行为描述 WBX-40提供高宽带收发器,可提供高达 ...
- ETL流程概述及常用实现方法
ETL流程概述及常用实现方法 http://blog.csdn.net/btkuangxp/article/details/48224187 目录(?)[-] 1抽取作业 1手工开发抽取作业时候的常用 ...
- java基础-Map的静态初始化以及Map的遍历等.....................
1.map的静态初始化,以及map遍历的几种方法: package com.cy.test; import java.util.HashMap; import java.util.Iterator; ...
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #2 如何编译Linux内核
HACK #2 如何编译Linux内核 本节介绍编译Linux内核的方法.当发现bug而修改源代码或者添加新功能时,就需要对内核进行重新编译,生成二进制映像文件.另外,如果想要使用发布版内核中无效的功 ...
- 使用Fiddler实现网络限速
Fiddler实现网络限速方法: 1.点击FiddlerScript 2.在脚本里相应的地方添加“2”处两行代码(不加注释),保存(Save Script) 第一行为请求延时3秒,第二行为响应延时1. ...
- go run helper
# go run helper -a :强制编译相关代码,不论编译代码是否最新 -n :打印编译过程需要用到的命令,但不真正执行他们 -p n :并行编译,n为并行的数量 -v :列出被编译的代码包的 ...
- 「小程序JAVA实战」小程序的横向视频和页面拦截(59)
转自:https://idig8.com/2018/09/24/xiaochengxujavashizhanxiaochengxudehengxiangshipinheyemianlanjie58/ ...
- Linux CPU 100%, kill -9 杀不掉进程
1: top 查看 >top -c 此时 我们使用kill -9 15003, 杀掉这个进程短暂的CPU降低几秒, 然后死灰复燃了, 又一个进程占了CPU 99% 2: 查看15003 进程状态 ...
- maven使用阿里云maven库
在maven\conf\settings.xml中的mirrors添加 <mirror> <id>nexus-aliyun</id> <name>Nex ...