最近在看《深入理解Java虚拟机这本书》,写些文章是自己做些笔记防止遗忘也是对书章节的概述。权威还是参考该书。
部分虚拟机是把JVM所管理的内存划分为5个数据区域,见下表:
下面是对这些区域的一些补充说明:
程序计数器:Java虚拟机的多线程是通过线程的轮流切换并分配处理器的执行时间来实现的,在任何一个确定的时刻,一个处理器都只会执行一条线程中的指令。因此为了线程每次切换后能恢复到正确位置,每条线程都需要一个独立的程序计数器。
局部变量表:存放的是可知的基本数据类型,对象引用,returnAddress类型(指向一条字节码指令的地址)。
方法区:在现在的HotSpot中,把原本放在永久代的字符串常量池移出。现在称方法区为永久代已经不合适了。这个区域内存回收的目标主要是针对常量池的回收和对类型的卸载。方法区和堆一样可以不需要连续的内存,只要逻辑上连续即可。
运行时常量池:是方法区的一部分,用于存放编译器生成的各种字面量和符号引用。