深入拆解虛擬機器(七)JVM是如何實現反射的?
定義
允許正在執行的Java程式觀測,甚至修改程式的動態行為
應用場景
(1)Java整合開發環境(IDE)便運用了這一功能:每當我們敲入點號的時候,IDE就會根據點號前的內容,動態展示可以訪問的欄位或者方法
(2)各種可配置框架,為了保證框架的可擴充套件性,它們往往會藉助Java的反射機制,根據配置檔案來載入不同的類。舉例來說,Spring框架的依賴反轉,便是依賴反射機制
反射呼叫
(1)在預設情況下,方法的反射呼叫為委派實現,委派給本地實現進行方法呼叫。在呼叫超過15次之後,委派實現便會將委派物件切換至動態實現。這個動態實現的位元組碼是自動生成的,它將直接使用invoke指令來呼叫目標方法
(2)方法反射呼叫會帶來不少效能開銷,原因主要有三個:變長引數方法導致的Object陣列,基本型別的 自動裝箱、拆箱,還有最重要的是方法內聯
相關推薦
深入拆解虛擬機器(七)JVM是如何實現反射的?
定義 允許正在執行的Java程式觀測,甚至修改程式的動態行為 應用場景 (1)Java整合開發環境(IDE)便運用了這一功能:每當我們敲入點號的時候,IDE就會根據點號前的內容,動態展示可以訪問的欄位或者方法 (2)各種可配置框架,為了保證框架的可擴充套件性,它們往
深入拆解虛擬機器(四)JVM是如何執行方法呼叫的?(上)
過載與重寫 (1)Java程式裡,如果同一個類出現多個名字相同,並且引數型別相同的方法,那麼它無法通過編譯 (2)在正常情況下,如果我們想要在同一個類中定義名字相同的方法,那麼它們的引數型別必須不同。這些方法之間的關係,我們稱之為過載 (3)選取過載方法的三個階段:
深入拆解虛擬機器(六)JVM是如何處理異常的?
丟擲異常 (1)顯式拋異常的主體是應用程式,它指的是程式中使用’'throw "關鍵字,手動將異常例項丟擲 (2)隱式拋異常的主體是Java虛擬機器,它指的是Java虛擬機器在執行過程中,碰到無法繼續執行的異常狀態,自動丟擲異常 捕獲異常 (1)try程式碼塊:用來
深入拆解虛擬機器(五)JVM是如何執行方法呼叫的?(下)
虛方法呼叫 (1)Java中所有非私有例項方法呼叫都會被 編譯成invokevirtual指令,而介面方法呼叫會被編譯成invokevirtualface指令。這兩種指令,均屬於Java虛擬機器中的虛方法呼叫 (2)Java虛擬機器採用了一種用空間換時間的策略實現動態繫結。它為每個方
深入拆解虛擬機器(六)JVM是如何執行方法呼叫的?(下)
虛方法呼叫 (1)Java中所有非私有例項方法呼叫都會被 編譯成invokevirtual指令,而介面方法呼叫會被編譯成invokevirtualface指令。這兩種指令,均屬於Java虛擬機器中的虛方
深入拆解虛擬機器(九)垃圾回收(下)
堆記憶體劃分 Java虛擬機器將堆分為新生代和老年代,並且對不同代採用不同的垃圾回收演算法。其中,新生代分為Eden區和兩個大小一致的Survivor區,並且其中一個Survivor區是空的 Minor GC (1)在只針對新生代的Minor GC中,Eden區和非S空
深入拆解虛擬機器(三)Java虛擬機器是如何載入Java類的?
引用型別 (1)類、介面、陣列類、泛型引數,由於泛型引數在編譯過程中被擦除,因此Java虛擬機器實際上只有前三種。 (2)在類、介面和陣列類中,陣列類是由Java虛擬機器直接生成的,其他兩種則有對應的位元組流。 載入 (1)載入,是指查詢位元組流。Java虛擬機器需
深入拆解虛擬機器(二)Java的基本型別
Java基本型別 (1)boolean型別在Java虛擬機器中被對映為整數型別:"true"被對映為1,"false"被對映為0。Java中的邏輯運算以及條件跳轉,都是用整數相關的位元組碼來實現的 (2)除boolean型別外,Java還有另外7個基本型別。它們擁有不同的值域,但
深入拆解虛擬機器(一)Java程式碼是咋樣執行的
Java執行方式 序號 方式 1 開發工具中執行 2 雙擊Jar檔案執行 3 命令列中執行
深入拆解虛擬機器(八)垃圾回收(上)
引用計數法 (1)它的做法是為每個物件新增一個引用計數器,用來統計指向該物件的引用個數。一旦某個物件 的引用計數器為0,則說明該物件已經死亡,便可以被回收了。 (2)具體實現:如果有一個引用,被賦值為某一個物件,那麼該物件的引用計數器+1。如果指向某一個物件的引用,被賦值為其他值
深入拆解虛擬機器(十)Java語法糖與Java編譯器
泛型與型別擦除 (1)Java程式裡的泛型資訊,在Java虛擬機器裡全部丟失了。這麼做主要是為了相容引入泛型之前的程式碼。 (2)並不是每一個泛型引數被擦除型別之後都會變成Object類。對於限定了繼承類的泛型引數,經過型別擦除後,所有的泛型引數都將變成所限定的繼承類。也就是說,
Java程式設計師從笨鳥到菜鳥之(九十八)深入java虛擬機器(七)深入原始碼看java類載入器ClassLoader
歡迎閱讀本專題的其他部落格: ClassLoader類載入器是負責載入類的物件。ClassLoader 類是一個抽象類。如果給定類的二進位制名稱(即為包名加類名的全稱),那麼類載入器會試圖查詢或生成構成類定義的資料。一般策略是
深入理解Java虛擬機器(一)——JVM整體結構與垃圾回收演算法介紹
JVM整體架構 •JVM(虛擬機器):指以軟體的方式模擬具有完整硬體系統功能、執行在一個完全隔離環境中的完整計算機系統 ,是物理機的軟體實現。常用的虛擬機器有VMWare,Virtual Box,Ja
深入理解Java虛擬機器(四)——JVM效能調優監控工具
Jinfo 檢視正在執行的Java應用程式的擴充套件引數 檢視jvm的引數 檢視java系統引數 Jstat jstat命令可以檢視堆記憶體各部分的使用量,以及載入類的數量。命
深入理解java虛擬機器(一)----jvm記憶體模型
最近大致的學習了一下jvm的相關技術,發現深入理解java虛擬機器這本書很不錯,所以想將這本書的內容的重難點在blog總結一下,一是為了鞏固這些知識,二是為了把這些重點單獨寫出來,讓初學者在學習的時候有一個大致的框架以至於學起來不至於那麼迷茫 學習java虛擬
深入理解Java虛擬機器(0)——JVM基本介紹
1、什麼是JVM? 我們知道Java程式碼可以一次編寫,到處執行(Write once,run anywhere),而這一特性正是JVM提供的。JVM幫工程師遮蔽了不同平臺的差異性,提供了一致的編寫介面。 我們編寫的程式碼首先被編譯器 編譯成 符合
深入理解Java虛擬機器----(七)位元組碼執行引擎
位元組碼執行引擎是執行引擎是最重要的一部分,概念模型的總體外觀是一致的:輸入位元組碼,過程是位元組碼解析的等效過程,輸出結果。不同的虛擬機器有不同的具體實現,大體有解釋執行和編譯執行兩種選擇。 執行時棧幀結構: 棧楨在虛擬機器棧中,是支援方法呼叫和執行的結
深入理解java虛擬機器(七)類載入的時機
Class 檔案中描述的各種資訊都必須載入到虛擬機器中才能執行和使用。而虛擬機器怎麼載入這些Class 檔案呢?Class 檔案進入到虛擬機器中會發生什麼變化呢? 虛擬機器類載入機制是指 虛擬機器把描述類的資料從 Class 檔案載入到記憶體中,並對資料進行校驗、轉換解析、
OpenStack之管理虛擬機器(七)
OpenStack的三個元件(四個節點)已安全搭建完成,本篇博文為大家帶來基本管理,使平臺化管理更為方便、有效。 一、映象管理 1、掛載/上傳映象到控制節點 mkdir /abcmount.cifs //192.168.37.1/rhel7/KVM/CentOS-7-x86_64-DVD
Java程式設計師從笨鳥到菜鳥之(九十三)深入java虛擬機器(二)——類載入器詳解(上)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!