偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

JVM學(xué)習(xí)筆記之常見(jiàn)JVM機(jī)制

開(kāi)發(fā) 后端
這里向大家描述一下JVM學(xué)習(xí)筆記中各種機(jī)制,主要包括Java源碼編譯機(jī)制,類加載機(jī)制和類執(zhí)行機(jī)制等內(nèi)容,希望對(duì)你的學(xué)習(xí)有所幫助。

JVM有很多值得學(xué)習(xí)的地方,這里就和大家一起來(lái)看一下它都包含哪些機(jī)制,常用的有Java源碼編譯機(jī)制,類加載機(jī)制和類執(zhí)行機(jī)制幾種,這里詳細(xì)介紹一下。

JVM學(xué)習(xí)筆記之JVM機(jī)制

一、JVM學(xué)習(xí)筆記之Java源碼編譯機(jī)制:

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

詞法分析com.sun.tools.javac.parser.Scanner:將代碼字符串轉(zhuǎn)變?yōu)閠oken序列。

語(yǔ)法分析com.sun.tools.javac.parser.Parser:Token序列生成抽象語(yǔ)法樹(shù)。

輸入到符號(hào)表com.sun.tools.javac.comp.Enter:類中出現(xiàn)的符號(hào)輸入類自身的符號(hào)表中等。

2。注釋處理(AnnotationProcessing)

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

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

基于抽象語(yǔ)法樹(shù)進(jìn)行一序列語(yǔ)義分析,再完成分析后,開(kāi)始生成class文件com.sun.tools.javac.jvm.Gen。

二、JVM學(xué)習(xí)筆記之類加載機(jī)制(類加載器子系統(tǒng)的工作職責(zé)與工作流程):

1。裝載(Load):查找并裝載二進(jìn)制字節(jié)碼,采用兩個(gè)元素來(lái)標(biāo)識(shí)一個(gè)被加載的類:類的全限定名+ClassLoader實(shí)例ID。

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

3。初始化(Initialize):執(zhí)行類中的靜態(tài)初始化代碼、構(gòu)造器代碼及靜態(tài)屬性的初始化。

ClassLoader雙親委派模型:

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

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

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

User-DefinedClassLoader

三、JVM學(xué)習(xí)筆記之類執(zhí)行機(jī)制:

SunJDK基于棧的體系結(jié)構(gòu)來(lái)執(zhí)行字節(jié)碼,代碼緊湊,體積小。調(diào)用方法invokestatic、invokespecial、invokevirtual、invokeinterface。

1。字節(jié)碼解釋執(zhí)行

指令解釋執(zhí)行:對(duì)于方法的指令解釋執(zhí)行,執(zhí)行方式為經(jīng)典馮*諾依曼體系的FDX循環(huán)方式,有switching-threading、token-threading、direct-threading、subroutine-threading、inline-threading。

SunJDK主要的優(yōu)化:

棧頂緩存(top-of-stackcaching):即將本來(lái)位于操作棧頂?shù)闹抵苯泳彺娴郊拇嫫魃?,這對(duì)于大部分只需要一個(gè)值的操作而言,無(wú)須將數(shù)據(jù)放入操作數(shù)棧,可直接在寄存器計(jì)算,然后返回操作數(shù)棧。

部分棧幀共享:當(dāng)方法調(diào)用時(shí),后一個(gè)方法可將前一方法的操作數(shù)作為當(dāng)前方法的局部變量,從而節(jié)省數(shù)據(jù)copy帶來(lái)的消耗。下面再來(lái)看一下JVM學(xué)習(xí)筆記之類執(zhí)行機(jī)制的第二部分內(nèi)容字節(jié)碼編譯執(zhí)行。

2。字節(jié)碼編譯執(zhí)行

解釋執(zhí)行的效率較低,為提升代碼執(zhí)行性能,SunJDK提供將字節(jié)碼編譯為機(jī)器碼的支持,編譯在運(yùn)行時(shí)進(jìn)行,通常稱為JIT編譯器。SunJDK在執(zhí)行過(guò)程中,對(duì)執(zhí)行頻率不頻繁的代碼采用解釋執(zhí)行,執(zhí)行頻率高的代碼采用編譯執(zhí)行。

SunJDK主要的優(yōu)化:

ClientCompiler(C1):

方法內(nèi)聯(lián):-XX:MaxInlineSize=字節(jié)數(shù)進(jìn)行控制。

