Java JVM中的内存到磁盘交换
我使用的是64位Linux和Java JVM。我想确认JVM使用的内存是否小于机器的物理内存大小,操作系统将不会进行磁盘内存交换?不,这不一定是真的。物理内存由所有进程共享,也由一些其他内核共享,例如磁盘缓存。因此,应用程序使用的虚拟内存量并不是唯一的考虑因素。不,这不一定正确。物理内存由所有进程共享,也由一些其他内核共享,例如磁盘缓存。因此,应用程序使用的虚拟内存量并不是唯一的考虑因素。您可以使用jvm参数-Xmx512m启动java应用程序,该参数将告诉jvm为堆使用最多512MB的ram。还要考虑到线程堆栈大小还有另一个参数——Xss512k。因此,jvm将使用的内存量是最大堆+线程计数*线程堆栈大小+JIT编译和GC数据结构所需的更多ram,具体取决于您使用的GC收集器Java JVM中的内存到磁盘交换,java,memory,jvm,swap,Java,Memory,Jvm,Swap,我使用的是64位Linux和Java JVM。我想确认JVM使用的内存是否小于机器的物理内存大小,操作系统将不会进行磁盘内存交换?不,这不一定是真的。物理内存由所有进程共享,也由一些其他内核共享,例如磁盘缓存。因此,应用程序使用的虚拟内存量并不是唯一的考虑因素。不,这不一定正确。物理内存由所有进程共享,也由一些其他内核共享,例如磁盘缓存。因此,应用程序使用的虚拟内存量并不是唯一的考虑因素。您可以使用jvm参数-Xmx512m启动java应用程序,该参数将告诉jvm为堆使用最多512MB的ram。
考虑到这一点,您可以确保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,你无法控制。我认为操作系统足够聪明,可以交换最先被访问最少的内存区域。