Skip to content

JVM:堆与垃圾回收 ​

示例笔记

这篇文章用于验证知识库的目录、代码块和本地图片。你可以直接修改它,或用自己的笔记替换。

要解决的问题 ​

对象使用结束后,内存如何重新利用?垃圾回收器判断对象是否仍然可达,并回收符合条件的对象所占用的空间。

一个常见的分代模型 ​

下面是帮助理解的示意图。具体布局由垃圾回收器决定,并非所有 JVM 回收器都使用相同的连续分区。

JVM 分代堆示意图:新生代包括 Eden 和两个 Survivor 区,另有老年代。

用代码提出问题 ​

java
byte[] buffer = new byte[1024 * 1024];
buffer = null;

把变量设为 null 并不代表对象立即被回收。还需要考虑其他引用是否存在,以及回收器何时执行回收。

继续验证 ​

记录使用的 JDK 版本和回收器,再观察 GC 日志。不要把某一次实验结果直接推广到所有运行环境。

图片文件在哪里 ​

这张图与文章放在一起,Markdown 使用 ./images/heap.svg 引用。PNG、JPEG 和 WebP 图片也使用相同的写法。