java和net共同点,Java和.NET中的垃圾回收机制比较
相同點:
都采用了分代的機制。
都支持并發GC。
都沒有采用引用計數方式,而是采用了追蹤技術。
.NET中,可以通過代碼GC.Collect() 強制要求CLR進行垃圾回收(由于垃圾回收是異步的,CLR有一個專用的線程負責垃圾回收,因此,即使調用GC.Collect,也并不是實時的調用了Finalize,因此要保證確實調用了析構方法,可以使用語句GC.WaitForPendingFinalizers()來確保析構方法真的被運行了,參考http://cnn237111.blog.51cto.com/2359144/1343004)
Java中也可以通過System.gc() 強制要求進行垃圾回收。(事實上也僅僅是建議JVM執行垃圾回收,JVM并不一定立即做回收行為。)
不同點:
CLR預留了一塊大空間,稱作large object heap (LOH),目的是當有大對象(超過85000字節的)需要分配空間時,就可以放在這里。
這塊地方和分代機制的不同之處在于,這個地方只有當發生full GC的時候,才會回收,而且這塊地方不會被壓縮。
Java中可以通過配置參數,使得大對象(大于設定的閾值)直接進入老年代(避免在年輕代上做大量的復制操作)。
.NET回收的內存,直接給返還給操作系統。
JVM在的垃圾回收機制,提供了大量的可配置參數。
而CLR的垃圾回收機制幾乎沒什么可以配置的(僅有的配置似乎就是工作站模式(Workstation)和服務器模式(Server))。
都支持并發GC。JAVA是在老年代上支持并發GC,采用的CMS收集器。
.NET的并發GC只在第2代上,并且在工作站模式下才會有。
Java分成年輕代,老年代,永久代。
.NET分第0代,第1代,第2代。
.NET中采用了標記,壓縮的方式。
JAVA由于收集器很多,因此不限于一種算法。年輕代老年代方式
Serial收集器復制算法單線程,stop the world
SerialOld收集器標記整理算法單線程,stop the world
ParNew收集器復制算法標記整理算法多線程,stop the world
Parallel Scavenge收集器復制算法多線程,stop the world
CMS收集器標記清除單線程
G1收集器復制標記整理
Java垃圾回收的幾篇文章
.NET垃圾回收的幾篇文章
總結
以上是生活随笔為你收集整理的java和net共同点,Java和.NET中的垃圾回收机制比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: exception in thread
- 下一篇: JAVA模拟肯德基点餐系统源码,肯德基辞