GC通常的概念和算法
GC就是內存中、不會再使用的對象,把他清理掉
垃圾回收算法:引用計數法、標記壓縮法、復制算法、分代、分區的思想。
引用計數法:對象被引用加1,引用失效減一。 碰到循環引用時會有嚴重問題
標記清楚法:分標記和清楚兩個階段來進行,有空間碎片的問題,垃圾比較多內存使用率低。
復用算法:內存空間分兩塊,每次使用一塊 在垃圾回收時,將正在使用的內存中的存留對象復制到未被使用的內存塊中去,之后清楚之前正在使用的內存塊兒中所有的對象,反復交換兩個內存角色,完成垃圾回收。(新生代from/to)
標記壓縮法:被標記對象壓縮到一端?然后將被標記一端整體清空。(老年代)
新生代老年代使用不同的算法:
新生代太頻繁,所以整體轉換,老年代進行清空一般清空對象很少很少,內存最小化一些。
分代算法:根據內存特點分代。減少老年代的GC因為老年代回收率低,耗時長較長所以減少老年代。
分區算法:整個內存分解為N個獨立的小空間,每個小空間都可以獨立使用。
GC停頓,GC介入到系統導致系統停頓。停頓目的是終止所有應用線程,只有這時不會產生新的垃圾。
-XX:MaxTenuringThreshold 默認情況下為15 進入老年代
-XX:PretenureSizeThreshold 當對象大小大于一個范圍進入老年代
新建對象太大無法進入Eden區無法裝入是也會進入老年代
TLAB區域是線程本地分配緩存,
? ? ? ?線程啟動會分配一塊獨立內存空間,為TLAB 提高線程性能 來避免多線程沖突,一般tlab不會特別大,當打對象無法在TLAB分配時,則會分配到堆上。
-XX:+UseTLAB 使用TLAB
-XX:+TBLABSize 設置TLAB大小
-XX:TLABRefillWasteFraction 設置TLAB默認為64,超過64分之一進入堆中
-XX:PrintTLAB 打印TLAB
總結
以上是生活随笔為你收集整理的GC通常的概念和算法的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 双数据源其中一个数据源的dao文件报Bi
- 下一篇: Error querying datab
