Java虚拟机和交换空间

时间:2017-04-10 10:04:03

标签: jvm

赞美此处的任何专家都可以建议以下JVM和交换空间相关的查询。提前致谢

1)在JVM Java Heap,Perm Generation或Native Heap中出现OutOfMemory时,操作系统是否会使用交换空间?或者交换空间用于Native Heap中的OutOfMemory?

2)我认为本地堆大小在JVM上是不可配置的,因为OS会在运行时为JVM分配可用的RAM吗?

3)我们如何为JVM启用交换空间,或者默认情况下为Unix和Window级别的所有进程启用交换空间?

4)了解交换空间是否会影响应用程序性能,是禁用JVM交换空间的最佳做法?如果没有,原因是什么?

5)我们如何在Unix和Window OS中禁用交换空间并更改特定JVM的交换空间大小,或者只能在操作系统中的所有进程的操作系统级别进行配置?

2 个答案:

答案 0 :(得分:4)

这里有很多问题......操作系统确实使用swap空间来创建所谓的virtual memory(这显然比你可能拥有的RAM大)。默认情况下通常启用,但您需要检查。

您无法指示JVM仅使用物理RAM AFAIK,但这将限制操作系统本身而非JVM(这应该回答5)。

您可以禁用交换(再次用于操作系统,而不是JVM ),但这是一个坏主意。在操作系统内部运行多个进程,并且每个进程都需要空间(在某个时间点可能超过实际RAM)。它确实会影响性能,但更糟糕的是 - 一些性能损失(我认为操作系统有很多东西可以让你更好)或应用程序的死亡? (这应该回答4)。

关于(2),有两个参数可以控制您将拥有多少堆:Xmx - JVM进程将使用的最大堆。和Xms - 初始堆。实际上就在最近,有一个非常好的讨论:here

答案 1 :(得分:1)

我认为-Xmx和-Xms配置在虚拟机内运行的java进程可用的堆数。虚拟机本身是一个本机进程,需要额外的堆来运行虚拟机本身。因此,JVM进程可以消耗比-Xmx选项指示的内存更多的内存。