成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JVM學習筆記之常見JVM機制

開發 后端
這里向大家描述一下JVM學習筆記中各種機制,主要包括Java源碼編譯機制,類加載機制和類執行機制等內容,希望對你的學習有所幫助。

JVM有很多值得學習的地方,這里就和大家一起來看一下它都包含哪些機制,常用的有Java源碼編譯機制,類加載機制和類執行機制幾種,這里詳細介紹一下。

JVM學習筆記之JVM機制

一、JVM學習筆記之Java源碼編譯機制:

1。分析和輸入到符號表(ParserAndEnter):

詞法分析com.sun.tools.javac.parser.Scanner:將代碼字符串轉變為token序列。

語法分析com.sun.tools.javac.parser.Parser:Token序列生成抽象語法樹。

輸入到符號表com.sun.tools.javac.comp.Enter:類中出現的符號輸入類自身的符號表中等。

2。注釋處理(AnnotationProcessing)

用于處理用戶自定義的annotation,處理后再次進入ParserAndEnter步驟。

3。語法分析和生成class文件(AnalyseandGenerate)

基于抽象語法樹進行一序列語義分析,再完成分析后,開始生成class文件com.sun.tools.javac.jvm.Gen。

二、JVM學習筆記之類加載機制(類加載器子系統的工作職責與工作流程):

1。裝載(Load):查找并裝載二進制字節碼,采用兩個元素來標識一個被加載的類:類的全限定名+ClassLoader實例ID。

2。鏈接(Link):校驗(Verify)--格式校驗確保被導入類的正確性-->準備(Prepared)--為類變量分配內存空間并初始化默認值-->解析(Resolve)--把導入類的符號引用轉換為直接引用。

3。初始化(Initialize):執行類中的靜態初始化代碼、構造器代碼及靜態屬性的初始化。

ClassLoader雙親委派模型:

BootstrapClassLoader--$JAVA_HOME/jre/lib/rt.jar(曾祖父)<--

