Java 面试 JVM 基础:运行时内存、类加载机制

1. JVM 运行时内存

1.1 线程私有

① 线程计数器

  • 可以看作是当前线程所执行的字节码的行号指示器
  • 字节码解释器通过这个计数器的值来获取下一条需要执行的指令
  • 是唯一一个不会出现 OOM 的内存区域
  • 随着线程创建而创建、随着线程销毁而销毁

② 虚拟机栈

  • 是由一个个栈帧组成:每个栈帧里面都有局部变量表、操作数栈、动态链接、方法出口信息
  • 生命周期和线程一样
  • 局部变量表:存放了各种编译期可知的数据类型(基本数据类型)和对象引用
  • 可能会出现两种错误:SOF 和 OOM
    • SOF:若虚拟机栈内存不允许动态扩展,线程请求深度超过栈的最大深度
    • OOM:若堆中没有空闲内存、而且垃圾回收器也无法提供更多内存

③ 本地方法栈

  • 和虚拟机栈类似,只不过是服务于本地方法

1.2 公有区域

① 堆

  • 虚拟机中锁管理内存中最大的一块,“几乎” 所有的对象实例 、数组都在堆中分配
  • 从 JDK1.7 就已经默认开启逃逸分析,如果某些方法中的对象引用没有被返回或者未被外面使用,那么对象可以直接再栈上分配内存
  • Java 堆是垃圾收集器管理的主要区域,也被称为 GC 堆,从垃圾回收的角度可以分为新生代和老年代,新生代再细 Eden、Form Survivor、To Survivor 默认比例是 8:1:1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值