Chinaunix首页 | 论坛 | 博客
  • 博客访问: 518782
  • 博文数量: 135
  • 博客积分: 3568
  • 博客等级: 中校
  • 技术积分: 1942
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-19 17:52
文章分类

全部博文(135)

文章存档

2012年(29)

2011年(41)

2010年(26)

2009年(12)

2008年(9)

2007年(12)

2006年(6)

分类: Java

2011-07-08 09:43:37

一个Java虚拟机在个电脑上究竟有多少内存可用?
呵呵,写了一个bat脚本,测试一下吧。
Linux版本的日后再补上吧。

原理说明:
通过命令 java -Xmx###M -version 可以测试一个java虚拟机在当前机器上能够使用的最大内存数。
可以根据该命令的结束状态(bat中是 %ERRORLEVEL%)是否是0来判断该命令是否执行成功。
然后设定一个最小值(这里是10M,说明,在我的电脑上经过测试,最大可用内存最小值为5),
再设置一个最大内存(这里是10240M,也就是10G,此值需要>=内存的实际大小--还没有找到在Windows下能获取物理内存大小的命令)。
最后,通过二分查找算法,找到需要的可用的最大内存数。

JVM_MAX_MEM_TEST.bat

  1. @echo off
  2. rem REF: http://www.dostips.com/DtTutoFunctions.php
  3. setLocal
  4. set searchResult=0
  5. call:SEARCH 10 10240

  6. :END
  7. echo.
  8. echo #################################################
  9. echo # the max memory avaiable is : %searchResult% M
  10. echo #################################################
  11. pause
  12. endLocal
  13. goto:eof

  14. :SEARCH
  15. rem %~1 min value
  16. rem %~2 max value
  17. set /A minValue=%~1
  18. set /A maxValue=%~2
  19. set /A midValue=(%minValue%+%maxValue%)/2

  20. if "%minValue%" EQU "%midValue%" (
  21.   set searchResult=%minValue%
  22.   goto:eof
  23. )
  24. echo ------------------------------------------testing %midValue%M
  25. java -Xmx%midValue%M -version > NUL
  26. if "0" EQU "%ERRORLEVEL%" (
  27.   set minValue=%midValue%
  28. ) else (
  29.   set maxValue=%midValue%
  30. )
  31. call:SEARCH %minValue% %maxValue%

  32. goto:eof
这个脚本在偶的物理内存为2G的机子上的测试结果是 1444M.
阅读(824) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~