写在前面
今天谈谈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也开了一个餐厅:它规定,客人吃完饭就走,不准收拾,我雇的有一个服务员,就做这个的,他看到客人走了,就会收拾一下,但是你叫他,他也不一定来,因为他可能在睡觉,也可能在玩王者荣耀,也可能在收拾别的,对吧,但是有一点可以确定的是,他最终都会收拾号的,那么这个时间不管多长,都不会出现没有桌子用的情况,是不是。
希望看完以后可以帮助您理解加深一下垃圾回收机制的情况。
谢谢阅读