本文已参与「新人创作礼」活动,一起开启掘金创作之路。
内存泄漏是指不再被使用的对象或者变量一直被占据在内存中。理论上来说, Java是有GC垃圾回收机制
的,也就是说,不再被使用的对象,会被GC自动回收 掉,自动从内存中清除。
但是, 即使这样,Java也还是存在着内存泄漏的情况,java导致内存泄露的原因 很明确:长生命周期的
对象持有短生命周期对象的引用就很可能发生内存泄露, 尽管短生命周期对象已经不再需要,但是因为
长生命周期对象持有它的引用而导 致不能被回收,这就是java中内存泄露的发生场景。
内存溢出异常
内存泄漏是指不再被使用的对象或者变量一直被占据在内存中。理论上来说, Java是有GC垃圾回收机制
的,也就是说,不再被使用的对象,会被GC自动回收 掉,自动从内存中清除。
但是,即使这样,Java也还是存在着内存泄漏的情况,java导致内存泄露的原因 很明确:长生命周期的
对象持有短生命周期对象的引用就很可能发生内存泄露, 尽管短生命周期对象已经不再需要,但是因为
长生命周期对象持有它的引用而导 致不能被回收,这就是java中内存泄露的发生场景。
垃圾收集器
在java中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行 执行。在JVM中,有一
个垃圾回收线程,它是低优先级的,在正常情况下是不会 执行的,只有在虚拟机空闲或者当前堆内存不
足时,才会触发执行,扫面那些没 有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。
GC是什么?
GC 是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问 题的地方,忘记或者错误
的内存回收会导致程序或系统的不稳定甚至崩溃,Java 提供的 GC 功能可以自动监测 对象是否超过作用域从而
达到自动回收内存的目的,Java 语言没有提供释放已分配内存的显示操作方法。
由于有这个垃圾回收机制,java中的对象不再有“作用域”的概念,只有引用的 对象才有“作用域”。
垃圾回收机制有效的防止了内存泄露,可以有效的使用可使用的内存。
垃圾回收器通常作为一个单独的低级别的线程运行,在不可预知的情况下对内存 堆中已经死亡的或很长
时间没有用过的对象进行清除和回收。
程序员不能实时的对某个对象或所有对象调用垃圾回收器进行垃圾回收。 垃圾回收有分代复制垃圾回
收、标记垃圾回收、增量垃圾回收。
垃圾回收器的基本原理是什么?垃圾回收器可以马上回收 内存吗?有什么办法主动通知虚拟机进行垃圾回收?
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及 使用情况。
通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式 确定哪些对象是"可达
的",哪些对象是"不可达的"。当GC确定一些对象为"不可 达"时,GC就有责任回收这些内存空间。
可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不 保证GC一定会执行。