深入理解Java架构:JVM内存模型与垃圾回收机制
需积分: 29 119 浏览量
更新于2024-11-15
收藏 8.9MB ZIP 举报
资源摘要信息:"Java架构知识库整理"
Java架构知识库整理主要涉及了Java虚拟机(JVM)的内部架构和内存管理机制,这些内容对于Java架构师来说是必备的基础知识。以下是详细的知识点:
1. JVM内存区域
- 程序计数器:每个线程私有的一块小内存区域,用于指示当前线程执行的指令位置,是线程隔离的,不会发生内存溢出。
- 虚拟机栈:存储了局部变量表、操作数栈、动态链接、方法出口等信息,也是线程私有的,与线程生命周期相同,可能出现栈溢出错误。
- 本地方法区:与虚拟机栈类似,但主要用于支持native方法的执行,也是线程私有的。
- 堆(Heap):所有线程共享,存放对象实例,是垃圾收集器管理的主要区域,分为新生代和老年代。
- 方法区/永久代:用于存储已被虚拟机加载的类信息、常量、静态变量等,也是线程共享的区域。Java 8之后,永久代被元空间(Metaspace)取代。
2. JVM运行时内存
- 新生代:对象创建之初被分配到新生代,包括Eden区和两个Survivor区(ServivorFrom和ServivorTo)。Minor GC的流程包括复制、清空、互换操作。
- 老年代:新生代中经历多次GC仍然存活的对象会被移动到老年代,它的空间一般比新生代大。
- 永久代:Java 8以前,用于存储类信息、常量、静态变量等,Java 8之后这部分被移至直接内存的元空间。
3. 垃圾回收与算法
- 如何确定垃圾:Java采用的是一种基于可达性分析的垃圾回收机制。可达性分析通过一系列称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则认为该对象是不可达的,可以被回收。
- 引用计数法:每个对象有一个引用计数器,被引用时计数器+1,引用失效时-1,当计数器为0时对象可回收。但这种方法无法解决循环引用的问题。
- 可达性分析:GC Roots作为起点,向下搜索引用链,无引用链相连的对象即为不可达对象。
- 垃圾回收算法:
- 标记清除算法(Mark-Sweep):先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。
- 复制算法(copying):将内存分为两块,一块使用中,一块空闲。当使用的一块空间不足时,将存活对象复制到空闲的一块,然后清空使用过的区域。
- 标记整理算法(Mark-Compact):先标记,然后将存活对象向一端移动,最后清理掉边界以外的内存区域。
JVM内存区域和垃圾回收机制是Java虚拟机的核心组成部分,理解这些概念对于设计高性能、稳定的应用程序至关重要。作为Java架构师,不仅要熟悉这些概念,还要能够在实际工作中合理地调整和优化这些参数,确保系统运行的高效和稳定。
2018-05-15 上传
2014-04-15 上传
2019-03-25 上传
2019-03-22 上传
2023-08-09 上传
2022-09-23 上传
2020-03-30 上传
2021-12-17 上传
2021-12-17 上传
头上一片天空
- 粉丝: 482
- 资源: 15