c/c++程序并不知道什么时候内存应该被释放,如果释放了不该释放的内存,将导致系统崩溃;如果无用的内存得不到回收,那么引起系统运行速度下降,甚至导致程序瘫痪,内存泄露
垃圾回收是一件很麻烦的事情,c/c++程序员必须进行显示回收,显示进行垃圾回收的缺点
(1)程序忘记及时回收无用内存,从而导致内存泄漏,降低系统性能
(2)程序错误的回收程序核心类库的内存,从而导致系统崩溃
(3)垃圾回收由jvm后台线程执行,潜在影响系统开销,程序性能(因为jvm需要跟踪所有对象,记录对象状态,需花费处理机时间)
java不需要程序元直接控制内存回收,java的内存分配和回收都是由jre在后台自动进行的(grabage collection),jvm会为新建立的对象分配堆内存,回收的是堆内存嗯~ o(* ̄▽ ̄*)o
通常jre都是提供一个后台线程来检测和控制,这个后台线程是一个程序,由垃圾回收算法写成,一般都是在cpu空闲或内存不足时自动进行垃圾回收,但是垃圾回收后台线程执行的实际是不固定的! !!释放不再被引用的对象,清楚内存记录碎片,因此android手机应用会卡的原因、
垃圾回收回收的是无用对象的内存空间,也就是对象占用的堆内存,垃圾回收只能回收内存资源,对其他物理资源无能为力
垃圾回收发生时机的不可预知性(cpu空闲/内存耗尽/),程序员即使调用gc()方法也只是建议系统进行垃圾回收,不能精确控制垃圾回收的执行