Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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内存占用_Java_Performance_Memory - Fatal编程技术网

Java内存占用

Java内存占用,java,performance,memory,Java,Performance,Memory,我制作了一个服务器端应用程序,使用18mb的非堆和6MB左右的头,最大30MB。我用-Xms和Xmx设置了堆的最大值,问题是当我在ubuntu服务器上运行程序时,它需要大约170mbs,而不是18+30或至少100Mbs的最大值。有人知道如何让VM只获得100Mbs?JVM使用堆、其他类似线程堆栈的内存和共享库。共享库可能相对较大,但除非实际使用,否则不会使用实际内存。如果运行JVM,它们将在它们之间共享,但在流程信息中看不到这一点 在现代个人电脑中,1GB内存的成本约为100美元,因此每减少一

我制作了一个服务器端应用程序,使用18mb的非堆和6MB左右的头,最大30MB。我用-Xms和Xmx设置了堆的最大值,问题是当我在ubuntu服务器上运行程序时,它需要大约170mbs,而不是18+30或至少100Mbs的最大值。有人知道如何让VM只获得100Mbs?

JVM使用堆、其他类似线程堆栈的内存和共享库。共享库可能相对较大,但除非实际使用,否则不会使用实际内存。如果运行JVM,它们将在它们之间共享,但在流程信息中看不到这一点


在现代个人电脑中,1GB内存的成本约为100美元,因此每减少一个MB内存可能不像过去那样重要。

回应您的评论


我用Jconsole做了一些测试 和视觉。XMX40MBS XMS25。这个 问题是我只限于 512MB,因为是VPS,我无法支付 就现在而言。另一件事是 每台100MB,我至少可以放3台 进程正在运行


问题是,你走错了路。不要试图让你的虚拟机超小,这样你可以运行3个虚拟机。将所有内容合并到一个虚拟机中。如果您有512个内存,那么就用256MB的堆创建一个VM,让它完成所有工作。在单个VM中可以有10或100个线程。在大多数情况下,与尝试运行许多小型虚拟机相比,这将执行得更好,占用的总内存更少。

您的使用案例是什么?您是否希望在同一台服务器上运行100个虚拟机?通常,在服务器上运行java进程时,您不会真正关心是使用100MB还是30MB,因为内存很便宜。你怎么会认为你的应用程序应该/必须只占用48MB(18+30)的内存呢?我已经用Jconsole和VMvisual做了一些测试。XMX40MBS XMS25。问题是,由于它是一个VPS,所以我将其限制在512MB,我现在无法支付。另一件事是,每个100mbs,我可以运行至少3个进程…28114 meu 22 0 161m 20m 5744 s 0 3.9 0:05.22 java这里是一个顶级打印它是一个VPS,它被限制为512Ram。这是一个服务器应用程序。在这种情况下,提供商可能会有一些建议,或者为他们提供一个论坛。JVM可能会消耗大量虚拟内存,而虚拟内存不会转化为实际内存,您必须观察驻留大小。28114 meu 22 0 161m 20m 5744 S 0 3.9 0:05.22 java如果我读对了,这里有一个顶部打印,它使用161m虚拟内存和20m驻留内存(即主内存)如果您运行另一个JVM,那么看起来内存可能会加倍,而实际上它是共享的(只要它是同一个Java安装),您需要运行应用程序一段时间,因为共享库可能会带来更多。注意:如果你的内存不足,它们可能会被再次推出。一个简单的方法是创建一个与内存一样大的文件,然后删除它,以确定你的应用程序可以运行的最小值。这会弹出任何未被使用的页面,您将看到有多少应用程序必须保留在内存中。是的,当程序相同时,我通常会这样做,但问题是这是不同的事情,我无法合并它们:您总是可以合并它们。。。但你是对的,把3个随机程序粘在一起并不是那么理想……我认为你在这里遇到了一个权衡问题。您必须围绕成本和可维护性做出权衡决策。为避免将不同的应用程序阻塞到同一运行时的复杂性,在您的环境中花费额外的RAM是否值得?如果答案是你也不能接受,那么你需要开始考虑在虚拟机中运行的费用,并在C语言中编写你的东西,在C语言中你可以严格控制使用的内存(折衷是在非虚拟机环境中重写你的应用程序的费用)。