jvm学习006 jvm内存结构分配
主要内容如下: JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一、JVM启动流程: JVM启动时,是由java命令/javaw命令来启动的。 二、JVM基本结构: JVM基本结构图: 《深入理解Java虚拟机(第二版)》中的描述是下面这个样子的: Java中的内存分配: Java程序在运行时,需要在内存中的分配空间。 为了提高运算效率,就对数据进行了不同空间的划分 ,因为每一片区域都有特定的处理数据方式和内存管理方式。 具体划分为如下 5个内存空间 :(非常重要) 栈 :存放 局部变量 堆 :存放所有 new出来的东西 方法区:被虚拟机加载的类信息、常量、静态常量等。 程序计数器(和系统相关) 本地方法栈 1、程序计数器: 每个线程拥有一个PC寄存器 在线程创建时创建 指向下一条指令的地址 执行本地方法时,PC的值为undefined 2、方法区: 保存装载的类信息 类型的常量池 字段,方法信息 方法字节码 通常和永久区(Perm)关联在一起 3、堆内存: 和程序开发密切相关 应用系统对象都保存在Java堆中 所有线程共享Java堆 对分代GC来说,堆也是分代的 GC管理的主要区域 现在的GC基本都采用分代收集算法,如果是分代的,那么堆也是分代的。如果堆是分代的,那堆空间应该是下面这个样子: 上图是堆的基本结构,在之后的文章中再进行详解。 4、栈内存: