[讨论] 一个奇怪的问题
xgj1988
2011-04-20
我在运行java程序的时候设置了如下JVM 虚拟机参数
-Xms20m -Xmx100m -XX:PermSize=100m -XX:MaxPermSize=100m 但是为打出来的结果不对呢? public class Test { private byte[] bytes = new byte[1024 * 1024]; @Override protected void finalize() throws Throwable { // TODO Auto-generated method stub super.finalize(); System.out.println("finalize"); } public static void main(String[] args) throws Exception { // for (int i = 0; i < 10; i++) { // Test t = new Test(); // systeminfo(i); // } // System.out.println("over"); // systeminfo(1); MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); System.out.println("堆最大内存" + change(memoryMXBean.getHeapMemoryUsage().getMax())); System.out.println("堆初始化内存大小" + change(memoryMXBean.getHeapMemoryUsage().getInit())); System.out.println(memoryMXBean.getHeapMemoryUsage()); System.out.println(memoryMXBean.getHeapMemoryUsage().hashCode()); System.out.println("================="); System.out.println("非堆最大内存" + change(memoryMXBean.getNonHeapMemoryUsage().getMax())); System.out.println("非堆初始化内存大小" + change(memoryMXBean.getNonHeapMemoryUsage().getInit())); System.out.println(memoryMXBean.getNonHeapMemoryUsage()); System.out.println(memoryMXBean.getNonHeapMemoryUsage().hashCode()); } private static String change(long l) { return (l / 1000 / 1000) + "M"; } } 打出来的结果是 堆最大内存104M 堆初始化内存大小20M init = 20971520(20480K) used = 349104(340K) committed = 20840448(20352K) max = 104071168(101632K) 11077203 ================= 非堆最大内存159M 非堆初始化内存大小126M init = 126025728(123072K) used = 12352584(12063K) committed = 126320640(123360K) max = 159383552(155648K) 14576877 堆的打出来的结果好像算正常的,但是非堆区域为什么相差如此之大? |
|
RednaxelaFX
2011-04-20
话说byte到MB之间的转换应该是value / 1024 / 1024,或者说value >> 20。
你是在什么操作系统、怎样的配置环境、哪个JDK上跑的呢? 在Windows上的话,HotSpot默认会用client VM。这会影响non-heap区域的内容。 有兴趣的话你可以开jconsole看看内存那个tab下non-heap的构成,留意code cache不是perm gen的一部分,所以它的大小不受PermSize或MaxPermSize控制。 |
|
xgj1988
2011-04-21
RednaxelaFX 写道 话说byte到MB之间的转换应该是value / 1024 / 1024,或者说value >> 20。
你是在什么操作系统、怎样的配置环境、哪个JDK上跑的呢? 在Windows上的话,HotSpot默认会用client VM。这会影响non-heap区域的内容。 有兴趣的话你可以开jconsole看看内存那个tab下non-heap的构成,留意code cache不是perm gen的一部分,所以它的大小不受PermSize或MaxPermSize控制。 我用 jconsole 查看 ,为什么 本地进程 的test这个类会是灰色的呢?不可选。 |
|
xgj1988
2011-04-21
原来我的项目是jdk5.0的,jconsole是1.6所以灰色。
|
|
RednaxelaFX
2011-04-21
xgj1988 写道 原来我的项目是jdk5.0的,jconsole是1.6所以灰色。
JDK是1.5的话那要在启动的时候加参数就不灰了 -Dcom.sun.management.jmxremote |
相关讨论
相关资源推荐
- java 插入oracle blob_Java 对Oracle数据库中的 BLOB类型 插入图片
- java oracle blob_JAVA存取ORACLE中的BLOB对象
- Java从Oracle中插入和读取图片
- Java 直接插入 CLOB/BLOB 数据到 Oracle 数据库
- 【Oracle】springboot连接Oracle写入blob类型图片数据
- Java向Oracle数据库表中插入CLOB、BLOB字段
- JAVA 操作Oracle 数据库Blob 字段
- java oracle12c blob_java将图片base64编码后的编码存入ORACLE数据库的BLOB类型字段中
- java向Oracle数据库中插入blob字段数据
- java向oracle插入blob类型图片