为什么Java在我的Linux服务器上使用了如此多的内存?
我有两个Java程序。在我的电脑上,其中一个使用9MB的RAM,另一个使用77MB。但是当我把它们上传到服务器上时,同样的程序使用382MB和186MB!有什么方法可以阻止这种情况发生吗?对于应用程序来说,分配大块虚拟内存以提高性能和效率是很常见的。没有人费心优化这些东西,因为它们没有效果。如果你实际上没有问题,就没有什么需要解决的为什么Java在我的Linux服务器上使用了如此多的内存?,java,linux,memory,debian,Java,Linux,Memory,Debian,我有两个Java程序。在我的电脑上,其中一个使用9MB的RAM,另一个使用77MB。但是当我把它们上传到服务器上时,同样的程序使用382MB和186MB!有什么方法可以阻止这种情况发生吗?对于应用程序来说,分配大块虚拟内存以提高性能和效率是很常见的。没有人费心优化这些东西,因为它们没有效果。如果你实际上没有问题,就没有什么需要解决的 虚拟内存不是稀缺资源。试图减少虚拟机的消耗是徒劳的。您是如何衡量这些数字的 比较Linux上Windows任务管理器和ps(1)的数量是徒劳的,因为它们的计算方式不
虚拟内存不是稀缺资源。试图减少虚拟机的消耗是徒劳的。您是如何衡量这些数字的 比较Linux上Windows任务管理器和ps(1)的数量是徒劳的,因为它们的计算方式不同。例如,共享库和共享内存在两种平台上的属性不同。内存管理也完全不同 另一方面,如果您通过
运行时
(或类似方式)引用从应用程序中收集的数字,那么您必须查看JVM是如何使用哪些参数启动的。最重要的是参数-Xmx
和-Xms
,但是您可以在java
或javaw
的文档中查找其他几个参数
与第1点有关:
除非您明确设置了JVM的默认最大堆大小(例如命令行参数-Xmx128M)
-Xmx
选项所允许的所有内存,以最小化垃圾收集所花费的CPU时间。此外,默认的最大堆空间是根据可用的物理内存确定的——如果服务器有更多的内存,Java应用程序也必然会使用更多的内存-Server
JVM选项)具有不同的设置,并且性能优于内存使用。-server
选项是64位系统上的默认选项你说的是物理内存还是虚拟内存?如果虚拟内存——谁在乎呢?虚拟内存不是稀缺资源。是否尝试进行内存转储?你可以看到你的内存利用率使用-你确定它只使用9 MB的总数,我觉得很难相信?在内存较多的机器上,最大内存会增加。这意味着使用更多的虚拟内存,而不是更多的驻留内存。(这是你应该看的数字)这取决于你是否有足够的磁盘空间-如果你的服务器资源有限,可能值得减少一点。@Chii:我一点也不了解连接。从不映射到常驻页的虚拟内存不会占用磁盘空间。@Chii不,真的,虚拟内存只是数字。有很多数字。一台服务器可能对其他资源有限制,但它可以有它想要的任意数量。@Chii:我认为在这种情况下,我们有一个术语歧义。根据上下文,“虚拟内存”可能意味着操作系统内存管理器(swap)使用辅助存储,以及将磁盘文件映射到进程的地址空间。事实上,两者都使用相同的CPU设施也没有帮助…@thkala:在我看来,使用术语“虚拟内存”来指交换或分页是对术语的滥用。事实上,有些系统具有虚拟内存而没有交换,有些系统具有交换而没有虚拟内存。