JVM组成以类加载方式(双亲委派机制)、jvm垃圾回收

JVM组成

  • 本地库接口、执行引擎、运行时数据区、类加载子系统

运行时数据区:

  • 堆(所有线程共享),元空间(所有线程共享),虚拟机栈(线程隔离)、本地方法栈(线程隔离)、程序计数器(线程隔离)
    堆区:
  • 新生代(eden,s0,s1)、老生

双亲委派:

我们的程序本来是要通过应用类加载器来加载,但是它不会优先加载,它会先委托给他的父亲(扩展类加载器),它的父亲再委托给启动类加载器,也就是委托给它的两个亲人。所谓就叫双亲委派。有加载规则,优先使用爷爷加载,如果没有加载到再使用它爹加载,如果他爹也没有加载到,才到自己加载,如果自己也没有加载到才报ClassNotFountException。再这过程中只要上一级加载到了,下一级就不会加载了。

目的:不让我们轻易覆盖系统提供功能
也要让我们扩展我们功能。

jvm垃圾回收

首先判断对象是否已死; 是否为垃圾
使用:

  • 引用计数算法

  • 可达性分析算法:看对象与垃圾收集的起点GC Roots之间没有可达路径,没有就是已经死了。就可以进行回收。
    选择垃圾收集算法:进行垃圾回收
    常见的几种回收算法:

  • 标记-清除算法:分为标记和清除两个阶段,首先标记出所有需要回收的对象,标记完成后统一回收所有被标记的对象

  • 复制算法:把内存分为大小相等的两块,每次存储只用其中一块,当这一块用完了,就把存活的对象全部复制到另一块上,同时把使用过的这块内存空间全部清理掉,往复循环

  • 缺点:实际可使用的内存空间缩小为原来的一半,比较适合

  • 标记-整理算法:先对可用的对象进行标记,然后所有被标记的对象向一段移动,最后清除可用对象边界以外的内存

  • 分代收集算法:把堆内存分为新生代和老年代,新生代又分为Eden区、From Survivor和To Survivor。一般新生代中的对象基本上都是朝生夕灭的,每次只有少量对象存活,

  • 新生代因此采用复制算法,只需要复制那些少量存活的对象就可以完成垃圾收集;

  • 老年代中的对象存活率较高,就采用标记-清除或者标记整理算法来进行回收。

  • 虚拟栈:组成
    栈帧组成:在这里插入图片描述
    局部变量int 1 先压入操作数栈
    iadd 出栈 相加 将和压入操作数栈
    在这里插入图片描述

  • 程序计数器记录代码记录的位置,多线程需要程序计数器,确保多线程运行的作用,当线程运行时,线程终止,程序计数器记录线程运行的地址,当再次轮到该线程,程序计数器从记录的位置分派给线程
    动态链接:与多态相关。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甜甜掉在星星上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值