Java虛擬機器解釋執行和JIT的關係
Java程式最初是僅僅通過直譯器解釋執行的,即對位元組碼逐條解釋執行,這種方式的執行速度相對會比較慢,尤其當某個方法或程式碼塊執行的特別頻繁時,這種方式的執行效率就顯得很低。於是後來在虛擬機器中引入了JIT編譯器(即時編譯器),當虛擬機發現某個方法或程式碼塊執行特別頻繁時,就會把這些程式碼認定為“Hot Spot Code”(熱點程式碼),為了提高熱點程式碼的執行效率,在執行時,虛擬機器將會把這些程式碼編譯成與本地平臺相關的機器碼,並進行各層次的優化,完成這項任務的正是JIT編譯器。
二者各有優勢:當程式需要迅速啟動和執行時,直譯器可以首先發揮作用,省去編譯的時間,立即執行;當程式執行後,隨著時間的推移,編譯器逐漸會返回作用,把越來越多的程式碼編譯成原生代碼後,可以獲取更高的執行效率。解釋執行可以節約記憶體,而編譯執行可以提升效率。
摘抄自:http://blog.csdn.net/ns_code/article/details/18009455
相關推薦
Java虛擬機器解釋執行和JIT的關係
Java程式最初是僅僅通過直譯器解釋執行的,即對位元組碼逐條解釋執行,這種方式的執行速度相對會比較慢,尤其當某個方法或程式碼塊執行的特別頻繁時,這種方式的執行效率就顯得很低。於是後來在虛擬機器中引入
java虛擬機器1.執行時資料區
Java技術體系模組圖 java虛擬機器在執行java程式的過程中會把它所管理的記憶體劃分為若干個不同的資料區域。這些區域都有各自的用途,以及各自的建立和銷燬時間,有的區域隨虛擬機器程序的啟動而存在,有些區域則依賴使用者執行緒的啟動和結束而建立和銷燬。 程式計數器 是一塊較小的記憶體空
深入理解Java虛擬機器之執行時資料區域
一.執行時資料區域有哪些? 首先,我們先來看一張圖: 如上面的圖所示,執行時記憶體區域主要分為:1.程式計數器,2.Java虛擬機器棧,3.本地方法棧,4.Java堆,5.方法區等等,下面就一個個來剖析一下。 二.這些區域都有哪些作用? 首先我們熟悉一下一個一般性的 Java 程式的
【Java虛擬機器】執行緒安全與鎖優化
執行緒安全與鎖優化 絕對執行緒安全 相對執行緒安全 執行緒安全的實現方式 互斥同步 非阻塞同步 鎖優化 參考 絕對執行緒安全 當多個執行緒訪問一個物件時,如果不用考慮這些執行緒在執行時環境
位元組碼執行方式--解釋執行和JIT
此文已由作者趙計剛薪授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 1、兩種執行方式: 解釋執行(執行期解釋位元組碼並執行) 強制使用該模式:-Xint 編譯為機器碼執行(將位元組碼編譯為機器碼並執行,這個編譯過程發生在執行期,稱
java虛擬機器多執行緒安全的簡單理解
java虛擬機器多執行緒安全及鎖優化 執行緒安全問題的產生 多執行緒技術的引入產生啦執行緒安全性問題:當多個執行緒操作共享的資料時,如果A執行緒對共享的資料做出改變時B執行緒也要操作共享的資料,就有可能發生執行緒執行錯誤,產生錯誤的結果. 執行緒安全按安全程度來分五級
深入理解Java虛擬機器之類執行時棧幀結構
棧幀(Stack Frame)是用於支援虛擬機器進行方法呼叫和方法執行的資料結構,它是虛擬機器執行時資料區中的虛擬機器棧(Virtual Machine Stack)的棧元素。棧幀儲存了方法的區域性變量表、運算元棧、動態連線和方法返回地址等資訊。每一個方法從呼叫
Java虛擬機器:執行時資料區域-《深入理解Java虛擬機器》筆記
以下內容為周志明《深入理解Java虛擬機器》中的內容摘要。寫本文來作為學習筆記。 Java 虛擬機器在執行時會將管理的記憶體劃分成若干個區域,這些區域各有各的用途,以及各自的建立和銷燬的時間。 有些隨著
JAVA 虛擬機器 GC演算法和GC回收器
本章內容 標記-清除演算法 複製演算法 標記-整理演算法 分代收集演算法 七種垃圾收集器 標記-清除演算法 標記;遍歷所有的GC Roots,然後將所有GC Roots可達的物件標記為存活的物件 清除:清除的過程將遍歷堆中所有的物件,將沒有標記的物件全部清除
JAVA虛擬機器:新生代和老年代GC
Java堆可以分為新生代和老年代兩個區,其中新生代又可以分為一個Eden區和兩個Survivor區,兩個Survivor區分別被命名為From和To以示區分,新生代和老年代的比例為1:2,它們共同組成
Android執行main方法後java虛擬機器停止執行
Android工程裡面一個方法不小心寫了一個main方法,執行失敗後,整個工程都跑不起來了。 系統提示我看log,好吧,如下: # # A fatal error has been detected by the Java Runtime Environment: # #
intellij IDEA android開發虛擬機器除錯執行和手機除錯執行之間的轉換
一虛擬機器1點選右上角 Edit Configurations->Open Select Deployment Target Dialog為虛擬機器除錯/2 USB Device為手機除錯(其中手機要調成開發者模式,還要在開發者選項中開啟允許USB除錯)
Java虛擬機器OOM問題和四大引用問題簡述
一.請你談談實際的專案中在Java虛擬機器會丟擲哪些異常,每個異常都是怎麼產生的? 1.java.lang.StackOverflowError 棧空間滿了 public static void stackOverFlow(){ // 遞迴呼叫之後,把棧空間塞滿了,當程式出現遞迴呼叫沒有
℃江的觀後感 -- Java 虛擬機器的方法區、直接記憶體和執行時常量池
方法區 我們知道方法區,當然是和方法有關,Java虛擬機器的作用就兩個,儲存、運算。其實我們叫其方法區,說明和儲存東西有關,但是存什麼呢?這塊儲存的是虛擬機器載入的類資訊,常亮,靜態變數和有個就是即使編譯後的程式碼等資料。方法區一般在hotspot被稱為永久代
深入理解Java虛擬機器學習筆記3-執行緒安全和鎖優化
併發處理是壓榨計算機運算能力最有力的工具。 1.執行緒安全 當多個執行緒訪問一個物件時,如果不用考慮這些執行緒執行時環境下排程和交替執行,也不需要進行額外的同步,或者在呼叫方進行任何其他的協調操作,呼叫這個物件的行為都可以獲取正確的結果,那麼這個物件是執行緒安全的。 2
java-關於java_home配置,classpath配置和javac,java命令,javac編譯器,和java虛擬機器之間的關係
在每個人學習java的第一步,都是安裝jdk ,jre,配置java_home,classpath,path。 為什麼要做這些?在閱讀java-core的時候,看到了原理,p141。 一 關於類的共享 為了使類能被多個程式共享,需要做到以下幾步: 1.把類放到同一個目錄中,且該目錄是pa
java虛擬機器學習之執行緒共享記憶體區和執行緒私有區
執行緒共享指的就是可以允許被所有執行緒共享訪問的一塊記憶體,包括堆區,方法區和執行時常量池。 1. java堆區 java堆區在虛擬機器啟動時被建立,並且他在實際記憶體中是可以不連續的。
Java虛擬機器的靜態常量池和執行時常量池
(靜態)常量池:用於存放編譯器生成的各種字面量和符號引用(符號引用區別於直接引用,後者在class位元組碼檔案被虛擬機器解析之後,符號引用將被替換為直接引用)。 執行時常量池:(靜態)常量池中的內容在類載入(這裡的類載入指class位元組碼檔案經過載入連線初始化的過程)後存放入方法區的執
Java程式的執行機制和Java虛擬機器
1、java程式的執行Java中原始檔字尾為*.java,編譯(也就是javac命令)使*.java檔案轉換為*.class檔案,然後在計算機上執行(java命令)*.class檔案。這就是java程式的執行過程,那麼JVM(java虛擬機器)是做什麼用的哪?首先我們來看一下
java虛擬機器位元組碼執行引擎之解釋執行
java語言中,Javac編譯器完成了程式程式碼經過詞法分析,語法分析到抽象語法樹,再遍歷語法樹生成線性的位元組碼指令流的過程.這一部分動作是在java虛擬機器外部完成的,而直譯器是在虛擬機器內部的,Java程式的編譯是半獨立的實現. 直譯器負責對Javac編譯器輸出的指令