`
crazier9527
  • 浏览: 1011389 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Eclipse启动优化,分析其GC过程

阅读更多

beckrabbit 写道
受此文启发: 随想配置:更快的启动eclipse 

性能优化从身边做起。 

首先建立评估体系,将workspace里所有的项目close掉,关闭eclipse。优化的用例就是启动eclipse,open一个项目,eclipse会自动build这个项目,保证没有感觉到明显的卡,也就是没有full GC。 

开始: 

eclipse.ini里加入打印gc情况的参数: 

-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-verbose:gc
-Xloggc:gc.log


这样eclipse在运行过程中会记录gc日志,显示详细的gc情况,并打印在gc.log中,通过分析这个日志寻找eclipse的性能瓶颈和优化方式。 
我最初的参数只是在原版基础上调了堆大小 
-Xms512m
-Xmx512m


将堆初始化和最大值设为一样,消除堆大小根据当前堆使用情况而变化带来的影响。 
启动eclipse,发现gc.log里打出了很多full gc的日志 
引用
4.226: [Full GC 4.226: [Tenured: 18470K->19304K(30544K), 0.1159544 secs] 25154K->19304K(44368K), [Perm : 24574K->24554K(24576K)], 0.1160431 secs] [Times: user=0.13 sys=0.00, real=0.13 secs]

在启动的6秒多时间里共出现了8次full gc,所以启动慢,觉得启动时候挺卡的。从日志里可以看出来 FullGC主要是在回收tenured区和Perm区,其中Perm一直都是快满的状态,Perm : 24574K->24554K(24576K),Perm大小在不断调整,所以需要固定Perm区的大小,保证够用,eclipse.ini里加入 
-XX:PermSize=64m
-XX:MaxPermSize=64m


再启动:发现没有full gc了只有数量比较多的minor gc,挑启动开始到启动完成的第一条和最后一条日志 
引用
0.209: [GC 0.209: [DefNew: 4416K->511K(4928K), 0.0034707 secs] 4416K->614K(15872K), 0.0035239 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
…. 
6.383: [GC 6.383: [DefNew: 18880K->1985K(21184K), 0.0055311 secs] 46992K->30098K(68040K), 0.0055694 secs]

这6秒中GC日志打了69次, 而内存回收率还是蛮高的 young区18880-1985=16895 jvm 46992-30098=16894 都快接近100%了,可以看出young区是由小到大在不断调整大小,所以不断GC,因此设一个初始值吧,据说设置heap的1/4比较好,那就是128M,所以eclipse.ini加入 
-Xmn128m


再重启,发现GC日志就四条了,eclipse启动自然快了 

引用
1.292: [GC 1.292: [DefNew: 104960K->10984K(118016K), 0.0334165 secs] 104960K->10984K(511232K), 0.0334603 secs] [Times: user=0.03 sys=0.00, real=0.03 secs] 
2.182: [GC 2.182: [DefNew: 115944K->1852K(118016K), 0.0221714 secs] 115944K->11466K(511232K), 0.0222142 secs] [Times: user=0.00 sys=0.02, real=0.02 secs] 
3.987: [GC 3.987: [DefNew: 106779K->12531K(118016K), 0.0378228 secs] 116393K->22145K(511232K), 0.0378692 secs] [Times: user=0.03 sys=0.00, real=0.03 secs] 
5.377: [GC 5.377: [DefNew: 117491K->9403K(118016K), 0.0513728 secs] 127105K->31364K(511232K), 0.0514133 secs]


但是,启动后open我的多个项目,这些项目互相依赖,eclipse自动build,感觉有点小卡,发现日志里多了4次full GC,所以就卡了… 
引用
67.320: [Full GC (System) 67.320: [Tenured: 88847K->68809K(393216K), 0.2121213 secs] 117385K->68809K(511232K), [Perm : 41915K->41915K(65536K)], 0.2121747 secs] [Times: user=0.20 sys=0.00, real=0.20 secs] 
103.759: [Full GC (System) 103.759: [Tenured: 81882K->66784K(393216K), 0.3287387 secs] 185350K->66784K(511232K), [Perm : 53464K->53414K(65536K)], 0.3287897 secs] [Times: user=0.33 sys=0.00, real=0.33 secs]


这个时候Tenured区和Perm都还没到很接近最大值,但是为什么还有full GC呢,开始以为是JVM悲观认为Tenured区剩余空间不足以应对下一次minor GC 所以进行了full GC调整Tenured空间,索性直接增加了堆最大值到-Xmx728m(工作电脑的内存是3.5G),但重启后full gc还是有4次,而且有几次minor GC用的时间超过了0.1秒,这是因为增加了堆大小,导致GC用时也增加了,不能接受。所以还是改回-Xmx512m。 
再仔细观察日志,发现Full GC (System) 字样,这个意思是eclipse里调用了System.gc()手动触发了系统GC,好吧,哥已经给你分配足够空间了,你就省省吧,在eclipse.ini里加入: 
-XX:+DisableExplicitGC


这样就差不多了,整个过程没有出现full gc,再编码2个小时,中间只出现了一次full gc,在open build某50W行+的代码的时候,eclipse还是卡了… 
最后又稍微调了一下各代的大小,得到目前的参数: 
-Xms512m
-Xmx512m
-XX:PermSize=96m
-XX:MaxPermSize=96m
-Xmn168m
-XX:+DisableExplicitGC

另外没有去调GC策略,主要是觉得eclipse是客户端程序,默认的client单线程的GC策略应该是比较适合的,以后有时间再试试看吧。

分享到:
评论
1 楼 lxr215 2011-01-28  
写得太好了, 非常感谢!
不知道博主在哪找的这些知识?? 可否告之?

相关推荐

    Eclipse启动运行速度调优

    ### Eclipse启动运行速度调优详解 #### 一、引言 Eclipse作为一款广泛使用的开源集成开发环境(IDE),在软件开发领域占有举足轻重的地位。然而,随着项目复杂度的提升及功能的丰富,Eclipse的启动及运行速度往往...

    eclipse启动时间源码

    本文将探讨Eclipse启动过程中的关键源码,并介绍Java虚拟机(JVM)调优的相关知识。 首先,Eclipse的启动流程主要由`org.eclipse.ui.internal.Workbench`类的`startup`方法控制。在启动过程中,Eclipse会进行以下...

    eclipse配置优化

    为了提高Eclipse的启动速度和运行效率,我们可以对Eclipse的配置进行优化。以下是一些关键的优化策略,主要集中在JVM(Java虚拟机)参数的调整和Eclipse配置文件的修改上。 1. **JVM 参数优化**: - `-server`:...

    eclipse 启动时间

    Eclipse ShowTime是一个专门针对这个问题的插件,它能够帮助用户详细地了解Eclipse启动过程中的各个阶段所花费的时间,从而进行有针对性的优化。 Eclipse ShowTime插件的使用方法如下: 1. 安装:首先,你需要通过...

    eclipse性能优化 <深度理解jvm>读书笔记

    1. **启动速度优化**:可以通过减少工作空间中的项目数量,禁用不必要的插件,以及使用eclipse -clean启动来提高Eclipse的启动速度。另外,保持Eclipse的更新也是提高性能的关键,定期检查并安装最新的版本和补丁。 ...

    eclipse启动tomcat内存泄漏解决

    ### Eclipse启动Tomcat内存泄漏解决方案 #### 一、问题背景 在使用Eclipse集成开发环境(IDE)启动Tomcat服务器时,可能会遇到内存泄漏的问题。这种情况不仅会导致应用程序运行缓慢,严重时甚至会使得Tomcat服务器...

    Eclipse优化设置教程.docx

    本教程将介绍如何对Eclipse进行优化设置,以提升其性能。 首先,为了加快Eclipse的启动速度,我们可以采取以下措施: 1. **指定JRE路径**:在`eclipse.ini`配置文件中添加`-vm`参数,指定Eclipse应该使用的Java...

    mac mat jvm gc 内存分析

    在IT行业中,内存管理是Java开发中的一个关键环节,尤其是对于服务器端...总的来说,MAT是Java开发者解决内存问题的强大武器,结合JVM的GC机制,可以在Mac环境下对内存进行深入的分析和优化,提升应用的稳定性和性能。

    Eclipse Memory Analyzer1.8.1&安装使用指南

    Eclipse Memory Analyzer,通常简称为MAT(Memory Analyzer Tool),是一款由Eclipse基金会开发的强大内存分析工具,主要用于诊断Java应用程序的内存泄漏和优化内存使用。它提供了深入的heap dump分析,帮助开发者...

    Eclipse memory analyzer

    - 分析过程中,理解引用关系和GC Roots的重要性是关键,因为它们决定了对象能否被垃圾回收。 - 定期进行heap dump分析,结合代码审查,可以帮助预防和解决内存问题。 总之,Eclipse Memory Analyzer是Java开发者...

    eclipse调优及使用

    1. **设置JVM路径**:在`eclipse.ini`文件中添加`-vm`参数,指定JRE的路径,避免Eclipse启动时自动搜索,从而缩短启动时间。 2. **禁用非必需插件**:在启动时取消不需要的插件,只在需要时手动激活,以减少启动时的...

    JVM 调优之 Eclipse 启动调优实战

    **JVM调优实战——Eclipse启动调优** 在Java开发中,Eclipse作为常用的集成开发环境,其启动速度和运行效率对开发者的工作效率有着直接影响。本文将分享一个基于旧版环境(Dell E5410,Intel i3 CPU M 370,2GB内存...

    Eclipse全面提速小技巧.zip

    接着,"**2eclipse.ini -vm 新版JDK.txt**"强调了配置Eclipse启动参数的重要性。在eclipse.ini文件中,可以通过添加"-vm"参数指定使用新版JDK,这不仅可以利用新版本JVM的性能优化,还能避免因默认使用较旧JRE导致的...

    eclipse-jee-2020-12-R-win32-x86_64

    首先,Eclipse 4.18版本在性能方面做了优化,启动速度更快,内存占用更低,这对于日常开发来说至关重要。同时,它对Java语言的支持也更加完善,包括对Java 15的支持,使得开发者可以第一时间利用新版本Java的特性。 ...

    Eclipse TPTP

    这不仅包括了基本的CPU和内存使用情况监控,还包括了更高级的功能,如线程分析、JVM参数调整、GC(垃圾回收)行为分析等,这些都是进行性能调优时不可或缺的工具。 **标签**中提到的“Eclipse”、“Tomcat”、...

    android下如何调试程序,Eclipse使用DDMS

    - **调试过程**:此时,Eclipse将自动启动并连接到选定的进程,随后即可像正常调试一样设置断点、查看变量值等。 #### 监视Android应用程序的线程活动 - **查看线程列表**:通过DDMS可以查看应用程序的所有线程...

    eclipse.ini内存设置各参数含义

    在深入探讨《eclipse.ini内存设置各参数含义》这一主题之前,我们首先应当明确eclipse.ini文件在Eclipse集成开发环境中的重要性及其如何通过调整内存配置参数来优化Eclipse的运行性能。以下是对该主题的详细解析: ...

    ECLIPSE,TOMCAT,JVM内存设置

    标题 "ECLIPSE,TOMCAT,JVM内存设置" 涉及到的是在开发Java Web应用程序时,如何配置Eclipse集成开发环境(IDE)、Apache Tomcat服务器以及Java虚拟机(JVM)的内存参数,以优化性能和避免内存溢出等问题。...

    eclipse 内存溢出解决办法

    ### Eclipse 内存溢出解决办法详解 #### 一、PermGen Space 概念与问题成因 在Java虚拟机(JVM)中,PermGen Space(Permanent Generation Space)是专门用于存储Class和Meta信息的一个区域。当一个Class被加载到...

    tomcat_eclipse配置内存溢出

    在进行Web应用程序开发过程中,尤其是在使用Tomcat服务器结合Eclipse或MyEclipse等集成开发环境(IDE)时,开发者可能会遇到一个常见的问题——内存溢出。具体表现为在访问部署的应用程序时出现`java.lang....

Global site tag (gtag.js) - Google Analytics