一个Java虚拟机在个电脑上究竟有多少内存可用?
呵呵,写了一个bat脚本,测试一下吧。
Linux版本的日后再补上吧。
原理说明:
通过命令 java -Xmx###M -version 可以测试一个java虚拟机在当前机器上能够使用的最大内存数。
可以根据该命令的结束状态(bat中是 %ERRORLEVEL%)是否是0来判断该命令是否执行成功。
然后设定一个最小值(这里是10M,说明,在我的电脑上经过测试,最大可用内存最小值为5),
再设置一个最大内存(这里是10240M,也就是10G,此值需要>=内存的实际大小--还没有找到在Windows下能获取物理内存大小的命令)。
最后,通过二分查找算法,找到需要的可用的最大内存数。
JVM_MAX_MEM_TEST.bat
- @echo off
-
rem REF: http://www.dostips.com/DtTutoFunctions.php
-
setLocal
-
set searchResult=0
-
call:SEARCH 10 10240
-
-
:END
-
echo.
-
echo #################################################
-
echo # the max memory avaiable is : %searchResult% M
-
echo #################################################
-
pause
-
endLocal
-
goto:eof
-
-
:SEARCH
-
rem %~1 min value
-
rem %~2 max value
-
set /A minValue=%~1
-
set /A maxValue=%~2
-
set /A midValue=(%minValue%+%maxValue%)/2
-
-
if "%minValue%" EQU "%midValue%" (
-
set searchResult=%minValue%
-
goto:eof
-
)
-
echo ------------------------------------------testing %midValue%M
-
java -Xmx%midValue%M -version > NUL
-
if "0" EQU "%ERRORLEVEL%" (
-
set minValue=%midValue%
-
) else (
-
set maxValue=%midValue%
-
)
-
call:SEARCH %minValue% %maxValue%
-
-
goto:eof
这个脚本在偶的物理内存为2G的机子上的测试结果是 1444M.
阅读(852) | 评论(0) | 转发(0) |