1、问题引入:什么是GC?
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。
2、既然有GC,会出现内存泄漏么?举例?
-
java中会存在内存泄漏吗,请简单描述。 - 会。如:int i,i2; return (i-i2); //when i为足够大的正数,i2为足够大的负数。结果会造成溢位,导致错误。
3、再举个例子
- //JAVA是不是没有内存泄漏问题?看下面的代码片段,并指出这些代码隐藏的问题。(10)
- Object[] elements = new Object[10];
- int size;
- ...
- public Object pop() {
- if (size == 0)
- return null;
- Object o = elements[--size];
- return o;
- }
4、如果在一个对象被回收之前想做点什么该怎么办呢?
finalize()方法定义
protected void finalize() throws Throwable