最全的Eclipse 启动优化内存优化Word格式文档下载.docx

上传人:b****3 文档编号:16596028 上传时间:2022-11-24 格式:DOCX 页数:9 大小:24.88KB
下载 相关 举报
最全的Eclipse 启动优化内存优化Word格式文档下载.docx_第1页
第1页 / 共9页
最全的Eclipse 启动优化内存优化Word格式文档下载.docx_第2页
第2页 / 共9页
最全的Eclipse 启动优化内存优化Word格式文档下载.docx_第3页
第3页 / 共9页
最全的Eclipse 启动优化内存优化Word格式文档下载.docx_第4页
第4页 / 共9页
最全的Eclipse 启动优化内存优化Word格式文档下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

最全的Eclipse 启动优化内存优化Word格式文档下载.docx

《最全的Eclipse 启动优化内存优化Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《最全的Eclipse 启动优化内存优化Word格式文档下载.docx(9页珍藏版)》请在冰豆网上搜索。

最全的Eclipse 启动优化内存优化Word格式文档下载.docx

由XX:

MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。

  JVM内存限制(最大值)

  首先JVM内存限制于实际的最大物理内存(废话!

呵呵),假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。

简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。

  通过上面对JVM内存管理的介绍我们已经了解到JVM内存包含两种:

堆内存和非堆内存,另外JVM最大内存首先取决于实际的物理内存和操作系统。

所以说设置VM参数导致程序无法启动主要有以下几种原因:

  1)参数中-Xms的值大于-Xmx,或者-XX:

PermSize的值大于-XX:

MaxPermSize;

  2)-Xmx的值和-XX:

MaxPermSize的总和超过了JVM内存的最大限制,比如当前操作系统最大内存限制,或者实际的物理内存等等。

说到实际物理内存这里需要说明一点的是,如果你的内存是1024MB,但实际系统中用到的并不可能是1024MB,因为有一部分被硬件占用了。

  那为什么同样的参数在快捷方式或者命令行中有效而在eclipse.ini文件中是无效的呢?

这是因为我们没有遵守eclipse.ini文件的设置规则:

  参数形如“项值”这种形式,中间有空格的需要换行书写,如果值中有空格的需要用双引号包括起来。

比如我们使用-vmC:

Javajre1.6.0binjavaw.exe参数设置虚拟机,在eclipse.ini文件中要写成这样:

-vm

C:

Javajre1.6.0binjavaw.exe

  按照上面所说的,最后参数在eclipse.ini中可以写成这个样子:

-vmargs

-Xms128M

-Xmx512M

-XX:

PermSize=64M

  实际运行的结果可以通过Eclipse中“Help”-“AboutEclipseSDK”窗口里面的“ConfigurationDetails”按钮进行查看。

  另外需要说明的是,Eclipse压缩包中自带的eclipse.ini文件内容是这样的:

-showsplash

org.eclipse.platform

--launcher.XXMaxPermSize

256m

-Xms40m

-Xmx256m

  其中–launcher.XXMaxPermSize(注意最前面是两个连接线)跟-XX:

MaxPermSize参数的含义基本是一样的,我觉得唯一的区别就是前者是eclipse.exe启动的时候设置的参数,而后者是eclipse所使用的JVM中的参数。

其实二者设置一个就可以了,所以这里可以把–launcher.XXMaxPermSize和下一行使用#注释掉。

  3.其他的启动参数。

如果你有一个双核的CPU,也许可以尝试这个参数:

+UseParallelGC

  让GC可以更快的执行。

(只是JDK5里对GC新增加的参数) 

其实,Eclipse是一个可以进行非常灵活配置的系统,除了以缺省的方式启动以外,还可以指定各种参数来定制启动方式。

在参考了一些资料之后,我总结了一些比较常用的启动时CommandArguments,如果有不正确的地方希望大家予以指出。

-arch[processorarchitecture]

描述:

指定所使用的处理器的类别

举例:

eclipse-archx86或eclipse-archsparc

-application[id]

指定要运行的应用,id为扩展org.eclipse.core.applications扩展点的插件id加扩展id

例如有个插件id为edu.sdu.app,扩展id为myapp,则eclipse-applicationedu.sdu.app.myapp,就会执行你的扩展应用

-clean

清空插件缓存内容

eclipse-clean,有时插件显示不出来是因为Eclipse将插件进行了缓存以加速启动过程,若指定此参数则会清空缓存,从头加载 

-configuration[cofigfilelocation]

指定配置文件的位置,在启动时使用此目录下的配置文件config.ini来启动

eclipse-configurationd:

/eclipse/configuration

-data[workspacelocation]

指定启动时的Workspace位置

例如Workspace位置设在D:

/myworkspace,则eclipse-dataD:

/myworkspace

-debug[optionfile]

以Debug状态启动Eclipse,所有的Debug开关在.options文件中指定

eclipse-debugd:

/eclipse/.options

-dev[classpathentry]

以开发状态启动Eclipse,这会添加所有指定的路径作为每个插件的Classpath

  

举例:

