Java的GC以及内存泄漏
作为一个Java程序员,因为有了GC,不知道帮我们省了多少麻烦。
GC也就是Garbage Collection(垃圾回收机制),当Java虚拟机发现内存资源紧张的时候,就会自动去清理那些无用的对象(没有被引用到的对象)所占的内存空间。在堆中创建对象,GC会去监控每个对象的引用,申请空间等事件,Java会用有向图的方式进行管理,以下两种方式会导致回收:
(1)当给对象赋值为null,之后再也没有调用过它;
(2)给对象赋予了新值,重新分配了内存空间;此时旧的对象以及没有用了。
内存泄漏:也就是说内存里面被没有用的对象持续占用,造成了内存空间的浪费。
根本的原因:长生命周期的对象被短生命周期的对象引用,从而导致了短生命周期的对象不再需要了,但是长生命周期的对象任然具有它的引用,所以不能被回收。
典型的两种情况:
(1)在堆中分配的内存,没有将其释放掉的时候,就已经删除了访问该内存的方式;这样的情况,这样的情况可以通过GC来将其回收而解决掉。
(2)还有就是对象已经不需要了,但是该对象以及访问它的方式还存在,这样就很有可能导致内存的泄漏。