• 垃圾回收机制


    谈谈对jvm虚拟机的了解:

    jvm包含,堆,栈,方法区,

    堆内存: 是分配所有对象实例,垃圾回收主要区域

    堆内存又分为:老年代,年轻代

    大对象就是需要消耗较大的内存空间 对象超过设置值的大小会直接进入老年代(数组,字符串)

    长期存活的对象会进入老年代,一个对象的创建首先会进入年轻代每次GC回收他没被回收就会age+1,age=15就会进入老年代 

     对象动态年龄判断机制

    老年代空间分配担保机制

    方法区(元数据区):虚拟机加载的类信息,常量,静态变量

    直接内存:非jvm堆外内存对的堆外内存NIO会直接操作,读写效率高

    java虚拟机如何判断对象存活:

    引用计数法:A引用B就会给A的引用计数器加1,断开则减1,当对象引用计数器为0则判定这个对象为垃圾GC需要回收,但是A引用B,B又引用A则导致对象一直存活

    可达性分析法:从GCroot根开始直接找到对象,或间接找到对象称为可达也是存活对象,反之不可达

    那些方法可以成为GCroot:虚拟机栈引用对象,本地方法栈引用对象,静态属性引用对象,常量引用对象、

    对象的引用分类:1.强引用,普遍存在的对象引用

                                 2.软引用,内存溢出前回收

                                 3.弱引用,下次垃圾回收

                                 4.虚引用,形同虚设

    四种垃圾回收算法:

    1,标记清除算法:首先标记出所有需要回收的对象,标记完成后统一回收,这样的回收方式会产生大量不连续的内存碎片

    2,标记整理算法:为了解决标记清除算法所产生大量不连续的内存碎片,在垃圾回收之后会集中整理内存区域,得到未使用的区域,虽然内存碎片被集中整理了但是这种效率比较低,那么新的解决方案又来了。

    3,复制算法:复制算法就是把内存划分为大小相同的两块(一分为二)每次只留其中一块,当这一块内存用完了就将还存活的对象复制到另外一块上,然后再把这块内存一次性的清理掉,

    好处:效率高,没碎片适合朝生夕死的内存区域,

    缺点:内存利用率低,且不适合在对象存活率高的老年代使用!

    4.分代回收算法:JVM中使用的是分代回收算法,对于新生代采用复制算法,并且为了最大化的利用空间将内存划分为8:1:1 对于老年代或者元数据区因为对象存活率比较高,采用标记清理/整理算法

    垃圾回收器:

    垃圾收集器是内存回收的具体实现,

    Serial收集器:单线程收集器垃圾收集时必须暂停其他线程的所有工作,直到收集结束为止  优点:简单高效

    ParNew收集器:ParNew是Serial的多线程版本,新生代采用复制算法,老年代采用标记整理算法,它可以和并发收集器一起配合工作

    CMS收集器优缺点:优点:并发收集,低停顿,缺点:对CPU资源敏感,无法处理浮动垃圾,它使用标记清理算法会产生大量的空间碎片,执行的不确定性,会存在上次垃圾还没回收完,垃圾回收又被触发的情况

  • 相关阅读:
    基于jeecgboot-vue3的Flowable流程-自定义业务表单处理(一)支持同一个业务多个关联流程的选择支持
    PaddleOCR系列-训练模型并部署android手机
    万字深剖 Linux I/O 原理
    【进阶C语言】进阶指针--学会所有指针类型
    9.30小任务
    环境叙事总结(待更)
    微信小程序:两层循环的练习,两层循环显示循环图片大图(大图显示、多层循环)
    DSPE-PEG-GE11,GE11-PEG-DSPE,磷脂-聚乙二醇-靶向多肽GE11
    第19节-PhotoShop基础课程-历史记录画笔工具
    Centos7下zabbix安装与部署,设置中文(保姆级图文)【网络工程】
  • 原文地址:https://blog.csdn.net/weixin_51014035/article/details/125549724