JVM内存模型

2021-02-27  本文已影响0人  夹胡碰

内存模型分区

简介

线程持有 概述
程序计数器 线程私有 当前线程所执行的字节码的行号指示器
Java虚拟机栈 线程私有 方法执行的时候创建栈帧用于存储局部变量表、操作数栈、动态连接、方法出口等信息
本地方法栈 线程私有 与Java虚拟机栈类似,存储native方法的相关信息
方法区 线程共享 存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据
线程共享 存储创建的对象

特殊:本地内存(Native Memory)
从JDK1.7到1.8,方法区的实现由永久代变成了元空间,元空间的部分数据分配在本地内存中。
Java8内存模型—永久代(PermGen)和元空间(Metaspace)

特殊: 直接内存(Direct Memory)

也叫堆外内存,JDK1.4加入了NIO,涉及到堆外内存分配。
可以通过 -XX:MaxDirectMemorySize 参数来设置最大可用直接内存,如果启动时未设置则默认为最大堆内存大小,即与 -Xmx 相同。即假如最大堆内存为1G,则默认直接内存也为1G,那么 JVM 最大需要的内存大小为2G多一些。当直接内存达到最大限制时就会触发GC,如果回收失败则会引起OutOfMemoryError。

上一篇 下一篇

猜你喜欢

热点阅读