java虚拟机内存分布
《深入理解java虚拟机》,很好的解释了JVM的工作原理,下面是我自己在学习这本时,总结的一些笔记,摘自周志明的《深入理解java虚拟机》第二版
理解jvm的工作原理,对java员来说是非常必要的。
java虚拟机运行时数据区分为:方法区,堆区,栈区,程序计数器。
1、程序计数器
程序计数器是一块比较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。
多线程时,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储。
我们称这类内存区域为“线程私有”的内存。
2、栈stack
线程私有,生命周期和线程相同。
存放基本数据类型和对象的引用。
基本数据类型有8种,Boolean,byte,int,double,float,short,long,char。
3、堆Heap
java堆是java虚拟机内存中最大的一块。
java堆是被所有线程所共享的一块区域,在虚拟机创建时启动,存放对象实例。
java堆是垃圾回收器管理的主要区域,因此又被称为“GC堆”(Garbage Collection Heap)。
java堆还可以细分为新生代和老年代。
4、方法区
方法区,和java堆一样,是线程共享的一块区域,用于存储已经被虚拟机加载的类信息,常量,静态变量、即时编译器编译的代码。
运行时常量池是方法区的一部分。