JVM内存知识点汇总

一、内存与数据区域
JAVA所管理的内存是划分为不同的数据区域的,这些数据区域用途不同生命周期也不同。有的区域会在进程启动后一直存在,有的却会随着线程建立或销毁。
二、JVM有五个重要数据区域

名称 是否共享 OutOfMemoryError StackOverflowError 功能 备注
程序计数器 X X X 字节码行号指示器 若执行本地方法则计数值为空
JAVA虚拟机栈 X 用于存储局部变量表、操作数栈、动态链接、方法出口等信息 所谓java栈,一般是指java虚拟机栈或局部变量表
本地方法栈 X 服务于本地方法(native)
方法区 X 存放已被虚拟机加载的类型信息、常量、静态变量、即时编译后的代码缓存
X 存放实例化数据 GC的主要回收对象

三、对象与空间
为新对象分配空间的两种方式:

method alias 适用场景 GC算法 GC方式
Bump the pointer 指针碰撞 JAVA堆内存绝对规整 Compact压缩整理 Serial/ParNew
Free list 空闲列表 JAVA堆内存犬牙交错 Sweep CMS

对象访问定位的两种方式

访问方式 JAVA堆 方法区
句柄访问 句柄池:到对象实例数据的指针+到对象类型数据的指针 实例池:对象实例数据 对象类型数据
直接指针 到对象类型数据的指针+对象实例数据 对象类型数据

四、OutOfMemoryError异常定位

溢出区域 异常特点 可能原因 解决方案
Java堆 Java heap space 内存泄露leak、内存溢出overflow leak:查看泄露对象到GC Roots的引用链,从而定位无法回收的对象创建位置 overflow:扩大堆内存即可
虚拟机栈、本地方法栈 unable to create native thread 线程过多 减少线程数量或减少栈内存
方法区 PermGen jdk版本 升级版本至1.8,去永久代

猜你喜欢

转载自blog.csdn.net/weixin_44159662/article/details/107755611