Chinaunix首页 | 论坛 | 博客
  • 博客访问: 219729
  • 博文数量: 67
  • 博客积分: 3156
  • 博客等级: 中校
  • 技术积分: 650
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-18 17:41
个人简介

软件工程师!

文章分类

全部博文(67)

文章存档

2015年(1)

2014年(1)

2012年(6)

2011年(16)

2010年(31)

2009年(12)

分类: C/C++

2010-07-12 08:43:59

JVM的内存是多少

 

作者:忙碌命

Blog: http://blog.csdn.net/laiboy

   http://laiboy.cublog.cn

 

问题

Java的虚拟机最大的内存是多少?资料上有说在Windows上内存可以达到1200M至1500M左右,在Linux上可以达到2600M左右,但是总的来说,JVM的内存的大小与是跟操作系统的版本和JVM的版本有关,所以,还是要试验才可以知道实际情况.

 

测试

设置好你的JRE或JDK的环境路径到系统的PATH,在命令行下输入以下命令:

Java -Xmx1446M -version

如下图所示的输出

 

 

 

从以上图可以看到,我的机子上的JVM的内存最多可以达到1446M.

很简单就可以试出来了,不是吧,但是你要记得,JVM的内存大小是与操作系统与JVM的版本有关系的.所以首先你要猜猜是多少,然后再不停地敲上面这个命令

Java -Xmx1024M -version

Java -Xmx1028M -version

........

手打累了~~~

说真的,你嫌烦我也嫌打得累!

 

解决问题

重复的事情,程序解决!

 

1.判断成功与否.

2.逐步逼近最大值.

 

这就是我们设计程序去解决这个问题的两个步骤,第一个是比较简单,就是获取命令行的输出,判断第一行文本就知道JVM是否创建成功了.具体原理就不说了,看代码,创建一个CUI的进程,将输出文本用管道(Pipe)截取.

 

 

 

以上为实现代码,在演示程序中的ExecuteCommand函数中.

 

第二个比较复杂一点,但是流程也如下图所示,当到达某点值时,再增大-X的值时就失败了,所以我们就只需要判断该点是什么.最简单的就是逐渐加大数值,但是效率太低,我不喜欢.

 

 

 

但是,看上面的图,大概可以知道,在8G内存的时候,如果要逐加,假设从1M开始,最低也要8192次才能到达内存,这样太浪费时间了,用二分法可以降低运行次数.

 

假设开始1M到8000M.1M时创建JVM成功,8000M时创建JVM失败.

则肯定最大值在1M到8000M之间.将其再分成两部分[1M,4000M],

[4000M,8000M],如果1M成功,4000M失败,则最大值肯定在1M到4000M之间,[4000M,8000M]这个区间不需要再计算了.将[1M,4000M]再分成两个区间,

[1M,2000M],[2000M,4000M],重复以上判断,则肯定在1M到2000M之间,再重复以上步骤,最终的结束条件就是,[a,b],a值时成功,b值是失败,b-a的值为1,则a的值为JVM的最大值.因此,实现代码如下.

 

 

 

整个程序的运行时间相对于逐增内存的方法呈指数级下降!运行结果如下图所示!

 

 

 

文件: Demo.rar
大小: 25KB
下载: 下载

阅读(2422) | 评论(0) | 转发(0) |
0

上一篇:认识mainifest

下一篇:C++代码覆盖测试工具

给主人留下些什么吧!~~