JVM-内存模型
JVM运行时内存空间分为五个部分 :
1 . 程序计数器
2 . Java虚拟机栈
3 . 本地方法栈
4 . Java堆
5 . 方法区

程序计数器

1 . 用于记录正在执行的字节码的下一条指令的地址 , 实现代码的流程控制 , 比如: 判断 , 循环 , 选择 , 异常处理等
2 . 在多线程情况下用于记录该线程执行的位置 , 从而当该线程切换回来的时候,能够知道运行到哪里
3 . 如果执行的是Native方法 , 则程序计数器空 , 因为Native是本地方法,与字节码无关.
4 . 程序计数器是线程私有的 , 跟线程的生命周期一样 , 是唯一一块不会出现OOM的地方

Java虚拟机栈

是线程私有的是描述方法执行的主要内存区域 , 当一个方法运行的时候,JVM就会在该区域创建一个 ’ 栈帧 ’ , 栈帧中包括 局部变量表 , 操作数栈 , 动态链接 , 方法的返回地址 . 当方法执行完毕 , 该方法对应的栈帧将会出栈 , 并释放内存空间 , 而Java虚拟机栈则管理这些栈帧 .

本地方法栈

  1. 本地方法栈和Java虚拟机栈实现的功能类似,只不过本地方法区是Native方法运行的内存模型
  2. HotSpot虚拟机是把Java虚拟机与本地方法区实现在一起

Java堆

  1. 是存放对象实例的主要区域
  2. 是垃圾回收的主要地点
  3. 对所有线程共享

方法区

JVM中定义方法区是Java堆的一个逻辑部分 , 是线程共享的 , 方法区中存放已经被JVM加载的类信息 , 常量 , 静态变量 , 即时编译后的代码等 .
特点

  1. 又被叫做永久代 ,但是会带来内存上大小的限制
  2. 主要的垃圾回收目标是废弃的常量 , 和无用的类
  3. JDK1.7之后字符串常量池从中移除.

下一节说一下JVM中对象的创建 , 对象的内存分布 以及 对象的访问

相关文章:

  • 2021-09-10
猜你喜欢
  • 2021-08-22
  • 2021-07-23
  • 2021-12-23
  • 2021-11-28
  • 2022-01-08
  • 2021-08-04
  • 2021-12-12
相关资源
相似解决方案