1、jvm規範
[img]
2、oracle jdk 編譯機制
[img]
(1、詞法分析:將**轉token序列(例如token.eq(name:=));。語法分析:生成語法抽象樹。
(2、註解處理:處理註解生成**
(3、檢查語法抽象樹
3、 類載入順序(classloader)
self->parent->system->findclass() 沒有會報classnotfoundexception
a載入b,b不在a的classloader中,會報noclassdeffounderror
4、堆:存放new出來的物件(新生代、老生代)
5、棧:也就是我們常見的區域性變數棧,執行緒私有,儲存執行緒執行的區域性變數表、操作棧、動態連線等。
7. 本地方法棧:包含被虛擬機器載入的類、常量、靜態變數等資料。(永生代)
8、解釋執行:
效率較低,將原始碼編譯為jvm位元組碼(中間碼)。方法執行後會產生程式計數器pc,pc存放下條指令偏移位址。每個方法每次呼叫都會產生棧幀。棧幀分區域性變數區和運算元棧兩部分。乙個用於存放區域性變數和引數,乙個用於存放中間結果
jvm優化:棧頂快取、部分棧幀共享、直接執行機器指令(math.sin)。
9、編譯執行:
效率較高,將位元組碼編譯為機器碼執行。jdk對執行頻繁的**用編譯執行,執行不頻繁的用解釋執行。
jvm優化:(c1、c2編譯)(1、方法內聯(2、去虛擬化,對只有乙個方法的類進行內聯(3、冗餘削除,去掉永遠不執行的**(如if(debug) log.debug("msg"))。(4標量替換(5、棧上分配(6、同步消除
10、classloader.loadclass呼叫時才例項化
forname:例項化物件
JVM學習筆記1
1.執行時資料結構 2.堆分代 3.垃圾收集器 4.gc日誌 package jvm public class gctest 控制台 垃圾 前.gc system.gc psyounggen 1996k 816k 38400k 1996k 824k 125952k 0.0010917 secs ti...
JVM 學習筆記(三)
選擇對應版本鏈結 tools visual gc 首先我們啟動本地工程,不停地往記憶體中新增物件,如下 restcontroller public class heapcontroller 使用的是springboot的工程,啟動後訪問 localhost 8080 heap 這樣是程式不停地往記憶...
Tapestry學習筆記 JVM設定
對於運用tomcat tapestry進行開發的時候 由於tapestry對生成的檔案有快取處理機制 所以更改檔案的時候 tapestry都不會自動更新 使得每次更改內容都必須重啟tomcat 為了解決這個問題 可以在jvm中新增一下內容 dorg.apache.tapestry.disable c...