有很多有名的Jvm,但我们最常用到的就是Oracle收购sun公司的HotSpot。HotSpot中内存被分为3个代:年轻代(young generation),年老代(old generation),持久代(permanent generation)。对象最初在年轻代,年老代代理存放着是经过几次年轻代收集后仍然 live 的对象和一些可能直接被分配到年老代的大对象。持久代存放的是 JVM 认为可
垃圾回收是做什么的?1 分配内存 2 保证引用的对象留在内存中,不被回收3 回收那些执行中的代码无法引用到的内存(ps:两个对象的相互引用,但没有任何代码引用他们,这时这两个对象应该被回收)基本术语:对象被引用叫做活着(live),不在被引用的对象(dead),术语叫做垃圾(garbage)。发现和释放(叫做回收(reclaiming))这些垃圾占用的空间叫做垃圾收集。通常整个heap
直接管理内存的话开发的很多时间都用在了管理内存上了直接管理内存会导致的内存的错误:1 悬挂引用,有一个内存空间已经被回收了,但是还有对象引用,这样这个内存空间被重新分配的话,这个对象可能会导致未知的访问。2 内存泄露,内存被分配出去后没有对象引用,无法回收。比如,链表,让链表的头指针指向了别的内存地址,后面的链表中的对象就没有对象引用了,这样会造内存持续消耗。垃圾回收机制能有效的避免这两种情况,1
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号