这可能是一个noob问题,但我需要运行一个处理大型数据集的java应用程序。所以我去了-Xmx14G,知道我的机器有16G的物理内存。
不久之后,热潮,我的操作系统通知我的启动盘几乎已满。我检查了我的进程,没有OOM异常,只是它停滞了。检查我的活动监视器,并未说明应用程序以完全内存容量运行。
JVM如何保留/使用内存?
答案 0 :(得分:0)
通常,JVM会在堆已满之前分配新内存,在这种情况下,它会收集垃圾,释放未引用的对象。如果你为堆分配了14GB,那么它很可能会占用那么多内存。
答案 1 :(得分:0)
还有另一个JVM参数-Xms<size>
它'初始堆大小。如果我们没有明确设置它,JVM将根据PC配置自动选择一个。这个值永远不会那么大,通常是64M。以后JVM可以分配更多内存到最大值。但它只在应用程序真正使用它时才会发生。如果实际内存使用量减少,JVM会将内存缩小到更小的大小。