Day15 JVM结构和线程模型

今天偷个懒了属于是

JVM模型

JVM结构和线程模型

  • 程序计数器 记录当前线程正在执行的字节码指令地址,线程私有,生命周期与线程一致,是唯一不会发生OOM的区域,执行native方法时,程序计数器的值为undefined

  • 虚拟机栈 存储方法调用的栈帧,每个方法调用都会创建一个栈帧,线程私有,随线程创建而创建,通过-Xss设置栈大小,有栈深度限制,若递归太深,会抛出StackOverflowError

  • 本地方法栈 为JVM调用native提供服务。

  • 堆 存放几乎所有对象实例和数组。线程共享,是JVM中最大的一块内存区域,由内存回收器GC管理,内部划分为新生代(young generation: Eden + Survivor)、老年代(Old)和永久代(PermGen JDK8+已不再属于堆,使用的是本地内存,且改名为元空间Metaspace),可以提供-Xmx(最大堆)和-Xms(初始堆)调节大小,OOM:Java heap space属于此区域

    image.png

  • 方法区 储存类的元数据,包括类结构信息、运行时常量池、静态变量、即时编译器JIT优化后的代码缓存。线程共享,不需要连续内存,可固定大小或扩展,通过-XX:MataspaceSize(触发fullGC的最小阈值,默认21M)和-XX:MaxMetaspaceSixe(元空间最大值,默认-1不限制)配置

  • 直接内存 JVM向操作系统申请的一块堆外内存,不受JVM堆大小限制,由操作系统直接管理,通过java.nio.ByteBuffer.allocateDirect()分配

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP