JVM 基础知识

1 篇文章 0 订阅

JVM 基础

知识点汇总github地址 https://github.com/bage2014/interview

JVM理论基础

内存划分

JVM规范,将内存分为 程序计数器、Java栈,也叫虚拟机栈、本地方法栈、方法区、堆

  • 程序计数器
    程序指令保存,从当前指令到下一个指令,从程序计数器获取下一个指令的地址,直到执行所有的指令;线程私有
  • Java栈(虚拟机栈)
    保存方法栈帧,当调用一个方法,则新创建一个栈帧,当前的方法始终保持在栈帧的顶部;线程私有
  • 本地方法栈
    保存本地方法栈帧,当调用一个本地方法,则新创建一个栈帧,当前的方法始终保持在栈帧的顶部;线程私有
  • 方法区
    保存类信息、静态常量、常量;线程共享

  • 保存对象,最最主要的垃圾收集之处;线程共享

对象存活

  • 引用计数算法
    对对象引用进行计数,引用则计数器 +1,引用失效 -1;计数为 0 时候认为不在引用,可以进行回收;不能处理对象循环引用问题

  • 可达性分析算法
    主要采取此方式,采用虚拟机栈、类引用对象、常量对象、本地方法引用对象作为根,判断对象到根是否存在引用关系,不可达则认为不在引用,可以进行回收;

GC回收算法

  • 标记-清除算法
    对要回收的对象,先进行标志,后进行清除,你懂得;但是,久之,会存在内存不连续,比如,一次垃圾回收,回收了,(0,1)和(0,3)和(0,5)三个位置,但是没有回收(0,2)和(0,4),那下次的内存,就无法使用(0,1)-(0,5)的连续空间;

  • 复制算法
    为改进上面的内存碎片问题而产生,对内存分为两部分,交替回收其中一部分,存活的对象复制到另一部分空间,你懂得;但是,有点浪费,比如,内存分为,(0,1)-(0,3)和(0,3)-(0,5)两个部分,某次回收(0,1)-(0,3)空间,将存活对象拷贝到(0,3)-(0,5),而后在(0,1)-(0,3)分配对象;

  • 标记-整理算法
    为改进上面的内存浪费问题而产生,对要回收的对象,先进行标志,后进行清除,你懂得,然后,将存活的对象,进行整理,移动到边界位置,似的剩余空间连续;比如,一次垃圾回收,回收了,(0,1)和(0,3)和(0,5)三个位置,但是没有回收(0,2)和(0,4),然后,将(0,2)和(0,4)移动到(0,1)和(0,2),使得(0,3)-(0,5)的空间连续;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值