Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Java在我的Linux服务器上使用了如此多的内存?_Java_Linux_Memory_Debian - Fatal编程技术网

为什么Java在我的Linux服务器上使用了如此多的内存?

为什么Java在我的Linux服务器上使用了如此多的内存?,java,linux,memory,debian,Java,Linux,Memory,Debian,我有两个Java程序。在我的电脑上,其中一个使用9MB的RAM,另一个使用77MB。但是当我把它们上传到服务器上时,同样的程序使用382MB和186MB!有什么方法可以阻止这种情况发生吗?对于应用程序来说,分配大块虚拟内存以提高性能和效率是很常见的。没有人费心优化这些东西,因为它们没有效果。如果你实际上没有问题,就没有什么需要解决的 虚拟内存不是稀缺资源。试图减少虚拟机的消耗是徒劳的。您是如何衡量这些数字的 比较Linux上Windows任务管理器和ps(1)的数量是徒劳的,因为它们的计算方式不

我有两个Java程序。在我的电脑上,其中一个使用9MB的RAM,另一个使用77MB。但是当我把它们上传到服务器上时,同样的程序使用382MB和186MB!有什么方法可以阻止这种情况发生吗?

对于应用程序来说,分配大块虚拟内存以提高性能和效率是很常见的。没有人费心优化这些东西,因为它们没有效果。如果你实际上没有问题,就没有什么需要解决的


虚拟内存不是稀缺资源。试图减少虚拟机的消耗是徒劳的。

您是如何衡量这些数字的

比较Linux上Windows任务管理器和ps(1)的数量是徒劳的,因为它们的计算方式不同。例如,共享库和共享内存在两种平台上的属性不同。内存管理也完全不同

另一方面,如果您通过
运行时
(或类似方式)引用从应用程序中收集的数字,那么您必须查看JVM是如何使用哪些参数启动的。最重要的是参数
-Xmx
-Xms
,但是您可以在
java
javaw
的文档中查找其他几个参数

与第1点有关:


除非您明确设置了JVM的默认最大堆大小(例如命令行参数-Xmx128M)

  • 您如何衡量每种情况下的内存使用情况?不同的操作系统对什么构成“内存使用”有不同的概念

  • 64位系统比32位系统需要更多的内存,因为指针(JavaSpeak中的引用)的大小增加了。您是否在桌面计算机上使用32位操作系统和JVM

  • 您是否使用不同的JVM选项?适度活跃的Java应用程序通常会使用
    -Xmx
    选项所允许的所有内存,以最小化垃圾收集所花费的CPU时间。此外,默认的最大堆空间是根据可用的物理内存确定的——如果服务器有更多的内存,Java应用程序也必然会使用更多的内存

  • 服务器JVM(请参阅
    -Server
    JVM选项)具有不同的设置,并且性能优于内存使用。
    -server
    选项是64位系统上的默认选项

  • 您是否绝对确定两种情况下的应用程序负载相同


  • 你说的是物理内存还是虚拟内存?如果虚拟内存——谁在乎呢?虚拟内存不是稀缺资源。是否尝试进行内存转储?你可以看到你的内存利用率使用-你确定它只使用9 MB的总数,我觉得很难相信?在内存较多的机器上,最大内存会增加。这意味着使用更多的虚拟内存,而不是更多的驻留内存。(这是你应该看的数字)这取决于你是否有足够的磁盘空间-如果你的服务器资源有限,可能值得减少一点。@Chii:我一点也不了解连接。从不映射到常驻页的虚拟内存不会占用磁盘空间。@Chii不,真的,虚拟内存只是数字。有很多数字。一台服务器可能对其他资源有限制,但它可以有它想要的任意数量。@Chii:我认为在这种情况下,我们有一个术语歧义。根据上下文,“虚拟内存”可能意味着操作系统内存管理器(swap)使用辅助存储,以及将磁盘文件映射到进程的地址空间。事实上,两者都使用相同的CPU设施也没有帮助…@thkala:在我看来,使用术语“虚拟内存”来指交换或分页是对术语的滥用。事实上,有些系统具有虚拟内存而没有交换,有些系统具有交换而没有虚拟内存。