ExtensionClassLoader--$JAVA_HOME/jre/lib/ext/*.jar(祖父)<--

SystemClassLoader--$CLASSPATH(父親)<--

User-DefinedClassLoader

三、JVM學習筆記之類執行機制:

SunJDK基于棧的體系結構來執行字節碼,代碼緊湊,體積小。調用方法invokestatic、invokespecial、invokevirtual、invokeinterface。

1。字節碼解釋執行

指令解釋執行:對于方法的指令解釋執行,執行方式為經典馮*諾依曼體系的FDX循環方式,有switching-threading、token-threading、direct-threading、subroutine-threading、inline-threading。

SunJDK主要的優化:

棧頂緩存(top-of-stackcaching):即將本來位于操作棧頂的值直接緩存到寄存器上,這對于大部分只需要一個值的操作而言,無須將數據放入操作數棧,可直接在寄存器計算,然后返回操作數棧。

部分棧幀共享:當方法調用時,后一個方法可將前一方法的操作數作為當前方法的局部變量,從而節省數據copy帶來的消耗。下面再來看一下JVM學習筆記之類執行機制的第二部分內容字節碼編譯執行。

2。字節碼編譯執行

解釋執行的效率較低,為提升代碼執行性能,SunJDK提供將字節碼編譯為機器碼的支持,編譯在運行時進行,通常稱為JIT編譯器。SunJDK在執行過程中,對執行頻率不頻繁的代碼采用解釋執行,執行頻率高的代碼采用編譯執行。

SunJDK主要的優化:

ClientCompiler(C1):

方法內聯:-XX:MaxInlineSize=字節數進行控制。

去虛擬化:進行類的層次的分析,如發現類中的方法只提供一個實現類,那么可以對調用此方法的代碼進行方法內聯。

多余消除:根據運行狀況進行代碼折疊或消除。

ServerCompiler(C2):

標量替換:用標量替換聚合量,如:用基本類型替換對象。

棧上分配(TLAB):對于未逃逸對象可以直接在棧上分配,而不是JVM堆上。

同步消除:如果發現同步對象未逃逸,可以去掉同步。

SunJDK之所以未在啟動時即編譯成機器碼,有幾方面原因:

根據運行狀況來進行動態編譯,為C2收集運行數據的越長的時間,編譯出來的代碼會比靜態編譯更優越。

解釋執行比編譯執行更節省內存。

啟動時解釋執行的啟動速度比編譯再啟動執行更快。

(小記:當java-server出現Error:no`server'JVMat`XXX\bin\server\jvm.dll'錯誤時,解決方法可以復制jdk下jre\bin\server目錄到jre7\bin目錄下;或windows下可以通過修改注冊表HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\JavaRuntimeEnvironment;UNIX下更改/usr/java的鏈接)

3。反射執行

基于反射可動態調用某對象實例中對應的方法、訪問查看對象的數據等。最直接的方法是動態生成字節碼:Class.forName(Class'sName)。

getMethod相對比較耗性能(裝載Class對象、各種(權限等)校驗Class、執行構造對象的netInstance、所有方法的掃描及Method對象的復制、......),反射執行獲取的方法與標準的方法調用沒有任何區別(method.invoke僅比直接調用低一點),所以可采用緩存getMethod返回的Method對象來提升性能。

【編輯推薦】

  1. 調用tomcat設置JVM參數
  2. JVM安裝與Tomcat配置具體步驟
  3. 巧解Tomcat中JVM內存溢出問題
  4. JVM學習筆記 JVM內存管理和JVM垃圾回收機制
  5. 揭露JDK,JRE,JVM三者不為人知的隱情
責任編輯:佚名 來源: blog.csdn.net
相關推薦

2022-05-19 07:09:29

機制沙箱安全JVM

2010-09-26 14:01:10

JVM Log

2010-09-27 08:38:49

JVM堆JVM棧

2010-09-26 16:42:04

JVM內存組成JVM垃圾回收

2023-10-31 16:00:51

類加載機制Java

2020-05-26 18:50:46

JVMAttachJava

2023-08-02 08:38:27

JVM加載機制

2021-05-25 09:56:42

Jvm類加載機制Java

2020-07-21 14:19:18

JVM編程語言

2021-02-28 11:58:33

JVM機制語言

2020-04-15 21:43:22

JVMJavaVMware

2010-09-26 09:16:16

JVM監控工具

2021-09-24 08:10:40

Java 語言 Java 基礎

2010-09-25 15:33:19

JVM垃圾回收

2010-09-17 17:18:35

EclipseJVM

2010-09-26 13:23:13

JVM內存管理機制

2011-03-11 09:41:17

JavaGC

2011-07-05 10:39:55

JVM

2022-06-10 07:13:29

JVM垃圾回收

2020-07-29 14:15:04

JavaJvm算法
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品国产欧美一区二区三区不卡 | 欧美亚洲国产成人 | 噜噜噜色网 | 久久大陆| 中文字幕影院 | 91视频网 | 国产精品一区二区三区免费观看 | 午夜三级在线观看 | 中文字幕91 | 欧美一区二区在线播放 | 久久综合国产精品 | 久久中文字幕在线 | 欧美精品tv | 久久精品国产99国产精品亚洲 | 欧美日韩不卡合集视频 | 国产色婷婷精品综合在线播放 | 国产精品成人69xxx免费视频 | 成人免费视频网站 | 91久久久久 | 国产日韩欧美 | 成人亚洲一区 | 久久国产精品精品 | 国产一级影片 | www国产成人免费观看视频 | 在线欧美一区二区 | 男人天堂手机在线视频 | 黄色大片网| 亚洲国产精品久久久久婷婷老年 | 久久国产精品一区 | 国产欧美精品 | 国产夜恋视频在线观看 | 国产一区二区三区四区在线观看 | 精品国产一区二区三区久久久蜜月 | 7777精品伊人久久精品影视 | 丝袜天堂 | 亚洲视频免费播放 | 一级大片网站 | 日韩在线免费视频 | 一区二区影院 | 欧美中文字幕一区 | 亚洲精品电影网在线观看 |