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