Java虚拟机运行时内存分布

Java虚拟机内存分布

内存分布如图:分为程序计数区、虚拟机栈、本地方法栈、堆、方法区

  1. 程序计数区:占一小部分空间,当前线程运行字节码行数指示器,各线程之间的程序计数器互不影响,相互独立,线程私有;
  2. 虚拟机栈:线程私有,生命周期与线程同步,每执行一个线程都会创建一个虚拟机栈用于存储变量表、操作栈、动态链接、方法出口等信息;每个方法被调用的过程就对应一个栈帧从虚拟机中入栈到出栈的过程;平常说的堆、栈比较粗略,其中的栈对应的就是虚拟机栈中的变量表,存储基本数据类型和对象的引用;
  3. 本地方法栈:与虚拟机栈类似,只不过本地方法栈对应的方法不是java调用自己的方法而是调用jvm所在系统环境中的本地方法
  4. 堆:被所有线程共享的一块内存,在虚拟机启动时创建,存放对象实例,几乎所有的对象都存放在这里,垃圾收集器主要回收区域;
  5. 方法区:与堆一样,被所有线程共享的一块内存,用于存储类信息、常量、静态变量、即时编译器编译后的代码等数据;

相关文章: