Java运行时数据区包括:虚拟机栈区,堆区,方法区,程序计数器等。
其中,虚拟机栈区也就是我们常说的栈区,线程私有,用于存放基本数据类型,对象的引用和ReturnAddress,在编译期间完成分配。
堆区:java堆,也成GC对,所有线程共享,存放对象的实例和数组,java堆是垃圾收集器主要管理的区域。
方法区:所有线程共享,存储被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。这个区域的内存回收目标主要是针对常量池的对象的回收和对类型的卸载。
程序计数器:线程私有,每个线程都有自己独立的程序计数器,用来指示下一条指令的地址。