谈谈Java的垃圾回收机制

本文深入探讨Java的垃圾回收机制(GC),解释了程序中未使用的对象如何被定义为垃圾,并详细介绍了Java与C/C++在处理垃圾回收上的不同。文章还讲解了如何使用System.gc()方法提醒JVM进行垃圾回收,以及finalize()方法的使用场景。

写在前面

今天谈谈Java的一大神器-回收机制(Carbage Collection)简称GC,面试的时候基本上面试官都好像很喜欢问这个问题,我是不明白有什么好问的,我们简单的说说。

首先说一下什么叫做程序的垃圾

所谓的垃圾呢就是没有用到的对象,举个例子:

package studyBymyself;

public class Csdn_student {
	//静态数据
		 String name;
		 int age;
		 int id;
		 String gender;
		 int weight;
		//动态的行为
		public void study() {
			System.out.println(name+"在学习");
		}
		public void sayhello(String sname) {
			System.out.println(name+"向"+sname+"说你好"); 
		}
}

我们写好一段代码以后呢,程序发现你声明的好几个变量压根从来就没用过,这个时候这些没有被使用过的变量就叫做垃圾。

下面说一下回收机制: 

GC呢最早是C语言里面的一种机制,后来出来的C++也有这一机制,但是他们和Java 的运作方法是不一样的,首先C和C++是程序员自己操作的回收,他不用的代码他自己处理就行了,Java不是的,甚至Java更过分的是不让我们操作这一机制,什么意思呢?Java会自动的不定期的处理这些没用的对象代码。那么有人说了,那我知道这些代码没用,我能不能让Java过来帮我处理一下呢?答案是不可以,你最多可以提醒他说:“哎,JDK,帮我处理一下这段没用的代码”,但是他是不是回应你就不一定了。

怎么提醒呢?

我们可以通过

System.gc()

提醒他处理一下。但是他理不理你就不确定了!

所以要理解Java的回收机制明白三点即可:

第一:我们是无权调用回收机制的

第二:我们可以通过system.gc()来提醒他处理,但是Java不保证立即回应你。

第三:我们可以使用filalize()方法,用来释放对象或者资源的,但是一般尽量少用。

最后说一下如果没有回收机制会怎么样!

有人说,没有回收机制不是一样没事的吗?其实不是的,我们知道C语言是自己处理程序垃圾的,假如说有五个人同时写一套C语言代码,代码的可用性是90%,那么通过概率学我们可以计算一下五个程序员无效的概率是多大0.9*0.9*0.9*0.9*0.9~0.6也就是大约是40%的几率是无效的,这个是很高了,那么如果程序员不处理,导致的结果是内存空间不足,持续写下去内存溢出等各种情况就出现了,所以这个是很重要的。

最后举个例子说明一下Java和C的回收机制的不同:

假如有一个C语言开的餐厅:它规定,客人吃完饭自己要把桌子收拾好,盘子刷干净再走,那么有些客人素质很高,做到了,但是一些人素质没有那么高,没收拾,时间一长,一共20张桌子,来的客人都坐收拾过的,没收拾的没人坐,过一段时间就发现了没有桌子可以使用了。

Java也开了一个餐厅:它规定,客人吃完饭就走,不准收拾,我雇的有一个服务员,就做这个的,他看到客人走了,就会收拾一下,但是你叫他,他也不一定来,因为他可能在睡觉,也可能在玩王者荣耀,也可能在收拾别的,对吧,但是有一点可以确定的是,他最终都会收拾号的,那么这个时间不管多长,都不会出现没有桌子用的情况,是不是。

希望看完以后可以帮助您理解加深一下垃圾回收机制的情况。

谢谢阅读

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

麦秸垛的守望者

阅读就是对我最大的支持,感谢

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

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

打赏作者

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

抵扣说明:

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

余额充值