Jvm在运行时把内存主要分成五个部分:程序计数器、java虚拟机栈、本地方法栈、java堆、方法区(运行时常量池)。
而我们平时所说的栈和堆主要是指java虚拟机栈,java堆
栈(线程私有):
每个JVM的线程在创建的时候,都会创建一个栈。一个栈包含很多栈桢。栈帧用来存储局部变量表(存放了编译器的各种基本数据类型如boolean、byte、char、short、int、float、long、double;对象引用(不同虚拟机存储的不同如指向对象起始地址的引用指针或者是代表对象的句柄);returnaddress类型)、操作栈、动态链接、方法出口等信息。
堆
JVM有一个在所有线程内共享的堆。堆是给所有类的实例和数组分配内存的运行时数据区。 堆在虚拟机启动的时候创建,堆中储存的对象通过一个自动存储管理系统(垃圾回收器)进行回收。 对象从不明确的被分配(JVM从不指明对象的释放)。JVM加上没有(JVM不指定特定的自动存储管理系统)自动存储管理系统的特别的类型,(开发者可根据系统要求自主选择)并且这个存储管理技术可能被选择按照实现的系统需求。
|