導航:首頁 > 編程語言 > java虛擬機源碼

java虛擬機源碼

發布時間:2022-08-23 23:24:39

A. 急求深入理解java虛擬機JVM高級特性與最佳實踐 源碼

這方面的書我倒是沒有看過 ,但是我看過一半的 java 。。。。編程思想 挺不錯 很厚 講java 講的很到位 那本書適合 開發2-4年java程序員看 我推薦你看下 對要是找到 關於java虛擬機的 源碼和高級特性 最好也給我一份 謝謝 研究研究

B. java源代碼如何用

java源代碼是用來關聯jar中的編譯代碼的。

應用場景:通常在打開eclipse中的jar的時候,發現class文件不能被打開,此時出現下面的界面,此時就需要通過「Attach Source」,之後找到對應的java源代碼來實現代碼關聯,即可正常的顯示class類中的內容。

備註:如果此處ava源代碼指的是源代碼文件(「.java」),是用來進行代碼維護和二次開發的必備東西。

C. 深入理解Java虛擬機的目錄

前言
致謝
第一部分 走近Java
第1章 走近Java / 2
1.1 概述 / 2
1.2 Java技術體系 / 3
1.3 Java發展史 / 5
1.4 展望Java技術的未來 / 9
1.4.1 模塊化 / 9
1.4.2 混合語言 / 9
1.4.3 多核並行 / 11
1.4.4 進一步豐富語法 / 12
1.4.5 64位虛擬機 / 13
1.5 實戰:自己編譯JDK / 13
1.5.1 獲取JDK源碼 / 13
1.5.2 系統需求 / 14
1.5.3 構建編譯環境 / 15
1.5.4 准備依賴項 / 17
1.5.5 進行編譯 / 18
1.6 本章小結 / 21
第二部分 自動內存管理機制
第2章 Java內存區域與內存溢出異常 / 24
2.1 概述 / 24
2.2 運行時數據區域 / 25
2.2.1 程序計數器 / 25
2.2.2 Java虛擬機棧 / 26
2.2.3 本地方法棧 / 27
2.2.4 Java堆 / 27
2.2.5 方法區 / 28
2.2.6 運行時常量池 / 29
2.2.7 直接內存 / 29
2.3 對象訪問 / 30
2.4 實戰:OutOfMemoryError異常 / 32
2.4.1 Java堆溢出 / 32
2.4.2 虛擬機棧和本地方法棧溢出 / 35
2.4.3 運行時常量池溢出 / 38
2.4.4 方法區溢出 / 39
2.4.5 本機直接內存溢出 / 41
2.5 本章小結 / 42
第3章 垃圾收集器與內存分配策略 / 43
3.1 概述 / 43
3.2 對象已死? / 44
3.2.1 引用計數演算法 / 44
3.2.2 根搜索演算法 / 46
3.2.3 再談引用 / 47
3.2.4 生存還是死亡? / 48
3.2.5 回收方法區 / 50
3.3 垃圾收集演算法 / 51
3.3.1 標記 -清除演算法 / 51
3.3.2 復制演算法 / 52
3.3.3 標記-整理演算法 / 54
3.3.4 分代收集演算法 / 54
3.4 垃圾收集器 / 55
3.4.1 Serial收集器 / 56
3.4.2 ParNew收集器 / 57
3.4.3 Parallel Scavenge收集器 / 59
3.4.4 Serial Old收集器 / 60
3.4.5 Parallel Old收集器 / 61
3.4.6 CMS收集器 / 61
3.4.7 G1收集器 / 64
3.4.8 垃圾收集器參數總結 / 64
3.5 內存分配與回收策略 / 65
3.5.1 對象優先在Eden分配 / 66
3.5.2 大對象直接進入老年代 / 68
3.5.3 長期存活的對象將進入老年代 / 69
3.5.4 動態對象年齡判定 / 71
3.5.5 空間分配擔保 / 73
3.6 本章小結 / 75
第4章 虛擬機性能監控與故障處理工具 / 76
4.1 概述 / 76
4.2 JDK的命令行工具 / 76
4.2.1 jps:虛擬機進程狀況工具 / 79
4.2.2 jstat:虛擬機統計信息監視工具 / 80
4.2.3 jinfo:Java配置信息工具 / 82
4.2.4 jmap:Java內存映像工具 / 82
4.2.5 jhat:虛擬機堆轉儲快照分析工具 / 84
4.2.6 jstack:Java堆棧跟蹤工具 / 85
4.3 JDK的可視化工具 / 87
4.3.1 JConsole:Java監視與管理控制台 / 88
4.3.2 VisualVM:多合一故障處理工具 / 96
4.4 本章小結 / 105
第5章 調優案例分析與實戰 / 106
5.1 概述 / 106
5.2 案例分析 / 106
5.2.1 高性能硬體上的程序部署策略 / 106
5.2.2 集群間同步導致的內存溢出 / 109
5.2.3 堆外內存導致的溢出錯誤 / 110
5.2.4 外部命令導致系統緩慢 / 112
5.2.5 伺服器JVM進程崩潰 / 113
5.3 實戰:Eclipse運行速度調優 / 114
5.3.1 調優前的程序運行狀態 / 114
5.3.2 升級JDK 1.6的性能變化及兼容問題 / 117
5.3.3 編譯時間和類載入時間的優化 / 122
5.3.4 調整內存設置控制垃圾收集頻率 / 126
5.3.5 選擇收集器降低延遲 / 130
5.4 本章小結 / 133
第三部分 虛擬機執行子系統
第6章 類文件結構 / 136
6.1 概述 / 136
6.2 無關性的基石 / 136
6.3 Class類文件的結構 / 138
6.3.1 魔數與Class文件的版本 / 139
6.3.2 常量池 / 141
6.3.3 訪問標志 / 147
6.3.4 類索引、父類索引與介面索引集合 / 148
6.3.5 欄位表集合 / 149
6.3.6 方法表集合 / 153
6.3.7 屬性表集合 / 155
6.4 Class文件結構的發展 / 168
6.5 本章小結 / 170
第7章 虛擬機類載入機制 / 171
7.1 概述 / 171
7.2 類載入的時機 / 172
7.3 類載入的過程 / 176
7.3.1 載入 / 176
7.3.2 驗證 / 178
7.3.3 准備 / 181
7.3.4 解析 / 182
7.3.5 初始化 / 186
7.4 類載入器 / 189
7.4.1 類與類載入器 / 189
7.4.2 雙親委派模型 / 191
7.4.3 破壞雙親委派模型 / 194
7.5 本章小結 / 197
第8章 虛擬機位元組碼執行引擎 / 198
8.1 概述 / 198
8.2 運行時棧幀結構 / 199
8.2.1 局部變數表 / 199
8.2.2 操作數棧 / 204
8.2.3 動態連接 / 206
8.2.4 方法返回地址 / 206
8.2.5 附加信息 / 207
8.3 方法調用 / 207
8.3.1 解析 / 207
8.3.2 分派 / 209
8.4 基於棧的位元組碼解釋執行引擎 / 221
8.4.1 解釋執行 / 221
8.4.2 基於棧的指令集與基於寄存器的指令集 / 223
8.4.3 基於棧的解釋器執行過程 / 224
8.5 本章小結 / 230
第9章 類載入及執行子系統的案例與實戰 / 231
9.1 概述 / 231
9.2 案例分析 / 231
9.2.1 Tomcat:正統的類載入器架構 / 232
9.2.2 OSGi:靈活的類載入器架構 / 235
9.2.3 位元組碼生成技術與動態代理的實現 / 238
9.2.4 Retrotranslator:跨越JDK版本 / 242
9.3 實戰:自己動手實現遠程執行功能 / 246
9.3.1 目標 / 246
9.3.2 思路 / 247
9.3.3 實現 / 248
9.3.4 驗證 / 255
9.4 本章小結 / 256
第四部分 程序編譯與代碼優化
第10章 早期(編譯期)優化 / 258
10.1 概述 / 258
10.2 Javac編譯器 / 259
10.2.1 Javac的源碼與調試 / 259
10.2.2 解析與填充符號表 / 262
10.2.3 註解處理器 / 264
10.2.4 語義分析與位元組碼生成 / 264
10.3 Java語法糖的味道 / 268
10.3.1 泛型與類型擦除 / 268
10.3.2 自動裝箱、拆箱與遍歷循環 / 273
10.3.3 條件編譯 / 275
10.4 實戰:插入式註解處理器 / 276
10.4.1 實戰目標 / 276
10.4.2 代碼實現 / 277
10.4.3 運行與測試 / 284
10.4.4 其他應用案例 / 286
10.5 本章小結 / 286
第11章 晚期(運行期)優化 / 287
11.1 概述 / 287
11.2 HotSpot虛擬機內的即時編譯器 / 288
11.2.1 解釋器與編譯器 / 288
11.2.2 編譯對象與觸發條件 / 291
11.2.3 編譯過程 / 294
11.2.4 查看與分析即時編譯結果 / 297
11.3 編譯優化技術 / 301
11.3.1 優化技術概覽 / 301
11.3.2 公共子表達式消除 / 305
11.3.3 數組邊界檢查消除 / 307
11.3.4 方法內聯 / 307
11.3.5 逃逸分析 / 309
11.4 Java與C/C++的編譯器對比 / 311
11.5 本章小結 / 313
第五部分 高效並發
第12章 Java內存模型與線程 / 316
12.1 概述 / 316
12.2 硬體的效率與一致性 / 317
12.3 Java內存模型 / 318
12.3.1 主內存與工作內存 / 319
12.3.2 內存間交互操作 / 320
12.3.3 對於volatile型變數的特殊規則 / 322
12.3.4 對於long和double型變數的特殊規則 / 327
12.3.5 原子性、可見性與有序性 / 328
12.3.6 先行發生原則 / 330
12.4 Java與線程 / 333
12.4.1 線程的實現 / 333
12.4.2 Java線程調度 / 337
12.4.3 狀態轉換 / 339
12.5 本章小結 / 341
第13章 線程安全與鎖優化 / 342
13.1 概述 / 342
13.2 線程安全 / 343
13.2.1 Java語言中的線程安全 / 343
13.2.2 線程安全的實現方法 / 348
13.3 鎖優化 / 356
13.3.1 自旋鎖與自適應自旋 / 356
13.3.2 鎖消除 / 357
13.3.3 鎖粗化 / 358
13.3.4 輕量級鎖 / 358
13.3.5 偏向鎖 / 361
13.4 本章小結 / 362
附錄A Java虛擬機家族 / 363
附錄B 虛擬機位元組碼指令表 / 366
附錄C HotSpot虛擬機主要參數表 / 372
附錄D 對象查詢語言(OQL)簡介 / 376
附錄E JDK歷史版本軌跡 / 383

