Java在Linux上使用太多内存?

时间:2010-02-01 15:42:27

标签: java memory-management

我正在测试java在Linux上使用的内存量。当只是盯着一个绝对没有的应用程序时,它已经报告了11 MB正在使用中。在Windows机器上执行相同操作时,大约使用6 MB。这些是使用top命令和Windows任务管理器测量的。我使用的linux上的VM是1.6_0_11,而热点VM是Server 11.2。使用-client启动应用程序不会影响任何内容。

为什么java会占用这么多内存?我怎样才能减少这个?

编辑:我使用Windows任务管理器测量内存,在Linux中我打开终端并输入top。

另外,我只对如何减少这种情况感兴趣,或者我甚至可以减少这种情况。我会自己决定是否有很多megs。只是Windows和Linux之间5 MB的差异很奇怪,我想知道我是否也可以在Linux上执行此操作。

5 个答案:

答案 0 :(得分:2)

如果您认为11MB是“太多”内存......您最好完全避免使用Java。说真的,JVM需要做很多事情(字节码验证器,GC,加载所有基本类),并且在一个平均桌面机器有4GB RAM的时代,保持基本的JVM开销(和内存使用在generay中)非常低并不是设计的优先事项。

如果你需要你的应用程序在嵌入式系统上运行(几乎唯一的情况是11 MB可能合法地被认为是“太多”),那么有special JVMs设计用于使用较少RAM的此类系统 - 但是代价是缺乏主流JVM的许多功能和/或性能。

答案 1 :(得分:1)

您可以控制堆大小,否则将使用默认值,java -X为您解释这些开关的含义

i.g。

set JAVA_OPTS="-Xms6m -Xmx6m"
java ${JAVA_OPTS} MyClass

答案 2 :(得分:1)

您可能真正要问的问题是,“Windows任务管理器和Linux顶级报告内存是否相同?”我确信还有其他人可以比我更好地回答这个问题,但我怀疑你可能没有做一个苹果对苹果的比较。

尝试在每台相应的计算机上使用jconsole应用程序进行更细化的检查。你可以在bin目录下的sdk上找到jconsole。

http://www.ibm.com/developerworks/linux/library/j-nativememory-linux/

上还有一个关于java内存管理的非常广泛的讨论

简短的回答是,如何分配内存是一个更复杂的答案,而不仅仅是查看用户简化系统实用程序顶部的单个数字。

答案 3 :(得分:0)

Top和TaskManager都会报告已经为进程分配了多少内存,而不是进程实际使用了多少,所以我想说这不是苹果对苹果的比较。无论如何,在记忆的Gigs时代,在启动时这里或那里有几个megs?

答案 4 :(得分:0)

Linux和Windows是截然不同的操作系统,使用RAM的方式也大不相同。 Windows类型随你分配,Linux一次缓存更多,并为未来做好准备,以便下一步操作顺利。

这种解释并不完全正确,但它足够接近你。