java heap 结构_Java内存结构

d2168a2bcdb8b822166593157f077c58.png

Java 堆(Java Heap):

概念:Java 堆 是Java 虚拟机管理的内存中最大的一块。是被所有线程共享的一块内存区域。在Java 虚拟机启动时候创建。

作用:所有实例对象,数组都要在堆上分配。

别名:GC 堆(garbage collected heap),因为堆是垃圾回收器管理的主要区域

堆的结构:

内存回收角度:新生代(eden区,s0,s1),老年代

内存分配角度:还有可能划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer,TLAB))

如果堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError异常。

Java虚拟机栈(Java Virtual Machine Stacks):

概念:java 虚拟机栈是描述的java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。

作用:存放基本数据类型,对象引用,局部变量

每个线程都是独立栈

这个区域规定了两种异常状态:如果线程请求的栈深度大于虚拟机所允许的深度,则抛出StackOverflowError异常;如果虚拟机栈可以动态扩展,在扩展是无法申请到足够的内存,就会抛出OutOfMemoryError异常。

本地方法栈(Native Method Stack):

Java 语言调用外部语言(C语言,虚拟机使用到的native方法服务

方法区:jdk1.8之前叫做永久区,垃圾回收机制一般不会去回收的,但是full gc 还是回去回收的。

概念:线程共享的内存区域

作用:存储类信息、常量、静态变量、即时编译器编译后的代码等数据。

运行时常量池是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在加载后进入方法区的运行时常量池中存放。

执行引擎:

虚拟机核心的组件就是执行引擎,它负责执行虚拟机的字节码,一般户先进行编译成机器码后执行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值