D. 請問通過Java虛擬機先編譯源代碼為位元組碼再由各平台解釋器解釋 各平台都有什麼

java是跨平台的, 這當中的"平台"指什麼?
可以是不同的操作系統:frebsd, solaris, mac os, windows,andriod.......
可以是不同的體系結構:arm, intel, amd....

E. java虛擬機是什麼

Java語言寫的代碼是.java文件,它會被特定程序編譯(javac.exe,它會被Eclipse之類的IDE調用)成位元組碼(bytecode),位元組碼不能直接在CPU上運行,需要另一個程序讀取並執行,這個部件就是java虛擬機,它像機器一樣運行編譯好的java位元組碼,就像機器直接執行機器碼一樣……java虛擬機的外部介面在windows下主要是jvm.dll這個文件……

F. Java 虛擬機一樣的速度甚至出現AOT編譯方式嗎

不論是物理機還是虛擬機,大部分的程序代碼從開始編譯到最終轉化成物理機的目標代碼或虛擬機能執行的指令集之前,都會按照如下圖所示的各個步驟進行:

G. 我的世界用cmd打開,求源碼!是用java虛擬機直接打開客戶端!就是在cmd(命令窗口)調用jav

cd ".\.minecraft\bin"
javaw -Xmx1024M -cp jinput.jar;lwjgl.jar;lwjgl_util.jar;minecraft.jar -Djava.library.path=".\natives" net.minecraft.client.Minecraft
放於.minecraft文件夾外(其他地方修改一下第一行即可)
第二行隔著一個空格後輸入的作為用戶名

