JVM

五大模块:

  • 类转载器子系统
  • 运行时数据区
  • 执行引擎
  • 本地方法接口
  • 垃圾收集

内存回收判断生存火灾死亡的算法

  • 引用数算法
  • 可达性分析算法: 该算法核心思想是依靠判断对象是否存活来实现的
通过一系列的 ‘GC Roots’ 的对象作为起始点,从这些节点出发所走过的路径称为引用链。当一个对象到 GC Roots 没有任何引用链相连的时候说明对象不可用。

可作为GC Roots的对象:

  • 虚拟机栈(栈帧中的本地变量表)中引用的对象
  • 方法区中类静态属性引用的对象
  • 方法区中常量引用的对象
  • 本地方法栈中 JNI(即一般说的 Native 方法) 引用的对象

特点

移植性
成熟
覆盖面

Java堆

线程共享,主要存放对象实例和数组。

类加载机制

  • 全盘负责
  • 父类委托
  • 缓存机制

类的加载

三种方式:

1、命令行启动应用时候由JVM初始化加载
2、通过Class.forName()方法动态加载
3、通过ClassLoader.loadClass()方法动态加载

JVM内存结构

image
堆内存、方法区和栈

方法区和堆是所有线程共享的内存区域;而java栈、本地方法栈和程序计数器是运行是线程私有的内存区域。

方法区存储类信息、常量、静态变量等数据,是线程共享的区域,为与Java堆区分,方法区还有一个别名Non-Heap(非堆);栈又分为java虚拟机栈和本地方法栈主要用于方法的执行。

垃圾收集GC

垃圾收集法

  • 标记 -清除算法
  • 复制算法
  • 标记-压缩算法
  • 分代收集算法

存储局部变量表、操作数栈、动态链接、方法出口;

垃圾收集器

CMS收集器: 是一种以获得最短回收停顿时间为目标的收集器,标记清除算法,运作过程:初始标记,并发标记,重新标记,并发清除,收集结束会产生大量空间碎片。
G1收集器:标记整理算法实现,运作流程主要包括以下:初始标记,并发标记,最终标记,筛选标记。不会产生空间碎片,可以精确地控制停顿。

CMS收集器和G1收集器的区别:

  • CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用;
  • G1收集器收集范围是老年代和新生代,不需要结合其他收集器使用;
  • CMS收集器以最小的停顿时间为目标的收集器;
  • G1收集器可预测垃圾回收的停顿时间
  • CMS收集器是使用“标记-清除”算法进行的垃圾回收,容易产生内存碎片
  • G1收集器使用的是“标记-整理”算法,进行了空间整合,降低了内存空间碎片。
posted @ 2021-08-09 11:17  风飘落叶  阅读(32)  评论(0编辑  收藏  举报