jvm oracle sun,java-如何减少Sun / Oracle JVM内部开销?

此问题专门与在Linux x86-64上运行的Sun Java JVM有关.我试图弄清楚为什么即使设置了Heap和Non-Heap限制,Sun JVM也会占用这么多系统物理内存.

我正在运行的程序是带有多个插件/功能的Eclipse 3.7.最常用的功能是PDT,EGit和Mylyn.我使用以下命令行开关启动Eclipse:

-nosplash -vmargs -Xincgc -Xms64m -Xmx200m -XX:NewSize=8m -XX:PermSize=80m -XX:MaxPermSize=150m -XX:MaxPermHeapExpansion=10m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseParNewGC -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:CMSIncrementalDutyCycleMin=0 -XX:CMSIncrementalDutyCycle=5 -XX:GCTimeRatio=49 -XX:MaxGCPauseMillis=50 -XX:GCPauseIntervalMillis=1000 -XX:+UseCMSCompactAtFullCollection -XX:+CMSClassUnloadingEnabled -XX:+DoEscapeAnalysis -XX:+UseCompressedOops -XX:+AggressiveOpts -Dorg.eclipse.swt.internal.gtk.disablePrinting

尤其值得注意的是这些开关:

-Xms64m -Xmx200m -XX:NewSize=8m -XX:PermSize=80m -XX:MaxPermSize=150m

这些开关应将JVM堆最大限制为200 MB,将非堆最大限制为150 MB(由JConsole标记为“ CMS永久生成”和“代码缓存”).从逻辑上讲,JVM应该总共占用350 MB加上JVM所需的内部开销.

实际上,JVM通过ps_mem.py(http://www.pixelbeat.org/scripts/ps_mem.py)计算出的当前Eclipse进程占用544.6 MB的空间,该进程计算Linux 2.6内核保留的实际物理内存页面.这是内部Sun JVM开销的35%或大约200MB!

关于如何减少此开销的任何提示?

以下是一些其他信息:

$ps auxw

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

me 23440 2.4 14.4 1394144 558440 ? Sl Oct12 210:41 /usr/bin/java ...

根据JConsole,该进程使用了??160 MB的堆和151 MB的非堆.

我并不是说我不能负担额外的200MB运行Eclipse的费用,但是如果有减少这种浪费的方法,我宁愿使用那个200MB的内核块设备缓冲区或文件缓存.此外,我在其他Java程序方面也有类似的经验-也许我可以通过类似的调整来减少所有这些程序的开销.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值