此问题专门与在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程序方面也有类似的经验-也许我可以通过类似的调整来减少所有这些程序的开销.

解决方法:

我认为Eclipse环境占用大量内存的原因是使用SWT. SWT是驻留在JVM堆之外的本机图形库,更糟糕的是,Linux上的实现并未真正优化.

我认为没有真正的机会来减少与堆外部内存有关的Eclipse环境的内存消耗.

标签:overhead,memory,eclipse,jvm,java

来源: https://codeday.me/bug/20191102/1988799.html

oracle jvm禁用,java-如何减少Sun / Oracle JVM内部开销?相关推荐

  1. oracle timestamp约束,java.lang.ClassCastException:oracle.sql.TIMESTAMP不能转换为java.sql.Timestamp...

    我正在处理通过网络流式传输ResultSet的应用程序.我最终使用了CachedRowSetImpl类.但是当我连接到一个Oracle数据库时,我会收到一个这样的错误 java.lang.ClassC ...

  2. oracle aq_通过Java 8流使用Oracle AQ

    oracle aq Oracle数据库最令人敬畏的功能之一是Oracle AQ:Oracle数据库高级队列 . AQ API直接在数据库中实现了完整的事务性消息传递系统. 在数据库处于系统中心的经典体 ...

  3. oracle导入substring,java中substring()和oracle中substr()区别

    1)Java中substring(int x)一般是用来截取字符串的.返回一个新的字符串,新字符串是元字符串的子字符串.该新串是从原字符串的x索引处开始,直到原字符串的结尾为止. 如:"je ...

  4. oracle如何禁用主键约束,【oracle】约束之主键约束

    1.主键约束作用: 确保表中每一行数据是唯一的,要求非空且唯一 2.一张表中只能设置一个主键约束: 主键约束可以由多个字段构成(联合主键或复合主键). 1.在创建表时设置主键约束 CREATE TAB ...

  5. oracle hint禁用索引,【轉】Oracle索引HINT的使用

    在SQL的查詢過程中,索引是快速查詢數據的方法之一,是最重要.最常見的手段,這篇文章將討論和索引相關的HINT的使用. 1.HINT的使用方法: select /*+ INDEX (tab pk_ta ...

  6. java oracle 中文长度,Java String length 和 Oracle varchar2 长度对应关系

    1.Oracle数据库:char和varchar2和nvarchar2区别 常规情况下,对于字符串类型的数据列,在oracle设计表时设置为byte来进行储存. 1>CHAR和VARCHAR2区 ...

  7. jre包括jvm和java核心类库_包含JVM标准实现及Java核心类库

    包含JVM标准实现及Java核心类库 点击次数:1533  更新日期:2013-03-24 "青花瓷Java版"为北京师范大学教育学部蔡苏作词原创,覆盖教育技术学院专业选修课< ...

  8. oracle是java代码块,Oracle中施行java代码

    Oracle中执行java代码 1.在ORACLE数据库中创建功能类(实现签名): create or replace and compile java source named TestName a ...

  9. 第 1 章 JVM 和 Java 体系架构

    第 1 章 JVM 和 Java 体系架构 1.JVM 前言 作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题? 运行着的线上系统突然卡死,系统无法访问,甚至直接OOM! 想解决线上JVM ...

最新文章

  1. 机器学习中常用的高级数据结构和数据分析包工具——pandas
  2. Husband的忏悔书(IT攻城狮)
  3. TOPAS 命令详解
  4. python任务栏通知区域_python+pyqt实现右下角弹出框
  5. Linux的帧缓冲设备
  6. 外部依赖项很多未定义标识符_从日本编程书籍《我的第一本编程书》中译版看中文例程如何扬长避短——标识符(一)
  7. tomcat4 请求的处理——初步分析
  8. this指向_js中关于this指向的训练题
  9. 聚类(2)-- Fuzzy k-means clustering
  10. 如何使用 ggplot2 ?
  11. Android支付实践(二)之微信支付详解与Demo
  12. 阿里云矢量图html页面引入,使用阿里矢量图标库的三种方法
  13. rbf神经网络和bp神经网络,rbf神经网络百度百科
  14. python图像条状状噪声_一种红外图像条状噪声消除方法与流程
  15. Word高效指南 - 如何批量删除空格空白行
  16. dev c++源文件未编译
  17. 网站服务器如何直接播放视频,视频放服务器链接直接播放
  18. 我作为数字产品设计师的十大宠儿
  19. mac下hadoop环境的搭建
  20. RFC1952的部分翻译及原文 (转)

热门文章

  1. Django ORM 常用的查询方法
  2. ElasticSearch 比 MySQL 更适合复杂条件搜索
  3. SpringCloud项目:实现推送消息到RabbitMQ消息中间件
  4. js文件中使用jstl或者其他标签
  5. Solr 检索不存在某字段或某字段为某值的方式
  6. StringUtils.isAlphanumeric(String)方法检查中文是通过的,需要注意。它不能用来检测字符串是否只包含英文和数字。
  7. 剑指Offer09-用两个栈实现队列
  8. 限制checkbox复选框的最大可选数量
  9. Jmeter(一)http接口添加header和cookie
  10. thinkphp5与thinkphp3.X对比