【发布时间】:2026-01-09 00:50:01
【问题描述】:
我有一个问题。假设我有两个参数传递给 JVM: -Xms256mb -Xmx1024mb 在程序开始时分配了 256MB。接下来,创建一些对象,JVM 进程尝试分配更多内存。假设 JVM 需要分配 800MB。 Xmx 属性允许这样做,但系统上当前可用的内存(比如说 Linux/Windows)是 600MB。是否有可能抛出 OutOfMemoryError ?或者交换机制会起作用?
我的第二个问题与 GC 算法的质量有关。假设我有 jdk1.5u7 和 jdk1.5u22。是否有可能在后一个 JVM 中内存泄漏消失并且 OutOfMemoryError 不会发生?最新版本的GC质量能更好吗?
【问题讨论】:
-
不管 GC 在以后的版本中是否更好,如果你将它推到如此接近内存不足错误的地步,你不能依赖 GC 来可靠地清理它...您需要分配更多内存。
-
我注意到 jdk1.5u7 (Linux) 因 OutOfMemoryError 而崩溃,而 jdk1.5u17 (Windows) 仍然存在。使用相同的代码和属性。
-
你的linux机器有swap吗?
标签: java memory memory-management memory-leaks garbage-collection