例如eclipse-devbin,会将产生在bin目录下的所有类加载到类路径中,这在开发插件时非常有用

-nosplash

指定启动时不显示闪屏

eclipse-nosplash

-vm[jrepath]

指定启动时所使用的Java虚拟机

例如要使用自己的Java虚拟机,则eclipse-vmD:

/j2sdk1.4.2_04/jre/bin/java.exe,这样还有一个好处,就是可以开启一个Console,能够显示控制台信息,当然若使用eclipse-vmD:

/j2sdk1.4.2_04/jre/bin/javaw.exe则不会再显示控制台

-vmargs[JavaVMarguments]

指定启动时要使用的Java虚拟机参数

例如要指定使用的内存容量,则eclipse-vmargs"

-Xms256m-Xmx1024m"

注:

此参数一定要放在所有参数变量的最后面

永久空间内存不足java.lang.OutOfMemoryError:

PermGenspace,相比不少使用spring,hibernate等一堆jar包的人都遇到过这个问题,在tomcatreload一个Context多次后,tomcat就挂掉了。

PermGenspace这一部分用于存放Class和Meta的信息,Class在被Load的时候被放入PermGenspace区域,它和和存放Instance的Heap区域不同,GC(GarbageCollection)不会在主程序运行期对PermGenspace进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGenspace错误。

我在做TMS的发布工具的时候,就遇到了问题,这个工具的目的是把一个相同的系统,在tomcat下自动的发布多份,但当卸载,重新发布多次后,tomcat就挂了,整个电脑如同死机一般。

后来使用文章里的setJAVA_OPTS=-server-Xms800m-Xmx800m-XX:

PermSize=64M-XX:

MaxNewSize=256m-XX:

MaxPermSize=128m-Djava.awt.headless=true解决了问题,不过在2G的电脑上,我是把-XX:

MaxPermSize=128m调到了-XX:

MaxPermSize=256m。

另外我还尝试了把所有的lib都放到tomcat的lib下,一些lib就不能在本项目中再出现了。

现在看,还是spring,hibernate之类的产生的类导致PermGenspace空间不足造成的这些问题。

这个帖子里讨论了这个问题,有人做了些有益的分析可以看看。

我又继续在我的笔记本上做了测试T42,1G内存。

tomcat版本6.0.14。

setJAVA_OPTS=-server-Xms256m-Xmx256m-XX:

MaxNewSize=256m-XX:

MaxPermSize=256m-Djava.awt.headless=true

这个配置反复发布是可以的,另外又一次测试了将项目下的jar包放到tomcat的lib下的对比。

重新安装一个lib下为空的程序是10秒,否则是30秒。

tomcat出现OutOfMemoryError:

PermGenspace

最近在把在tomcat5.5上开发的项目deploy到JBoss4.2上时,在操作一段时间就会出现java.lang.OutOfMemoryError:

PermGenspace,开始以为是代码中存在死循环的地方造成这样的问题,但是后来发现,出问题的地方都是随机的,并不是某一处造成这样的问题出现,怀疑是内存泄露,通过增大heap内存的方法来尝试,依然不行,但是同样的问题却并没有在tomcat中出现过,难道是JBoss的问题?

在网上做了一番搜索得到一些相关的内容。

PermGenspace的全称是PermanentGenerationspace,是指内存的永久保存区域OutOfMemoryError:

PermGenspace从表面上看就是内存益出,解决方法也一定是加大内存。

说说为什么会内存益出:

这一部分用于存放Class和Meta的信息,Class在被Load的时候被放入PermGenspace区域,它和和存放Instance的Heap区域不同,GC(GarbageCollection)不会在主程序运行期对PermGenspace进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGenspace错误。

这种错误常见在web服务器对JSP进行precompile的时候。

改正方法,在run.bat中加入:

-Xms256m-Xmx512m-XX:

MaxPermSize=256m

因为项目中引用了很多的jar包,而这些jar包中的class信息会被JBoss的classloader加载到PermGenspace区域,在JVM默认的情况下,该部分空间的大小只有4M,在jar包非常多的情况下,显然是不够用的,所以通过-XX:

MaxPermSize=256m指定最大值后即可解决问题。

另外,如果heap内存不足出现java.lang.OutOfMemoryError:

Javaheapspace时,可以通过-Xmx512m指定最大heap内存来解决这样的问题。

文章出处:

3楼liudaoru2009-03-06 

 

JVM调优总结-Xms-Xmx-Xmn-Xss

From:

堆大小设置

JVM中最大堆大小有三方面限制:

相关操作系统的数据模型(32-bt还是64-bit)限制;

系统的可用虚拟内存限制;

系统的可用物理内存限制。

32位系统下,一般限制在1.5G~2G;

64为操作系统对内存无限制。

我在WindowsServer2003系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。

典型设置:

java-Xmx3550m-Xms3550m-Xmn2g-Xss128k

-Xmx3550m:

设置JVM最大可用内存为3550M。

-Xms3550m:

设置JVM促使内存为3550m。

此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

-Xmn2g:

设置年轻代大小为2G。