留空則為player***
星號為3位任意數字

H. 為什麼java要編譯成位元組碼解釋執行而不是直接解釋執行源碼

為了跨平台
編譯成的位元組流文件.class,與硬體和操作系統無關,這是跨平台基礎,然後具體執行,再用各自平台解釋器,解釋成本地機器碼
更多交流,進我空間
------------------------------------------
java是一種編譯+解釋的語言,編譯的結果本身保證了代碼安全和版權,如果全部解釋源代碼,象早期的ASP,那JAVA就不敢用於銀行、證劵等安全性較高的場合

I. 詳細介紹什麼是Java虛擬機

Java虛擬機(Java Virtual Machine,簡稱 JVM)
JVM也是一個軟體,不同的平台有不同的版本。我們編寫的Java源碼,編譯後會生成一種 .class 文件,稱為位元組碼文件。Java虛擬機就是負責將位元組碼文件翻譯成特定平台下的機器碼然後運行。也就是說,只要在不同平台上安裝對應的JVM,就可以運行位元組碼文件,運行我們編寫的Java程序。

而這個過程中,我們編寫的Java程序沒有做任何改變,僅僅是通過JVM這一」中間層「,就能在不同平台上運行,真正實現了」一次編譯,到處運行「的目的。

JVM是一個」橋梁「,是一個」中間件「,是實現跨平台的關鍵,Java代碼首先被編譯成位元組碼文件,再由JVM將位元組碼文件翻譯成機器語言,從而達到運行Java程序的目的。
所以,運行Java程序必須有JVM的支持,因為編譯的結果不是機器碼,必須要經過JVM的再次翻譯才能執行。即使你將Java程序打包成可執行文件(例如 .exe),仍然需要JVM的支持。

