谈谈Java的垃圾回收机制

71 阅读3分钟

写在前面

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

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

谢谢阅读