整个堆大小=年轻代大小+年老代大小+持久代大小。

持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。

此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

-Xss128k:

设置每个线程的堆栈大小。

JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。

更具应用的线程所需内存大小进行调整。

在相同物理内存下,减小这个值能生成更多的线程。

但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

java-Xmx3550m-Xms3550m-Xss128k-XX:

NewRatio=4-XX:

SurvivorRatio=4-XX:

MaxPermSize=16m-XX:

MaxTenuringThreshold=0

NewRatio=4:

设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。

设置为4,则年轻代与年老代所占比值为1:

4,年轻代占整个堆栈的1/5

SurvivorRatio=4:

设置年轻代中Eden区与Survivor区的大小比值。

设置为4,则两个Survivor区与一个Eden区的比值为2:

4,一个Survivor区占整个年轻代的1/6

MaxPermSize=16m:

设置持久代大小为16m。

MaxTenuringThreshold=0:

设置垃圾最大年龄。

如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。

对于年老代比较多的应用,可以提高效率。

如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。

回收器选择

JVM给了三种选择:

串行收集器、并行收集器、并发收集器,但是串行收集器只适用于小数据量的情况,所以这里的选择主要针对并行收集器和并发收集器。

默认情况下,JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数。

JDK5.0以后,JVM会根据当前系统配置进行判断。

吞吐量优先的并行收集器

如上文所述,并行收集器主要以到达一定的吞吐量为目标,适用于科学技术和后台处理等。

典型配置:

java-Xmx3800m-Xms3800m-Xmn2g-Xss128k-XX:

+UseParallelGC-XX:

ParallelGCThreads=20

+UseParallelGC:

选择垃圾收集器为并行收集器。

此配置仅对年轻代有效。

即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集。

ParallelGCThreads=20:

配置并行收集器的线程数,即:

同时多少个线程一起进行垃圾回收。

此值最好配置与处理器数目相等。

java-Xmx3550m-Xms3550m-Xmn2g-Xss128k-XX:

ParallelGCThreads=20-XX:

+UseParallelOldGC

+UseParallelOldGC:

配置年老代垃圾收集方式为并行收集。

JDK6.0支持对年老代并行收集。

+UseParallelGC 

-XX:

MaxGCPauseMillis=100

MaxGCPauseMillis=100:

设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。

MaxGCPauseMillis=100-XX:

+UseAdaptiveSizePolicy

+UseAdaptiveSizePolicy:

设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开。

响应时间优先的并发收集器

如上文所述,并发收集器主要是保证系统的响应时间,减少垃圾收集时的停顿时间。

适用于应用服务器、电信领域等。

+UseConcMarkSweepGC-XX:

+UseParNewGC

+UseConcMarkSweepGC:

设置年老代为并发收集。

测试中配置这个以后,-XX:

NewRatio=4的配置失效了,原因不明。

所以,此时年轻代大小最好用-Xmn设置。

+UseParNewGC:

设置年轻代为并行收集。

可与CMS收集同时使用。

JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值。

CMSFullGCsBeforeCompaction=5-XX:

+UseCMSCompactAtFullCollection

CMSFullGCsBeforeCompaction:

由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。

此值设置运行多少次GC以后对内存空间进行压缩、整理。

+UseCMSCompactAtFullCollection:

打开对年老代的压缩。

可能会影响性能,但是可以消除碎片

辅助信息

JVM提供了大量命令行参数,打印信息,供调试使用。

主要有以下一些:

+PrintGC

输出形式:

[GC118250K->

113543K(130112K),0.0094143secs]

[FullGC121376K->

10414K(130112K),0.0650971secs]

+PrintGCDetails

[GC[DefNew:

8614K->

781K(9088K),0.0123035secs]118250K->

113543K(130112K),0.0124633secs]

[GC[DefNew:

8614K(9088K),0.0000665secs][Tenured:

112761K->

10414K(121024K),0.0433488secs]121376K->

10414K(130112K),0.0436268secs]

+PrintGCTimeStamps-XX:

+PrintGC:

PrintGCTimeStamps可与上面两个混合使用

11.851:

[GC98328K->

93620K(130112K),0.0082960secs]

+PrintGCApplicationConcurrentTime:

打印每次垃圾回收前,程序未中断的执行时间。

可与上面混合使用

Applicationtime:

0.5291524seconds

+PrintGCApplicationStoppedTime:

打印垃圾回收期间程序暂停的时间。

Totaltimeforwhichapplicationthreadswerestopped:

0.0468229seconds

PrintHeapAtGC:

打印GC前后的详细堆栈信息

34.702:

[GC{Heapbeforegcinvocations=7:

defnewgeneration 

total55296K,used52568K[0x1ebd0000,0x227d0000,0x227d0000)

edenspace49152K, 

99%used[0x1ebd0000,0x21bce430,0x21bd0000)

fromspace6144K, 

55%used[0x221d0000,0x22527e10,0x227d0000)

to 

space6144K, 

0%used[0x21bd0000,0x21bd0000,0x221d0000)

tenuredgeneration 

total69632K,used2696K[0x227d0000,0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1