J. JAVA虛擬機的技術難度比操作系統難嗎

兩者各有難點,個人覺得都很難,否則Sun就可以造一個和微軟一樣的操作系統, 而微軟也可以造一個虛擬機來和Sun對抗, 事實上微軟後來真的造了類似的東西出來, 微軟為了把java程序員吸引到他的平台上來,就有了VJ++。 後來有了 C# 平台。 但都是沒有像java那樣做得專業。 Sun是沒那麼容易被打敗的.所以你不覺得java的虛擬機還有點技術含量的吧? 哈哈

現在從技術細節上來分析:
1。 操作系統所面對的技術是有 內存管理、進程調度、設備管理等等等等
2。 相對於虛擬機,它相當於一個大管家,所有java做出來的應用,都先經過虛擬機,再由虛擬機轉交給操作系統。在這個意義上,虛擬機相當於一個大型軟體,它可以管理其它的軟體。然而,在虛擬機下面也運行著大大小小的N個java程序,也需要對這些程序進行內存管理,進程的調度。它為它下面的所有程序做好了內存安全機制,垃圾回收機制,try異常捕捉機制等等,(普通的C程序沒有這些) 在這個意義上,虛擬機又像是一個操作系統;

補充樓主的補充:

C語言的程序無法做到在一個平台上製作,代碼拿到另一個平台編譯後就可以運行! 最重要的原因是位元組長度問題,如在32位機器上一個整數佔4個位元組,但在64位機器上就佔8個位元組。 這時程序編譯就會出錯。
一個位元組佔8位,所以32位有4個位元組,所以32位機器每次進行操作的單位是4位元組,而64位機器是8位元組,這是速度明顯快過32機的原因。
所以~~~~~~~ 很多在windowsXP下可以跑的游戲和軟體在Windows Vista下去跑就會掛掉。 或者根本不給你安裝.

虛擬機在這兩年內是不太可能開源的,sun是有限制地進行了開源,他開源的是他的一部分Java編程語言, 你用這些java代碼是開源的,用它們來製作軟體,但是軟體必須跑在虛擬機之上,虛擬機就不是開源的了。也許過幾年java會做一些虛擬機的開源項目出來,但現在還不會。
另一方面,sun也做了一些開源項目, 如收購的Hibernater,mySql,等等

Bea是不是由sun做的我不太清楚,不過看Bea和sun的關系還是很緊的,我想既使不是sun做的,那技術也來源於sun

在嵌入式開發界,有很多公司都己經在開發虛擬機,但這些只是sun的冰山一角。這些虛擬機只能運行在手機、電視機頂盒等上面跑Kjava的 cdc和cldc程序
離sun的差距還挺大, 但過幾年世界上也許會有新的sun公司出來. 呵呵,讓我們拭目以待

閱讀全文

與java虛擬機源碼相關的資料

熱點內容
程序員簡易表白代碼 瀏覽:163
什麼是無線加密狗 瀏覽:60
國家反詐中心app為什麼會彈出 瀏覽:64
cad壓縮圖列印 瀏覽:100
網頁打開速度與伺服器有什麼關系 瀏覽:859
android開發技術文檔 瀏覽:62
32單片機寫程序 瀏覽:43
三星雙清無命令 瀏覽:835
漢壽小程序源碼 瀏覽:340
易助erp雲伺服器 瀏覽:530
修改本地賬戶管理員文件夾 瀏覽:416
python爬蟲工程師招聘 瀏覽:283
小鵬p7聽音樂哪個app好 瀏覽:354
linux下的防火牆 瀏覽:954
凌達壓縮機美芝壓縮機 瀏覽:350
php後面代碼不執行 瀏覽:236
微我手機怎樣設置應用加密 瀏覽:203
條件加密 瀏覽:628
androidstudio設置中文 瀏覽:641
汽車換壓縮機能提升製冷 瀏覽:629