finalize() 是对应object的, 当garbage collector (GC) 决定这个object不再被使用,而要进行清理的时候,会调用finalize(), 默认的finalize就相当于C++的destructor. 你可以override finalize()来自己定义清理过程(例如转到其它的thread而不是彻底清理掉)或者增加一些额外的清理(比方说同时手动清理GC会认为要继续被使用但是实际可以被清理掉的object)
System.gc() 和 Runtime.gc() 功能上是完全一样的, 会手动要求安排GC运行(不是强制立刻执行), 唯一的区别就是System.gc()写起来比Runtime.getRuntime().gc()简单点. 其实基本没什么机会用得到这个命令, 因为这个命令只是建议JVM安排GC运行, 还有可能完全被拒绝. GC本身是会周期性的自动运行的,由JVM决定运行的时机,而且现在的版本有多种更智能的模式可以选择,还会根据运行的机器自动去做选择,就算真的有性能上的需求,也应该去对GC的运行机制进行微调,而不是通过使用这个命令来实现性能的优化.