前提準備
- JVM
- GC垃圾回收
- JVM虛擬機監(jiān)控調優(yōu)和故障處理
- Tomcat和微服務優(yōu)化
1香浩、前提復習
1.1镀迂、JVM內存結構
1.1.1钓辆、
圖中灰色部分為線程私有缕溉,幾乎不存在垃圾回收
橙色部分線程共有考传,垃圾回收主要發(fā)生場所
- 類裝載器子系統(tǒng)是什么?裝載什么证鸥?有哪幾種裝載器
根啟動類裝載器:BootStrap
擴展類加載器:Extension
應用類加載器:AppClassloader
可以繼承Classloader僚楞,自定義類加載器 - 雙親委派機制
- 類加載過程中的沙箱安全機制
1.1.2、java8以后的JVM
伊甸園區(qū)-幸存者1區(qū)-幸存者2區(qū)-養(yǎng)老區(qū)-(7以前是永久代)元空間
1.2枉层、GC作用域
圖中灰色部分為線程私有泉褐,幾乎不存在垃圾回收
橙色部分線程共有,垃圾回收主要發(fā)生場所
1.3鸟蜡、常見垃圾回收算法
- 引用計數
有對象引用+1膜赃,沒對象引用-1,到0為止說明需要回收揉忘。
缺點:天生的缺陷跳座,較難實現循環(huán)引用的問題。
每次對對象復制時均需要維護引用計數器泣矛,且計數器本身也有一定的消耗疲眷。
所以JVM通常不采用這種方式。 - 復制————用于年輕代較多
在年輕代使用
復制之后您朽,有交換狂丝,誰空誰是To。
幸存者0區(qū)哗总,幸存者1區(qū)几颜,在GC之后會互換,一個From讯屈,一個To蛋哭。
優(yōu)點:沒有產生內存碎片,因為是整體復制涮母。
缺點:有點浪費空間具壮。尤其是大對象准颓,復制起來有些耗時。
MinorGC
-
標記清除(MarkSweap)————用于老年代較多
先標記再清除棺妓。首先標記處要回收的對象攘已,再統(tǒng)一回收這些對象。
優(yōu)點:節(jié)約了空間
缺點:產生了內存碎片
- 標記(清除)整理————用于老年代較多
- 標記(Mark):與標記清除一樣
-
壓縮(Compact):再次掃描怜跑,并往一端滑動存活對象样勃。
優(yōu)點:既不浪費空間,也不會產生碎片
缺點:滑動存活對象會耗時間性芬。
沒有完美算法峡眶,具體哪一代用什么算法,分代收集