5.劍指JavaOffer-JVM

Java如何跨平臺?


image.png

JVM如何加載.class


image.png

談談反射:反射機制是在運行狀態(tài)中迟郎,對于任意一個類酒朵,都能夠知道這個類的所有屬性和方法露该;對于任意一個對象,都能夠調(diào)用它的任意方法和屬性乍惊;這種動態(tài)獲取信息以及動態(tài)調(diào)用對象方法的功能叫做java反射機制杜秸。
反射例子:


image.png
image.png

類加載classloader:


image.png

雙親委派模型:


雙親委派

實現(xiàn)自定義類的ClassLoader,重寫findClass 實現(xiàn)defineClass:

    private String path;
    private String classLoaderName;

    public MyClassLoader(String path, String classLoaderName) {
        this.path = path;
        this.classLoaderName = classLoaderName;
    }

    //用于尋找類文件
    @Override
    public Class findClass(String name) {
        byte[] b = loadClassData(name);
        return defineClass(name, b, 0, b.length);
    }

    //用于加載類文件
    private byte[] loadClassData(String name) {
        name = path + name + ".class";
        InputStream in = null;
        ByteArrayOutputStream out = null;
        try {
            in = new FileInputStream(new File(name));
            out = new ByteArrayOutputStream();
            int i = 0;
            while ((i = in.read()) != -1) {
                out.write(i);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                out.close();
                in.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return out.toByteArray();
    }
}

測試:

public class ClassLoaderChecker {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
        MyClassLoader m = new MyClassLoader("/Users/baidu/Desktop/", "myClassLoader");
        Class c = m.loadClass("Wali");
        System.out.println(c.getClassLoader());
        System.out.println(c.getClassLoader().getParent());
        System.out.println(c.getClassLoader().getParent().getParent());
        System.out.println(c.getClassLoader().getParent().getParent().getParent());
        c.newInstance();
    }
}

類的加載方式:
隱式加載:new
顯示加載:loadClass和forName


image.png

Class.forName得到的class是已經(jīng)初始化完成的
數(shù)據(jù)庫驅(qū)動加載就是使用Class.froName(“com.mysql.jdbc.Driver”),有靜態(tài)代碼塊润绎,一加載的時候就會調(diào)用撬碟。

Classloder.loaderClass得到的class是還沒有鏈接的

內(nèi)存模型

程序計數(shù)器:



線程獨立的诞挨,只為Java方法計數(shù),依賴計數(shù)器的值取字節(jié)碼指令

虛擬機棧和本地方法棧(Native那些):
本地方法棧和虛擬機棧所發(fā)揮的作用是很相似的呢蛤,它們之間的區(qū)別不過是 虛擬機棧為虛擬機執(zhí)行Java方法(字節(jié)碼)服務惶傻,而本地方法棧則為虛擬機使用到的Native方法服務
Java棧也稱作虛擬機棧(Java Vitual Machine Stack),也是常說的棧其障。Java棧是Java方法執(zhí)行的內(nèi)存模型银室。Java棧中存放的是一個個的棧幀,每個棧幀對應一個被調(diào)用的方法静秆,在棧幀中包括局部變量表(Local Variables)粮揉、操作數(shù)棧(Operand Stack)、指向當前方法所屬的類的運行時常量池(運行時常量池的概念在方法區(qū)部分會談到)的引用(Reference to runtime constant pool)抚笔、方法返回地址(Return Address)和一些額外的附加信息扶认。棧也是線程私有的。


image.png
image.png

七個棧幀殊橙,load入棧辐宾,store出棧。
當遞歸過深的時候就會出發(fā)stackoverflowerr異常膨蛮。

image.png

元空間MetaSpace 永久代PermGen

參數(shù)調(diào)優(yōu)

虛擬機棧會擴容 至Xmx 一般把Xms和Xmx設(shè)置為一樣叠纹,當發(fā)生擴容時,會發(fā)生內(nèi)存抖動敞葛。

堆和棧的區(qū)別
image.png
false和false

false和true

回來再看看

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末誉察,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惹谐,更是在濱河造成了極大的恐慌持偏,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氨肌,死亡現(xiàn)場離奇詭異鸿秆,居然都是意外死亡,警方通過查閱死者的電腦和手機怎囚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門卿叽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人恳守,你說我怎么就攤上這事考婴。” “怎么了井誉?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵蕉扮,是天一觀的道長。 經(jīng)常有香客問我颗圣,道長喳钟,這世上最難降的妖魔是什么屁使? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮奔则,結(jié)果婚禮上蛮寂,老公的妹妹穿的比我還像新娘。我一直安慰自己易茬,他們只是感情好酬蹋,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抽莱,像睡著了一般范抓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上食铐,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天匕垫,我揣著相機與錄音,去河邊找鬼虐呻。 笑死象泵,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的斟叼。 我是一名探鬼主播偶惠,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼朗涩!你這毒婦竟也來了忽孽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤谢床,失蹤者是張志新(化名)和其女友劉穎扒腕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萤悴,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年皆的,在試婚紗的時候發(fā)現(xiàn)自己被綠了覆履。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡费薄,死狀恐怖硝全,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情楞抡,我是刑警寧澤伟众,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站召廷,受9級特大地震影響凳厢,放射性物質(zhì)發(fā)生泄漏账胧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一先紫、第九天 我趴在偏房一處隱蔽的房頂上張望治泥。 院中可真熱鬧,春花似錦遮精、人聲如沸居夹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽准脂。三九已至,卻和暖如春檬洞,著一層夾襖步出監(jiān)牢的瞬間狸膏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工疮胖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留环戈,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓院塞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親性昭。 傳聞我的和親對象是個殘疾皇子拦止,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容