Jvm Java虚拟机和交换空间

Jvm Java虚拟机和交换空间,jvm,Jvm,Apppreciate这里的任何专家都可以为以下JVM和交换空间相关的查询提供建议。提前谢谢 1) 当JVM Java堆、Perm生成或本机堆中发生OutOfMemory时,操作系统将使用交换空间,这对吗?或者交换空间用于本机堆中的OutOfMemory 2) 因为操作系统将在运行时为JVM分配可用的RAM,所以本机堆大小在JVM上是不可配置的,这对吗 3) 我们如何为JVM启用交换空间,或者默认情况下为Unix和窗口级别的所有进程启用交换空间 4) 了解交换空间会影响应用程序性能,这是禁用JV

Apppreciate这里的任何专家都可以为以下JVM和交换空间相关的查询提供建议。提前谢谢

1) 当JVM Java堆、Perm生成或本机堆中发生OutOfMemory时,操作系统将使用交换空间,这对吗?或者交换空间用于本机堆中的OutOfMemory

2) 因为操作系统将在运行时为JVM分配可用的RAM,所以本机堆大小在JVM上是不可配置的,这对吗

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

4) 了解交换空间会影响应用程序性能,这是禁用JVM交换空间的最佳实践吗?若否,原因为何


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

这里有很多问题。。。操作系统确实使用了
交换
空间来创建所谓的
虚拟内存
(显然比您可能拥有的RAM更大)。默认情况下,它通常处于启用状态,但您需要进行检查

您不能指示JVM仅使用物理RAM AFAIK,但这将是操作系统本身的限制,而不是JVM的限制(这应该回答5)

您可以禁用交换(同样对于操作系统,而不是JVM),但这不是一个好主意。在操作系统中运行多个进程,每个进程都需要运行空间(在某个时间点可能超过实际RAM)。它确实会影响性能,但更糟糕的是——一些性能损失(我假设操作系统有很多东西可以让你更好)还是应用程序的死亡?(这应该是答案4)


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

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

这些问题大多数不是jvm特有的,可能应该在超级用户上提问。你可能应该问一个操作系统的这些问题,因为这些东西的配置在不同的操作系统之间是非常不同的。尤金,谢谢你的解释。我已经通过点击向上箭头符号接受了你的解释,但论坛没有显示出来,因为我的声誉低于15。谢谢你。感谢上面的链接为服务器级JVM应用程序提供交换空间实际上是个坏主意。参见Java性能:权威指南,第页。44:“它对任何类型的Java应用程序(包括在桌面上运行的基于Swing的GUI应用程序)都特别糟糕,因为Java堆”(对性能有害,尤其是在全GCs的情况下)@JurajMartinka这不像你能控制它。Java只是一个从操作系统请求内存的正常过程,它总是虚拟的,包括交换