Java Memory Management, with its built-in garbage collection, is one of the language’s finest achievements. It allows developers to create new objects without worrying explicitly about memory allocation and deallocation, because the garbage collector automatically reclaims memory for reuse. This enables faster development with less boilerplate code, while eliminating memory leaks and other memory-related problems. At least in theory.
Java 语言的一大特点就是可以进行自动垃圾回收。对 Java 程序员来说,在虚拟机(JVM)自动内存管理机制的帮助下,不再需要为每一个 new 操作去写配对的 delete/free 代码,不容易出现内存泄漏和内存溢出的问题。不过也正是因为这种便利,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会成为一项异常艰难的任务。
本文是对周志明先生的《 深入理解 Java 虚拟机(第二版)》第二部分—— 自动内存管理机制 做的读书笔记,想要了解更详细的内容,请阅读原著。
Java 内存区域
在介绍垃圾回收(Garbage Collection,GC)之前,首先来了解一下 JVM 运行时数据区。根据 《The Java® Virtual
Machine Specification _Java SE 8 Edition_》 的规定,Java 虚拟机所管理的内存将会包括以下几个运行时数据区域: