狂神说jvm笔记
Native:凡是帶了native關(guān)鍵字的,說明java的作用范圍達(dá)不到了,會去調(diào)用底層c語言的庫!進(jìn)入本地方法棧,調(diào)用本地方法接口(JNI)
JNI:擴(kuò)展java的使用,融合不同的編程語言為java所用
Java在內(nèi)存區(qū)域中開辟了一塊u標(biāo)記區(qū)域,native method stack,登記native方法,在最終執(zhí)行的時(shí)候調(diào)用本地方法庫
Pc寄存器:
程序計(jì)數(shù)器:每個(gè)線程都有一個(gè)程序計(jì)數(shù)器,是線程私有的,就是一個(gè)指針,指向方法區(qū)中的方法字節(jié)碼(用來存儲下一條要執(zhí)行指令的地址),在執(zhí)行引擎讀取下一條執(zhí)行。主要在多線程切換下,cpu能根據(jù)計(jì)數(shù)器找到原來的位置
方法區(qū):被所有線程共享,所有定義的方法的信息都在此。靜態(tài)變量,常量,類信息(構(gòu)造方法,接口定義),運(yùn)行時(shí)常亮池存在方法區(qū),實(shí)例變量存在堆內(nèi)存中 static,final,Class,常量池.
方法存在方法區(qū)里,執(zhí)行方法的時(shí)候入棧,方法執(zhí)行完畢了出棧
棧:生命周期和線程同步,主管方法的執(zhí)行,線程結(jié)束,棧內(nèi)存也就釋放了 。
棧里面存八大基本數(shù)據(jù)類型,對象的引用,實(shí)例的方法。
棧幀就是一個(gè)函數(shù)調(diào)用過程中為其開辟棧空間來在此次調(diào)用中來存儲參數(shù),變量的,返回地址我們稱這塊空間叫做棧幀。
Jdk1.8以前堆分為新生區(qū),老年區(qū),永久區(qū)(當(dāng)gc回收達(dá)到一定次數(shù),就會往下走)
Jdk1.8后把永久區(qū)換成了元空間,從堆中移到了內(nèi)存中
新對象,類實(shí)例首先創(chuàng)建都是在eden區(qū)
養(yǎng)老區(qū)滿了觸發(fā)重gc,重gc(full gc)還活下來了就進(jìn)入永久區(qū)(元空間)
Jdk 1.6 永久代,常量池在方法區(qū)中
Jdk1.7 永久代,但是滿滿的退化了,去永久代,字符常量池在堆中,運(yùn)行時(shí)常量池在方法區(qū)
Jdk1.8 無永久代,常量池在元空間
元空間不回收,關(guān)閉jvm時(shí)回收
方法區(qū)只是一個(gè)概念上的定義,實(shí)際實(shí)現(xiàn)還是元空間
Jvm分配的最大使用內(nèi)存是電腦容量的1/4
初始化內(nèi)存為電腦1/64
Cg算法:
引用計(jì)數(shù)法
Cg之復(fù)制算法
保證to區(qū)永遠(yuǎn)是空的來接收eden區(qū)來的對象,接收后把from的對象cp到to區(qū),to區(qū)變?yōu)閒rom區(qū),from區(qū)變?yōu)閠o區(qū)
Cg之標(biāo)記清除壓縮算法:
總結(jié)
- 上一篇: ar9331修改flash大小和df、c
- 下一篇: 请教双WAN口路由器设置