Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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/2/django/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 JVM中的内存到磁盘交换_Java_Memory_Jvm_Swap - Fatal编程技术网

Java JVM中的内存到磁盘交换

Java JVM中的内存到磁盘交换,java,memory,jvm,swap,Java,Memory,Jvm,Swap,我使用的是64位Linux和Java JVM。我想确认JVM使用的内存是否小于机器的物理内存大小,操作系统将不会进行磁盘内存交换?不,这不一定是真的。物理内存由所有进程共享,也由一些其他内核共享,例如磁盘缓存。因此,应用程序使用的虚拟内存量并不是唯一的考虑因素。不,这不一定正确。物理内存由所有进程共享,也由一些其他内核共享,例如磁盘缓存。因此,应用程序使用的虚拟内存量并不是唯一的考虑因素。您可以使用jvm参数-Xmx512m启动java应用程序,该参数将告诉jvm为堆使用最多512MB的ram。

我使用的是64位Linux和Java JVM。我想确认JVM使用的内存是否小于机器的物理内存大小,操作系统将不会进行磁盘内存交换?

不,这不一定是真的。物理内存由所有进程共享,也由一些其他内核共享,例如磁盘缓存。因此,应用程序使用的虚拟内存量并不是唯一的考虑因素。

不,这不一定正确。物理内存由所有进程共享,也由一些其他内核共享,例如磁盘缓存。因此,应用程序使用的虚拟内存量并不是唯一的考虑因素。

您可以使用jvm参数-Xmx512m启动java应用程序,该参数将告诉jvm为堆使用最多512MB的ram。还要考虑到线程堆栈大小还有另一个参数——Xss512k。因此,jvm将使用的内存量是最大堆+线程计数*线程堆栈大小+JIT编译和GC数据结构所需的更多ram,具体取决于您使用的GC收集器


考虑到这一点,您可以确保jvm使用的ram不会超过机器中的ram

您可以使用jvm参数-Xmx512m启动java应用程序,该参数将告诉jvm为堆使用最多512MB的ram。还要考虑到线程堆栈大小还有另一个参数——Xss512k。因此,jvm将使用的内存量是最大堆+线程计数*线程堆栈大小+JIT编译和GC数据结构所需的更多ram,具体取决于您使用的GC收集器


考虑到这一点,您可以确保jvm使用的ram不会超过机器中的ram

您的意思是为jvm设置-Xmx?您的意思是为jvm设置-Xmx?您可以只配置一台linux机器而不进行交换,但这显然是危险的。事实并非如此。默认情况下,我倾向于始终禁用交换。RAM现在很便宜,您的活动进程无论如何都应该在服务器上的RAM上运行。交换只会延迟诸如内存泄漏和不太好的调试gc参数之类的问题,如果有空闲的物理RAM,那么就不应该有交换,对吗?或者,即使存在空闲的物理RAM,在其他条件下也可能触发交换?谢谢。@LinMa这不应该发生。交换不应在不必要时发生。但正如我所说的,在服务器中,您应该为您的进程提供enoguh RAM。完全没有交换。你可以只配置一台完全没有交换的linux机器,但这显然是危险的。事实并非如此。默认情况下,我倾向于始终禁用交换。RAM现在很便宜,您的活动进程无论如何都应该在服务器上的RAM上运行。交换只会延迟诸如内存泄漏和不太好的调试gc参数之类的问题,如果有空闲的物理RAM,那么就不应该有交换,对吗?或者,即使存在空闲的物理RAM,在其他条件下也可能触发交换?谢谢。@LinMa这不应该发生。交换不应在不必要时发生。但正如我所说的,在服务器中,您应该为您的进程提供enoguh RAM。完全没有交换。谢谢David,你知道在什么情况下会触发内存交换吗?当内核决定这样做时,你无法控制。我想操作系统足够聪明,可以先交换访问最少的内存区域。谢谢David,你知道在什么情况下会触发内存交换吗?当内核决定这样做时,我想TM,你无法控制。我认为操作系统足够聪明,可以交换最先被访问最少的内存区域。