如果系统上的物理内存非常低,那么java进程会发生什么

问题描述 投票:7回答:1

我有一个Java进程正在运行某些任务,几个小时后,系统上打开了多个其他应用程序,导致系统上的物理内存非常低。

所以,如果系统没有物理内存/内存很少,我的java进程将如何响应这种情况?它会抛出“内存不足”的异常吗?

enter image description here

java jvm out-of-memory
1个回答
6
投票

RAM用尽时,OS通常会使用swap or pagefile来提供virtual memory

RAM是有限的资源,而对于大多数实际用途,虚拟内存是无限的。可以有许多进程,每个进程都有自己的2 GB私有虚拟地址空间。当所有现有进程使用的内存超过可用RAM时,操作系统将一个或多个虚拟地址空间的页面(4 KB片段)移动到计算机的硬盘上。这使得RAM帧可以用于其他用途。在Windows系统中,这些“分页”页面存储在分区根目录中的一个或多个文件(Pagefile.sys文件)中。

Paging通常会导致严重的性能损失,因为即使是现代的SSD存储也不如RAM快。如果内存稀缺继续,系统可能会启动thrashing

假设JVM不需要更多内存,例如它已被-Xmx约束并分配了所有允许的内存,它将继续运行。通常当内存耗尽时,OS将不允许新进程启动,例如尝试启动新的JVM进程将导致以下错误:

Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine. 

在一天结束时,它取决于操作系统配置。通常这种情况不是你想花时间调查的,因为RAM比开发人员的时间便宜得多。

© www.soinside.com 2019 - 2024. All rights reserved.