Java中的内存管理概念

悬摆指针 (dangling references ):程序猿可能释放一个对象占用的内存空间,即使这个对象还在被其他对象引用。如果一个对象引用另一个被不小心释放的对象,这个释放对象的内存空间可能被重新分配新的对象占用。

内存泄露 (menory leaks ):泄露经常是对象占用的内存空间不再被任何其他对象引用,但是这个对象没有被回收。例如,如果你打算回收一个列表的空间,但是不小心只释放了列表的第一个元素,这个列表的其他元素将一直持有内存空间,因为这个列表引用已经不存在了,其他元素占用的空间得不到释放,造成了泄露。久而久之,类似的泄露累计,将会填满内存空间,导致没有足够的内存分配给其他的新对象。

一个垃圾回收器的职责:
    分配内存
    确保被引用的对象留在内存中
    释放那些不再被任何其他对象引用的对象占用的内存空间

垃圾回收器特点:
    垃圾收集器应该是安全并且全面的。存活对象不能被错误的回收,并且在一次垃圾回收周期中,垃圾对象应该被全部清除,不能有残留。

    垃圾回收器还应该是高效的,不能给正在运行的程序造成太大的停顿(STW ——stop the word )。在一个计算密集的系统中,在耗时,空间,频率 通常会有一个权衡。如果堆的空间很小,垃圾收集很快就会完成,但是堆很快就会被填满,这时候垃圾收集器活动就会更频繁。相反,对于一个较大的堆,填满这个堆需要相对较长时间,但是收集器执行一次垃圾回收耗时也相对较长。

    垃圾收集器的另一个特点是减少 碎片空间。当回收对象占用的内存空间的时候,内存随便会遍布整个堆,新的对象分配没有足够大的连续空间导致分配失败。为了解决这个问题,在回收对象时,会对内存进行 整理 压缩

    可扩展对垃圾收集器也很重要。垃圾收收集器不应该在单线程和多线程执行效率是一样的,也就是说,多cpu不应该成为垃圾收集器的瓶颈。

你可能感兴趣的:(java)