jvm内存结构

JVM内存结构

image.png

程序技术器

介绍:

  1. 是一块很小内存空间,可以看作当前线程的所执行的字节码行号指数器,字节码解释器需要通过改变这个计数器的值来选取下一条需要执行的字节码指令
  2. 分支、循环、跳转、异常处理、线程恢复等操作都依赖程序技术器。
  3. 每个线程都拥有独立的程序计数器。
  4. 如果正在执行的是本地方法(native),那么计数器的值为空

特点:线程私有唯一不存在内存溢出的区域

java虚拟机栈

介绍:

  1. 虚拟机栈描述的是java线程的内存模型
  2. 线程中每个方法执行的时候都会创建栈帧用于存储局部变量表操作数栈动态连接方法出口等信息。
  3. 每个方法被调用到执行完,对应着栈帧在虚拟机中从入栈出栈的过程

特点:线程私有、线程请求的栈深度超过虚拟机运行的深度,将会抛出StackOverflowError异常

本地方法栈

介绍:

  1. Hot-Spot虚拟机直接将本地方法栈虚拟机栈合二为一。

特点:线程私有,在栈深度扩展失败时也会抛出StackOverflowError异常

java堆

介绍:

  1. 《java虚拟机规范中》堆描述:所有的对象实例以及数组都应当在堆上分配
  2. java堆是垃圾收集管理的内存区域,也可以称作GC堆
  3. 堆可以处于物理上不连续的内存空间中,但在逻辑上应该被视为连续的,但是对于大对象数组,很可能会要求连续的内存空间

特点:线程共享,堆内存不够时会抛出OutOfMemoryError异常

方法区

介绍:

  1. 储存已被虚拟机加载的类型信息常量静态变量即时编译器编译后的代码缓存
  2. jdk8以前Hot-Spot方法区的实现称为永久代,是堆内存的一部分
  3. jdk9以后Hot-Spoy方法区的实现称为元空间,使用的是直接内存

特点:线程共享、无法满足新的分配需求时会抛出OutOfMemoryError异常

运行时常量池

介绍:

  1. 方法区的一部分,Class文件中除了有类的版本字段方法接口等描述信息外,还有一个是常量池表,用于存放编译器生成的各种字面量符号引用,这部分内容会在类加载后放入运行时常量池
  2. 一般会把符号引用翻译成直接引用再放入运行时常量池
  3. 运行时常量池具有动态性,并非只有编译期间才能产生常量,运行时也可以将常量放入池中,比如String的intern()方法

特点:无法申请内存时抛出OutOfMemoryError异常

直接内存

直接内存并不是虚拟机运行时的内存区域

介绍:

  1. jdk1.4后引入了NIO,可以操作直接内存,在IO操作时可以显著提升性能

特点:IO操作时提升性能,收到机器物理内存的限制,无法动态扩展时抛出OutofMemoryError异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值