Java内存模型:
JVM 内存区域主要分为线程私有区域、线程共享区域【JAVA 堆、方法区】、直接内存
线程私有区域:程序计数器、虚拟机栈、本地方法区
线程共享区域:JAVA 堆、方法区
直接内存:不熟JVM GC管理
程序计数器
- 指向虚拟机字节码指令的位置
- 唯一一个没有OOM(内存泄露的区域)
虚拟机栈
- 和线程的生命周期相同
- 一个线程中每调用一个方法则创建一个栈帧
- 会出现两种异常:一种是线程请求的栈深度大于JVM所允许的深度深度,栈溢出;一种是若JVM允许动态扩展,若无法申请到足够的内存,内存泄露OOM
- 栈帧的结构:本地变量表,操作数栈,对运行时常量池的引用
本地方法区
- 会出现两种异常:一种是线程请求的栈深度大于JVM所允许的深度深度,栈溢出;一种是若JVM允许动态扩展,若无法申请到足够的内存,内存泄露OOM
- 为Native 方法服务
JAVA 堆
- 创建的对象和数组都保存在java堆内存中,也是垃圾收集器进行垃圾收集的重要区域
- 从GC的角度分级可以分为:新生代(1/3堆空间)和老年代(2/3堆空间)
- 新生代:Eden区(8/10新生代的空间),Survivor From区(1/10新生代的空间),Survivor To区(1/10新生代的空间)
方法区、永久代
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。