jvm垃圾回收器(《深入理解java虚拟机》)
---恢復內容開始---
程序計數器、虛擬機棧、本地方法棧,這三個區域隨著線程生,隨著線程死。重復入棧出棧,還有基本確定 編譯后 各區域所需要的內存大小是確定的。所以這部分回收不需要過多考慮。
主要回收對象為堆、方法區。java動態原則,大多數對象都是運行期間才會被加載的,所以堆上的容量是動態(分配和回收)變化的。
1.堆上回收內存(回收已死對象)
怎么判斷已死?
每個類都有一個finalize()方法,,jvm判斷一個對象是否死亡,先根搜索算法篩一遍,標記出不可達對象,,并放在一個隊列中,由一個線程去逐個執行finalize()方法。若某個對象重寫了finalize()方法,并且在此方法中成功講自己連接出去了,,那就抹去標記,暫留狗命。若沒有重寫或沒有成功推出自己,則只有等死。
finalize()方法,在一次次回收中,,只會被系統調用一次。(?)
finalize()一般被用在對象快死了,,釋放被其占用的資源。但是 try finally? 好像也可以。
?
2.方法區回收
這部分是有回收的,廢棄的常量和 無用的類。
?
?
3.垃圾回算法
3.1標記回收
先標記再回收:可能產大量碎片,,沒有可以被分配的連續內存,效率也底。
3.2復制算法
兩塊一樣大的內存,,一塊用的差不多的了,,將上面活著的對象復制到另一塊上,,原來的清空。
?
?
3.3標記-整理算法
讓存活的對象自己想某個區域”靠近“,,然后回收這個區域端邊接意外的內存。
3.4分代收集算法
?
4.垃圾收集器
http://www.cnblogs.com/zuoxiaolong/p/jvm8.html
?
5.內存分配與回收策略
https://www.cnblogs.com/xiaoxi/p/6557473.html
?
轉載于:https://www.cnblogs.com/haerwang/p/10030718.html
總結
以上是生活随笔為你收集整理的jvm垃圾回收器(《深入理解java虚拟机》)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SSH如何使用
- 下一篇: 拉格朗日乘子法学习[转载]