Java基础(八)-垃圾回收机制、类加载器

本文详细介绍了Java垃圾回收机制的工作原理,包括两种主要的垃圾回收算法:引用计数法和引用可达法。此外还介绍了三种垃圾回收清除算法:标记清除、复制清除及标记整理,并解释了新生代和老生代的划分及其回收策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

垃圾回收机制

针对堆内存而言的。当调用构造方法的时候,创建好一个对象,因为Java中对每种数据类型都明确的给定了大小,在创建对象的时候,会自动计算大小分配内存,所以在内存的回收和释放的时候也是由Java自己管理。

java垃圾回收判断是否回收的算法,有两种,一个是引用计数法,一个是引用可达法。 
引用计数法,每个对象有一个专门的空间维护一个引用计数器,当该对象被引用时,计数器加一,引用消失时则计数器减一,当该对象引用数为0时则回收该对象。这个算法有一个好处就是可以及时回收废弃的对象,而不用等到空间占满后在统一回收,但是其无法解决循环引用的情况。 
而引用可达性分析法,则是选取一个root节点,通过该节点是否能够遍历到某个对象的方法来判断该对象是否被回收。root节点的选择通常是静态变量,native变量,常量等。 
垃圾回收清除算法有三种 
1.标记清除 
也就是每次GC,会先扫描内存区标记存活对象,而后释放未被标记的对象空间。这种算法在工作时需要停止工作线程,再进行标记清除,同时会产生内存碎片,而且jvm需要维护一个内存空间表,用于分配内存空间。 
2.复制清除 
将内存区分为两个相同大小的区域,先在A上分配对象,当其分配满后,进行标记操作,而后将标记对象按照内存顺序复制到B区域中,最后将A区域全部清除。这种方式可以有效避免内存碎片的问题,但是复制操作会产生额外的耗时,当存活对象多时并不适合使用该算法,因为复制所产生的耗时会很长。因此这种算法适合对象存活时间短的情况。同时会造成一定的内存浪费。 
3.标记整理 

这种算法就是在标记清除的基础上为了避免内存碎片的产生而优化产生的算法。总的过程分为两步,分别是标记和整理。

新生代由于其对象存活时间短,且需要经常gc,因此采用效率较高的复制算法。一个对象刚创建的时候是放到新生代的伊甸园区,如果这个对象在栈内存中没有引用,那么会在扫描的时候被解析,释放内存;如果经过一次扫描依然没有释放内存,会将其移入新生代的幸存区,幸存区的扫描频率略低于伊甸园区;如果在幸存区经过多次扫描依然没有被释放,会被放入老生代,老生代的扫描频率远远低于新生代的。老生代中的对象一旦被回收,可能会造成程序的卡顿或者崩溃。

老年代和永久代因为其存活对象时间长,因此使用标记清除或标记整理算法。

发生在新生代的回收称之为minor GCGarbage Collect---初代回收

发生在老生代的回收称之为full GC---完全回收

类加载器

启动类加载器/引导类加载器

扩展类加载器

系统类加载器

***双亲委派机制

每个编写的”.java”拓展名类文件都存储着需要执行的程序逻辑,这些”.java”文件经过Java编译器编译成拓展名为”.class”的文件,”.class”文件中保存着Java代码经转换后的虚拟机指令,当需要使用某个类时,虚拟机将会加载它的”.class”文件,并创建对应的class对象,将class文件加载到虚拟机的内存,这个过程称为类加载。

推荐:去网上看吧····作为一个刚接触java的小菜鸟 这个属实有点难度。推荐看这两个

https://blog.youkuaiyun.com/sunxianghuang/article/details/52093189

https://blog.youkuaiyun.com/javazejian/article/details/73413292

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值