JVM相关

JVM相关

  • 双亲委派机制

    • 类加载器在加载的时候先会委派父加载器加载,父类没有则返回到子类加载.
      • 目的:安全,防止恶意同名类干涉到核心类
  • JVM内存模型

    • 在这里插入图片描述

    • 方法区

      • 方法区与 Java 堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
    • 本地方法栈

      • 和虚拟机栈所发挥的作用非常相似,区别是: 虚拟机栈为虚拟机执行 Java 方法 (也就是字节码)服务,而本地方法栈则为虚拟机使用到的 Native 方法服务。 在 HotSpot 虚拟机中和 Java 虚拟机栈合二为一。
    • java虚拟机栈

      • 它的生命周期和线程相同,描述的是 Java 方法执行的内存模型,每次方法调用的数据都是通过栈传递的。
    • 程序计数器

      1. 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。
      2. 在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。
      • 此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里分配内存。垃圾回收的作用部分。
      • 堆包括新生代、老年代和元空间。
      • 大部分情况,对象都会首先在 Eden 区域分配,在一次新生代垃圾回收后,如果对象还存活,则会进入 s0 或者 s1,并且对象的年龄还会加 1(Eden 区->Survivor 区后对象的初始年龄变为 1),当它的年龄增加到一定程度(超过了survivor区的一半时,取这个年龄和MaxTenuringThreshold中更小的一个值),就会被晋升到老年代中。对象晋升到老年代的年龄阈值,可以通过参数 -XX:MaxTenuringThreshold 来设置。
      • 经过这次GC后,Eden区和"From"区已经被清空。这个时候,“From"和"To"会交换他们的角色,也就是新的"To"就是上次GC前的“From”,新的"From"就是上次GC前的"To”。不管怎样,都会保证名为To的Survivor区域是空的。Minor GC会一直重复这样的过程,直到“To”区被填满,"To"区被填满之后,会将所有对象移动到老年代中。
  • 堆的结构
    -在这里插入图片描述

  • 垃圾回收机制

    • 如何判断虽然被回收
      • 引用计数法 :给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加 1;当引用失效,计数器就减 1;任何时候计数器为 0 的对象就是不可能再被使用的。
      • 可达性分析算法 :这个算法的基本思想就是通过一系列的称为 “GC Roots” 的对象作为起点,从这些节点开始向下搜索,节点所走过的路径称为引用链,当一个对象到 GC Roots 没有任何引用链相连的话,则证明此对象是不可用的。
    • jvm堆空间结构
      • 新生代 新生代满了会轻gc 清理新生代
        • 伊甸区
          • 对象刚出生的地方,在gc后,存活的对象放到to区,会清空
        • 幸存from区
          • gc开始时,幸存的对象会被复制到to区
          • gc完,清空,变成to区
        • 幸存to区
          • gc完,存放了幸存对象,变成from区
      • 老年代 JVM内存不够 会full gc 清理老年代
        • 多次存活下来的对象会进入老年代(默认15次)
  • 垃圾回收算法

    • 复制
    • 标记-清除
    • 标记-清除-整理
  • 算法分代

    • 新生代存活率低 用复制算法
    • 老年代存活率高 用标记-清除或标记-清除-整理

新生代存活率低 用复制算法

  • 老年代存活率高 用标记-清除或标记-清除-整理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值