Day15 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属于此区域

-
方法区 储存类的元数据,包括类结构信息、运行时常量池、静态变量、即时编译器JIT优化后的代码缓存。线程共享,不需要连续内存,可固定大小或扩展,通过-XX:MataspaceSize(触发fullGC的最小阈值,默认21M)和-XX:MaxMetaspaceSixe(元空间最大值,默认-1不限制)配置
-
直接内存 JVM向操作系统申请的一块堆外内存,不受JVM堆大小限制,由操作系统直接管理,通过
java.nio.ByteBuffer.allocateDirect()分配
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论

