一、运行时数据区域
程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区、运行时常量池、直接内存文章来源地址https://www.toymoban.com/news/detail-648124.html
二、HotSpot虚拟机对象
- 对象创建:
- 引用检查
- 类加载检查
- 分配内存空间:指针碰撞、空闲列表
- 分配空间初始化
- 对象信息设置(对象头内)
- 对象内存布局:
- 对象头
- 实例数据
- 对象填充
- 对象访问定位:
- 句柄访问
- 直接指针访问
- OutOfMemoryError(OOM)
- 程序计数器不存在此问题
- Java堆溢出:
- 内存泄漏
- 内存溢出
- 虚拟机栈本地方法栈(HotSpot不区分)溢出
- StackOverFlowError:线程请求栈深度 > 虚拟机允许最大深度
- OutOfMemoryError:虚拟机栈内存允许动态拓展
- 可以通过减小最大堆和减小栈容量换取更多的线程
- 方法区和运行时常量区溢出
- 本机直接内存溢出:HeapDump无明显异常,可能原因:NIO间接使用DirectMemory
- 垃圾收集器与内存分配策略:对象回收
- 引用计数算法
- 可达性分析算法
- 引用:
- 强引用:Object object = new Object()存在引用赋值,永远不会回收被引用对象
- 软引用:还有引用但是非必须的对象,发生内存溢出异常前被二次回收,回收还不够才会报内存溢出异常
- 弱引用:非必须对象,生存到下一次垃圾回收为止
- 虚引用
文章来源:https://www.toymoban.com/news/detail-648124.html
到了这里,关于Java # JVM内存管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!