Java自学之路-Java基础教程-49:Java的垃圾回收机制GC

Java是一种面向对象程序OOP的语言。Java类通常要实例化,也就是创建出这个类的对象,才能调用这个类的变量或方法。

 

创建Java对象,一般使用new关键字,这样new出来一个对象的过程,实际上就在计算机内存里占了一部分空间了。如果不断地new出新的对象,那内存会消耗很多,如果不及时处理,计算机的内存可能就要用完了,导致运行计算机其他程序都慢起来,如果创建的对象又包含很大的内容比如文件等,甚至可能导致死机。比如写一个死循环,一直让程序创建出新对象,再放入ArrayList中,这样很容易就把计算机搞得很慢而且处于死机状态。

 

Java程序运行中会有很多对象创建出来,如果编写程序的人不处理,那肯定会消耗计算机的资源。Java虚拟机引进了一种垃圾回收机制GC,即Garbage Collection,在虚拟机空闲时会自动发起垃圾回收器,由垃圾回收器去处理掉那些没再用到的对象或内存。但实际上虚拟机只是不定时地发起回收,虚拟机也提供了一个Runtime.getRuntime().gc()的方法可以让程序调用来发起回收,但到底什么时候回收,还是由虚拟机自己说了算。

Java的GC相对于C或C++语言来说是一种方便,因为在C或C++中需要人为地处理所有内存情况,不用的内存要及时释放。但是在Java程序中也不能完全依赖GC处理内存,如果一个对象或程序一直引用一个对象,这个对象就不会得到释放,GC就不起作用了,如果这个对象会随着程序的运行一直占用内存并不断扩展占用新的内存,那迟早会把内存消耗尽了,这就产生了所谓的内存泄露问题。内存泄露是Java中很重要的一点,不注意的话会使应用程序迸溃。所以及时释放内存还是很有必要的,不需要引用的对象可以把它设为null空值,比如list=null。

Java的内存空间分为年轻代,年老代,持久代。新创建的对象被放在年轻代内存区里。经过多次垃圾回收器发起回收后,一些对象还在被不断引用, 就会渐渐沉入年老代内存区。还有一些对象需要在程序中始终要用到,这样的对象通常被长时间地存放在持久代内存区。

GC有两种类型,一个是Minor GC,一个是Major GC。在年轻代的内存区,又分为两个区,即Eden区和Survivor区。新创建的对象首先在Eden区,然后可能发生小规模的垃圾回收Minor GC,还存活的对象沉入Survivor区。而Survivor区满了之后,还可能发生Minor GC,还存活的地象沉入年老代内存区。当年老代内存区也满了,就可能发生大规模垃圾回收Major GC,也叫Full GC。当发生Minor GC或Major GC时,程序会等待垃圾回收器回收完成,这就造成这个时间整个程序停下来,也叫stop the world现象,这也是为什么Java应用会有卡顿现象。为了减少卡顿或无响应的情况,程序的GC内存优化就显得重要了。

 

配套进阶****:

https://edu.csdn.net/combo/detail/938

 

Java中级SSH框架项目开发设计教程

Java自学之路-Java基础教程-49:Java的垃圾回收机制GC

Java自学之路-Java基础教程-49:Java的垃圾回收机制GC

 

 

具有OCR和ASR功能,可以识别图片和录音中文字,并有多国语言翻译功能,

可以作为便签或笔记,类似微博的图文应用