去虛擬化:進(jìn)行類的層次的分析,如發(fā)現(xiàn)類中的方法只提供一個(gè)實(shí)現(xiàn)類,那么可以對(duì)調(diào)用此方法的代碼進(jìn)行方法內(nèi)聯(lián)。

多余消除:根據(jù)運(yùn)行狀況進(jìn)行代碼折疊或消除。

ServerCompiler(C2):

標(biāo)量替換:用標(biāo)量替換聚合量,如:用基本類型替換對(duì)象。

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

同步消除:如果發(fā)現(xiàn)同步對(duì)象未逃逸,可以去掉同步。

SunJDK之所以未在啟動(dòng)時(shí)即編譯成機(jī)器碼,有幾方面原因:

根據(jù)運(yùn)行狀況來(lái)進(jìn)行動(dòng)態(tài)編譯,為C2收集運(yùn)行數(shù)據(jù)的越長(zhǎng)的時(shí)間,編譯出來(lái)的代碼會(huì)比靜態(tài)編譯更優(yōu)越。

解釋執(zhí)行比編譯執(zhí)行更節(jié)省內(nèi)存。

啟動(dòng)時(shí)解釋執(zhí)行的啟動(dòng)速度比編譯再啟動(dòng)執(zhí)行更快。

(小記:當(dāng)java-server出現(xiàn)Error:no`server'JVMat`XXX\bin\server\jvm.dll'錯(cuò)誤時(shí),解決方法可以復(fù)制jdk下jre\bin\server目錄到j(luò)re7\bin目錄下;或windows下可以通過(guò)修改注冊(cè)表HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\JavaRuntimeEnvironment;UNIX下更改/usr/java的鏈接)

3。反射執(zhí)行

基于反射可動(dòng)態(tài)調(diào)用某對(duì)象實(shí)例中對(duì)應(yīng)的方法、訪問(wèn)查看對(duì)象的數(shù)據(jù)等。最直接的方法是動(dòng)態(tài)生成字節(jié)碼:Class.forName(Class'sName)。

getMethod相對(duì)比較耗性能(裝載Class對(duì)象、各種(權(quán)限等)校驗(yàn)Class、執(zhí)行構(gòu)造對(duì)象的netInstance、所有方法的掃描及Method對(duì)象的復(fù)制、......),反射執(zhí)行獲取的方法與標(biāo)準(zhǔn)的方法調(diào)用沒(méi)有任何區(qū)別(method.invoke僅比直接調(diào)用低一點(diǎn)),所以可采用緩存getMethod返回的Method對(duì)象來(lái)提升性能。

【編輯推薦】

  1. 調(diào)用tomcat設(shè)置JVM參數(shù)
  2. JVM安裝與Tomcat配置具體步驟
  3. 巧解Tomcat中JVM內(nèi)存溢出問(wèn)題
  4. JVM學(xué)習(xí)筆記 JVM內(nèi)存管理和JVM垃圾回收機(jī)制
  5. 揭露JDK,JRE,JVM三者不為人知的隱情
責(zé)任編輯:佚名 來(lái)源: blog.csdn.net
相關(guān)推薦

2022-05-19 07:09:29

機(jī)制沙箱安全JVM

2010-09-26 14:01:10

JVM Log

2010-09-27 08:38:49

JVM堆JVM棧

2010-09-26 16:42:04

JVM內(nèi)存組成JVM垃圾回收

2023-10-31 16:00:51

類加載機(jī)制Java

2020-05-26 18:50:46

JVMAttachJava

2023-08-02 08:38:27

JVM加載機(jī)制

2021-05-25 09:56:42

Jvm類加載機(jī)制Java

2020-07-21 14:19:18

JVM編程語(yǔ)言

2020-04-15 21:43:22

JVMJavaVMware

2021-02-28 11:58:33

JVM機(jī)制語(yǔ)言

2021-09-24 08:10:40

Java 語(yǔ)言 Java 基礎(chǔ)

2010-09-26 09:16:16

JVM監(jiān)控工具

2010-09-25 15:33:19

JVM垃圾回收

2010-09-17 17:18:35

EclipseJVM

2010-09-26 13:23:13

JVM內(nèi)存管理機(jī)制

2011-07-05 10:39:55

JVM

2022-06-10 07:13:29

JVM垃圾回收

2011-03-11 09:41:17

JavaGC

2020-07-29 14:15:04

JavaJvm算法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)