我正在使用“java -xms 1280m -xmx 1280m”命令启动我的服务器。在Linux机器上,这很好用,我看到使用几乎相同内存量的进程。但是,在Windows机器上,我看到java进程使用的距离远小于1280米 - 大约500-600米。如果重要的话,我从windows任务管理器收集了这些数据。我检查的两台Windows机器都是Windows 2003服务器,分别有2GB和3GB RAM。 我一直认为用-xms指定初始堆大小将迫使java使用至少那么多的内存。我错了吗?或者,这是Windows上的Java的特点吗?
答案 0 :(得分:2)
仔细观察。任务管理器经常会产生误导 - 默认情况下不会显示进程分配了多少内存。相反,显示为“使用的内存”的是为该进程交换的物理内存量。 在“视图”菜单中,选择“选择列”并添加“虚拟内存大小”。有你的记忆。您的应用程序显然从未真正使用超过500-600米,因此它从未交换过。
答案 1 :(得分:0)
最后回到电脑前进行了几次快速测试。
在运行java -xms
的Windows XP计算机上,输出Unrecognised option
运行java -Xms
时,我得到一个invalid intial heap size
这是正确的,因为我没有给出任何值,但它接受并识别该选项。
所以看来我的评论是有效的,你需要对你的命令进行排序。
答案 2 :(得分:0)
除了Kevin D关于大写的说法之外,请注意32位Windows系统通常在最大堆大小上有一个上限。它往往会因很多因素而有所不同,但我经常在1280米左右看到它正在尝试。我怀疑这是问题,但它可能是一个相关的问题。
答案 3 :(得分:0)
Windows任务管理器专为最终用户而设计,而不是为程序员设计。后者通常更喜欢Sysinternals套件中的Process Explorer(procexp.exe
)。结合vmmap.exe
,将准确显示正在发生的事情。