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

圖解JVM整體結構、執行流程以及兩種架構模型,你學會了嗎?

云計算 虛擬化
Java 編譯器輸入的指令流基本上是一種基于棧的指令集架構,另外一種指令集架構則是基于寄存器的指令集架構。

[[431325]]

 JVM整體結構 

圖解JVM整體結構、執行流程以及2種架構模型,你學會了嗎? 
  • HotSpot VM 是目前市面上高性能虛擬機的代表作之一。
  • 方法區和堆:多線程共享
  • 虛擬機棧、本地方法棧、程序計數器:每個線程獨有一份
  • 執行引擎:包含三部分:解釋器,及時編譯器(后端編譯器),垃圾回收器
  • 它采用解釋器與即時編譯器并存的架構。
  • 在今天,Java 程序的運行性能早已脫胎換骨,已經達到了可以和 C/C++ 程序一較高下的地步。 
圖解JVM整體結構、執行流程以及2種架構模型,你學會了嗎? 

Java 代碼執行流程 

圖解JVM整體結構、執行流程以及2種架構模型,你學會了嗎? 

只是能生成被 Java 虛擬機所能解釋的字節碼文件,那么理論上就可以自己設計一套代碼了

解釋器:保證相應時間,負責解釋執行的速度

JIT編譯器:負責編譯的性能,針對字節碼指令,熱點代碼,放在方法區緩存起來,下次遇見直接變成二進制指令

JVM 的架構模型

Java 編譯器輸入的指令流基本上是一種基于棧的指令集架構,另外一種指令集架構則是基于寄存器的指令集架構。

具體來說:這兩種架構之間的區別:

基于棧式架構

  • 設計和實現更簡單,適用于資源受限的系統;
  • 避開了寄存器的分配難題:使用零地址指令方式分配。
  • 指令流中的指令大部分是零地址指令,其執行過程依賴于操作棧。指令集更小,編譯器容易實現。
  • 不需要硬件支持,可移植性更好,更好實現跨平臺

基于寄存器架構

  • 典型的應用是 x86 的二進制指令集:比如傳統的 PC 以及 Android 的 Davlik 虛擬機。
  • 指令集架構則完全依賴硬件,可移植性差
  • 性能優秀和執行更高效
  • 花費更少的指令去完成一項操作。
  • 在大部分情況下,基于寄存器架構的指令集往往都以一地址指令、二地址指令和三地址指令為主,而基于棧式架構的指令集卻是以零地址指令為主

舉例

同樣執行2+3這種邏輯操作,其指令分別如下:

基于棧的計算流程(以Java虛擬機為例):

  1. iconst_2 // 常量2入棧 
  2. istore_1 
  3. iconst_3 // 常量3入棧 
  4. istore_2 
  5. iload_1 
  6. iload_2 
  7. iadd    //常量2/3出棧,執行相加 
  8. istore_0 // 結果5入棧 

而基于寄存器的計算流程

  1. mov eax,2 //將eax寄存器的值設為 
  2. 1add eax,3 //使eax寄存器的值加3 

字節碼反編譯

我們編寫一個簡單的代碼,然后查看一下字節碼的反編譯后的結果

  1. public class StackStruTest { 
  2.   public static void main(String[] args) { 
  3.     int i = 2 + 3; 
  4.   } 

然后我們找到編譯后的 class 文件,使用下列命令進行反編譯

  1. javap -v(verbose) StackStruTest.class 

得到的文件為:

  1. public static void main(java.lang.String[]); 
  2.     descriptor: ([Ljava/lang/String;)V 
  3.     flags: ACC_PUBLIC, ACC_STATIC 
  4.     Code: 
  5.       stack=2, locals=4, args_size=1 
  6.          0: iconst_2 
  7.          1: istore_1 
  8.          2: iconst_3 
  9.          3: istore_2 
  10.          4: iload_1 
  11.          5: iload_2 
  12.          6: iadd 
  13.          7: istore_3 
  14.          8: return 
  15.       LineNumberTable: 
  16.         line 9: 0 
  17.         line 10: 2 
  18.         line 11: 4 
  19.         line 12: 8 
  20.       LocalVariableTable: 
  21.         Start  Length  Slot  Name   Signature 
  22.             0       9     0  args   [Ljava/lang/String; 
  23.             2       7     1     i   I 
  24.             4       5     2     j   I 
  25.             8       1     3     k   I 
  26.   

總結

由于跨平臺性的設計,Java 的指令都是根據棧來設計的。

不同平臺 CPU 架構不同,所以不能設計為基于寄存器的。

優點是跨平臺,指令集小,編譯器容易實現

缺點是性能下降,實現同樣的功能需要更多的指令。

時至今日,盡管嵌入式平臺已經不是 Java 程序的主流運行平臺了(準確來說應該是 HotSpotVM 的宿主環境已經不局限于嵌入式平臺了),那么為什么不將架構更換為基于寄存器的架構呢?

總結:因為已經夠用了

跨平臺性

指令集小

指令多

執行性能比寄存器差

 

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2025-01-16 08:38:34

2023-08-28 07:02:10

2023-05-29 07:43:32

JVM內存調優

2023-07-31 07:33:05

JVM調優Full GC

2023-05-05 08:29:15

Spring后臺服務器

2011-06-15 13:07:10

JSP和JavaBea

2024-01-19 08:25:38

死鎖Java通信

2024-02-04 00:00:00

Effect數據組件

2023-07-26 13:11:21

ChatGPT平臺工具

2023-01-10 08:43:15

定義DDD架構

2024-11-13 11:12:08

JVM內存區域

2022-06-04 07:46:41

HeapJVM

2021-07-01 19:22:33

腳本Shell參數

2024-01-02 12:05:26

Java并發編程

2023-08-01 12:51:18

WebGPT機器學習模型

2024-09-27 10:27:50

2023-10-10 11:04:11

Rust難點內存

2024-05-06 00:00:00

InnoDBView隔離

2023-01-30 09:01:54

圖表指南圖形化

2024-07-31 08:39:45

Git命令暫存區
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 97色在线视频 | 毛片一区二区三区 | 成人美女免费网站视频 | 成人免费视频网站在线观看 | 久久精品国产免费看久久精品 | 91久久久久久久久久久 | 色婷婷综合久久久久中文一区二区 | 国产一区二区欧美 | 男人天堂网址 | 黄色大片视频 | 少妇一区在线观看 | 九九亚洲 | 欧美一级久久久猛烈a大片 日韩av免费在线观看 | 丁香婷婷综合激情五月色 | 国产精品视频久久久久 | 亚洲激情一区二区三区 | 成人欧美一区二区三区黑人孕妇 | 91免费小视频| 久久国| 国产精品久久久久一区二区三区 | 免费看黄视频网站 | 久久免费资源 | 久久免费国产 | 在线观看成人小视频 | 亚洲一区二区精品视频 | 亚洲日韩中文字幕 | 久久亚洲一区二区三区四区 | 精品欧美乱码久久久久久1区2区 | 日本久久一区二区三区 | 精品国产乱码久久久久久闺蜜 | 免费观看一级特黄欧美大片 | 九九九久久国产免费 | 日韩在线视频免费观看 | 久久久久久综合 | 孰女乱色一区二区三区 | 综合色影院 | 在线欧美亚洲 | 欧美一级二级视频 | 精品国产欧美 | 天天躁人人躁人人躁狂躁 | 欧美激情一区二区三级高清视频 |