摘要:原始類型和值虛擬機支持的原始數據類型是數字類型布爾類型和類型。,其值為位帶符號的二進制補碼整數,其默認值為零。
Java虛擬機的結構
本文檔指定了一個抽象機器,它沒有描述Java虛擬機的任何特定實現。
要正確實現Java虛擬機,你只需要能夠讀取類文件格式并正確執行其中指定的操作,不屬于Java虛擬機規范的實現細節會不必要地限制實現者的創造力。例如,運行時數據區的內存布局、使用的垃圾收集算法、Java虛擬機指令的任何內部優化(例如,將它們轉換為機器代碼)由實現者自行決定。
本規范中對Unicode的所有引用都是針對Unicode標準版本11.0.0給出的,可從http://www.unicode.org/獲取。
class文件格式由Java虛擬機執行的編譯代碼使用獨立于硬件和操作系統的二進制格式表示,通常(但不一定)存儲在文件中,稱為class文件格式,類文件格式精確地定義了類或接口的表示,包括可能在特定于平臺的目標文件格式中被認為是理所當然的字節排序等細節。
第4章“class文件格式”詳細介紹了class文件格式。
數據類型與Java編程語言一樣,Java虛擬機也可以使用兩種類型:原始類型和引用類型。相應地,有兩種值可以存儲在變量中、作為參數傳遞、由方法返回,并對其進行操作:原始值和引用值。
Java虛擬機期望幾乎所有類型檢查都在運行時之前完成,通常由編譯器完成,而不必由Java虛擬機本身完成,原始類型的值不需要被標記或以其他方式檢查以在運行時確定它們的類型,或者與引用類型的值區分開來。相反,Java虛擬機的指令集使用對特定類型的值進行操作的指令來區分其操作數類型,例如,iadd、ladd、fadd和dadd都是Java虛擬機指令,它們添加兩個數值并產生數值結果,但每個指令都專門分別用于其操作數類型:int、long、float和double。
Java虛擬機包含對對象的顯式支持,對象是動態分配的類實例或數組,對對象的引用被視為具有Java虛擬機類型引用,類型引用的值可以被認為是指向對象的指針,一個對象可能存在多個引用,對象總是通過類型引用的值操作、傳遞和測試。
原始類型和值Java虛擬機支持的原始數據類型是數字類型、布爾類型和returnAddress類型。
數字類型由整數類型和浮點類型組成。
整數類型是:
byte,其值為8位有符號二進制補碼整數,其默認值為零。
short,其值為16位有符號二進制補碼整數,其默認值為零。
int,其值為32位帶符號的二進制補碼整數,其默認值為零。
long,其值為64位帶符號的二進制補碼整數,其默認值為零。
char,其值為16位無符號整數,表示基本多語言平面中的Unicode代碼點,使用UTF-16編碼,其默認值為空代碼點("u0000")。
浮點類型是:
float,其值是浮點值集的元素,或者,如果支持,則為浮點擴展指數值集,其默認值為正零。
double,其值是雙精度值集的元素,或者,如果支持,則為雙精度擴展指數值集,其默認值為正零。
布爾類型的值對真值true和false進行編碼,默認值為false。
Java?虛擬機規范的第一版沒有將布爾值視為Java虛擬機類型,但是,布爾值在Java虛擬機中的支持有限,Java?虛擬機規范的第二版通過將布爾值視為一種類型來澄清該問題。
returnAddress類型的值是指向Java虛擬機指令操作碼的指針,在原始類型中,只有returnAddress類型與Java編程語言類型沒有直接關聯。
整數類型和值Java虛擬機的整數類型的值是:
對于byte,從-128到127(-27到27 - 1),包括端值。
對于short,從-32768到32767(-215到215 - 1),包括端值。
對于int,從-2147483648到2147483647(-231到231 - 1),包括端值。
對于long,從-9223372036854775808到9223372036854775807(-263到263 - 1),包括端值。
對于char,從0到65535,包括端值。
浮點類型、值集和值浮點類型是float和double,概念上與IEEE二進制浮點算術標準中規定的32位單精度和64位雙精度格式IEEE 754值和運算相關聯。
IEEE 754標準不僅包括正負號數,還包括正負零,正負無窮大,以及特殊的非數字值(以下簡稱為“NaN”),NaN值用于表示某些無效操作的結果,例如將零除以零。
Java虛擬機的每個實現都需要支持兩個浮點值的標準集,稱為浮點值集和雙精度值集,此外,Java虛擬機的實現可以選擇支持兩個擴展指數浮點值集中的一個或兩個,稱為浮點擴展指數值集和雙精度擴展指數值集,在某些情況下,可以使用這些擴展指數值集代替標準值集來表示float或double類型的值。
任何浮點值集的有限非零值都可以表示為s · m · 2(e - N + 1),其中s為+1或-1,m是小于2N的正整數,e是Emin = -(2K-1-2)和Emax = 2K-1-1之間的整數,包括端值,其中N和K是依賴于值集的參數。有些值可以用多種方式以這種形式表示,例如,假設值集中的值v可能使用s、m和e的某些值表示為此形式,那么如果m是偶數且e小于2K-1,則可以將m減半,將e增加1,以產生相同值v的第二個表示。如果m ≥ 2N-1,這種形式的表示稱為標準化,否則該表示被稱為非標準化,如果值集中的值不能以m ≥ 2N-1的方式表示,則該值稱為非標準化值,因為它沒有標準化表示。
下表中總結了對兩個必需和兩個可選浮點值集的參數N和K(以及派生參數Emin和Emax)的約束。
參數 | 浮點 | 浮點擴展指數 | 雙精度 | 雙精度擴展指數 |
---|---|---|---|---|
N | 24 | 24 | 53 | 53 |
K | 8 | ≥ 11 | 11 | ≥ 15 |
Emax | +127 | ≥ +1023 | +1023 | ≥ +16383 |
Emin | -126 | ≤ -1022 | -1022 | ≤ -16382 |
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/75002.html
摘要:此處指定的虛擬機與平臺兼容,并支持語言規范中指定的編程語言。第章說明了虛擬機的指令集,按字母順序顯示操作碼助記符。 介紹 一點歷史 Java?編程語言是一種通用的、并發的、面向對象的語言,它的語法類似于C和C++,但它省略了許多使C和C++復雜、混亂和不安全的特性。最初開發Java平臺是為了解決為聯網的消費者設備構建軟件的問題,它旨在支持多種主機架構,并允許安全交付軟件組件,為了滿足這...
摘要:虛擬機規范介紹虛擬機介紹虛擬機的結構文件格式數據類型原始類型和值引用類型和值運行時數據區幀對象的表示浮點算術特殊方法異常指令集匯總類庫公有設計,私有實現編譯虛擬機格式示例使用常量局部變量和控制結構算術訪問運行時常量池更多控制示例接收參數調用 Java虛擬機規范 Java SE 12 Edition 介紹 Java虛擬機介紹 Java虛擬機的結構 class文件格式 數據類型 原始類型...
摘要:二驗證驗證主要是為了確保文件的字節流中包含的信息符合當前虛擬機的要求,并且不會危害虛擬機的自身安全。五初始化類的初始化階段是類加載過程的最后一步,該階段才真正開始執行類中定義的程序代碼或者說是字節碼。 關注我,每天三分鐘,帶你輕松掌握一個Java相關知識點。 虛擬機(JVM)經常出現在我們面試中,但是工作中卻很少遇到,導致很多同學沒有去了解過。其實除了應付面試,作為java程序員,了解...
摘要:方法區在實際內存空間站可以是不連續的。這一規定,可以說是給了虛擬機廠商很大的自由。但是值得注意的是,堆其實還未每一個線程單獨分配了一塊空間,這部分空間在分配時是線程獨享的,在使用時是線程共享的。 在我的博客中,之前有很多文章介紹過JVM內存結構,相信很多看多我文章的朋友對這部分知識都有一定的了解了。 那么,請大家嘗試著回答一下以下問題: 1、JVM管理的內存結構是怎樣的? 2、不同的...
在社會化分工、軟件行業細分專業化的趨勢下,會真的參與到底層系統實現的人肯定是越來越少(比例上說)。真的會參與到JVM實現的人肯定是少數。 但如果您對JVM是如何實現的有興趣、充滿好奇,卻苦于沒有足夠系統的知識去深入,那么可以參考RednaxelaFX整理的這個書單。 showImg(http://segmentfault.com/img/bVbGzn); 本豆列的脈絡是: 1. JV...
閱讀 2580·2021-11-22 09:34
閱讀 948·2021-11-19 11:34
閱讀 2807·2021-10-14 09:42
閱讀 1488·2021-09-22 15:27
閱讀 2391·2021-09-07 09:59
閱讀 1741·2021-08-27 13:13
閱讀 3438·2019-08-30 11:21
閱讀 780·2019-08-29 18:35