<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hant-TW">
	<id>https://wiki.taigi.ima.org.tw/w/index.php?action=history&amp;feed=atom&amp;title=Java%E4%BD%8D%E5%85%83%E7%B5%84%E7%A2%BC</id>
	<title>Java位元組碼 - 修訂紀錄</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.taigi.ima.org.tw/w/index.php?action=history&amp;feed=atom&amp;title=Java%E4%BD%8D%E5%85%83%E7%B5%84%E7%A2%BC"/>
	<link rel="alternate" type="text/html" href="https://wiki.taigi.ima.org.tw/w/index.php?title=Java%E4%BD%8D%E5%85%83%E7%B5%84%E7%A2%BC&amp;action=history"/>
	<updated>2026-04-13T08:19:22Z</updated>
	<subtitle>本 wiki 上此頁面的修訂紀錄</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.taigi.ima.org.tw/w/index.php?title=Java%E4%BD%8D%E5%85%83%E7%B5%84%E7%A2%BC&amp;diff=373365&amp;oldid=prev</id>
		<title>TaiwanTonguesApiRobot：​從 JSON 檔案批量匯入</title>
		<link rel="alternate" type="text/html" href="https://wiki.taigi.ima.org.tw/w/index.php?title=Java%E4%BD%8D%E5%85%83%E7%B5%84%E7%A2%BC&amp;diff=373365&amp;oldid=prev"/>
		<updated>2025-08-22T05:03:20Z</updated>

		<summary type="html">&lt;p&gt;從 JSON 檔案批量匯入&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新頁面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Java 位元組碼&amp;#039;&amp;#039;&amp;#039;（英語：Java bytecode）是 Java 虛擬機器執行的一款指令格式。大多數操作碼攏是一个位元組長，有一寡操作需要參數，致使著有一寡多位元組的操作碼。而且並毋是所有可能的兩百五十六葩操作碼攏予人咧用；其中五十一个操作碼予人保留做將來使用。除了這以外，原始 Java 平台開發商，昇陽微系統，額外保留三个代碼永久無使用。&lt;br /&gt;
&lt;br /&gt;
==佮 Java 的關係==&lt;br /&gt;
&lt;br /&gt;
一个 Java 程式設計師並無需要理解所有的 Java 位元組碼。猶毋過，就親像 IBM developerWorks 周刊建議的按呢：「 理解位元組碼以及理解 Java 編譯器如何生成 Java 位元組碼佮學習組譯智識對 C / C + + 程式設計師有仝款的意義。」&lt;br /&gt;
&lt;br /&gt;
==指令==&lt;br /&gt;
&lt;br /&gt;
每一个位元組，有兩百五十六个可能的代碼值（二十八=兩百五十六）， 所以一个位元組的操作碼上濟可能有二百五十六種無仝款的操作。其中，零 x 零、零 xFE、零 xCA、零 xFF 予人指定保留。譬如講零 xCA 做為一个 Java 除錯器的斷指令若無被語言使用。相𫝛的地，零 xFE 佮零 xFF 嘛無予語言使用。&lt;br /&gt;
&lt;br /&gt;
指令會當基本分為以下幾類：&lt;br /&gt;
&lt;br /&gt;
* 儲存指令（比如講：aload \ _ 零 , istore）&lt;br /&gt;
* 算術佮邏輯指令（比如講 : ladd , fcmpl）&lt;br /&gt;
* 類型轉換指令（比如講：i 二 b , d 二 i）&lt;br /&gt;
* 物件建立佮操作指令（比如講：new , putfield）&lt;br /&gt;
* 疊操作指令（比如講：swap , dup 二）&lt;br /&gt;
* 控制轉移指令（比如講：ifeq , goto）&lt;br /&gt;
* 方法呼叫佮返回指令（比如講：invokespecial , areturn )&lt;br /&gt;
&lt;br /&gt;
除了這以外，閣有一寡閣較特殊的指令，當做異常跋無仝步等作用。&lt;br /&gt;
&lt;br /&gt;
大多數的指令有字條佮（抑是）字尾來表明其運算元的類型。如下表比如講，&amp;quot; iadd &amp;quot; 指令將兩个整數相加；而且 &amp;quot; dadd &amp;quot; 指令共兩个 double 浮點數相加。此外，&amp;quot; const &amp;quot;、&amp;quot; load &amp;quot;、&amp;quot; store &amp;quot; 等命令閣會使用 &amp;quot; \ _ n &amp;quot; 字尾，其中 &amp;quot; load &amp;quot; 和 &amp;quot; store &amp;quot; 命令著的 _ n _ 會當為零到三之間的整數；而且 &amp;quot; const &amp;quot; 命令著的 n 由類型指定。&lt;br /&gt;
&amp;quot; const &amp;quot; 指令共一个指定類型的值囥入去疊。比如講 &amp;quot; iconst \ _ 五 &amp;quot; 指令共一个整數五囥落來疊起來；而且 &amp;quot; dconst \ _ 一 &amp;quot; 共一个雙精度浮點數一囥入去疊。&lt;br /&gt;
此外閣有 &amp;quot; aconst \ _ null &amp;quot; 指令，放入一个 null 進堆疊。而對 &amp;quot; load &amp;quot; &amp;quot; store &amp;quot; 指令著的 n，指定了變數表內底的儲存位置。&amp;quot; aload \ _ 零 &amp;quot; 指令共佇變數零中的物件（通常是 &amp;quot; this &amp;quot; 東西）囥入去疊，&amp;quot; istore \ _ 一 &amp;quot; 指令共棧頂的一个整數囥入變數一 . 對閣較懸的變數，這字尾將去除，這條指令將需要運算元。&lt;br /&gt;
&lt;br /&gt;
==計算模型==&lt;br /&gt;
&lt;br /&gt;
Java 位元組碼的計算模型是疊導向結構電腦的。比如講，一个 x 八十六處理器的組譯代碼如下這段代碼將兩數值相加，並存入另外一个位址。相𫝛的反組譯位元組碼如下佇遮，需要相加的兩個運算元予人囥入去疊，相加操作就佇咧棧中進行，其實嘛予人囥入去疊。儲存指令了後共棧頂的資料囥入一个變數位址。佇逐條指令頭前的數字干焦是表示這條指令方法開始處的偏移值。這種堆疊結構嘛會當推廣到物件導向模型上。比如講，有一个 &amp;quot; getName &amp;quot; 方法假下&lt;br /&gt;
&lt;br /&gt;
==例==&lt;br /&gt;
&lt;br /&gt;
考慮如下 Java 代碼假設上術代碼位佇一个函式當中，Java 編譯器可能共代碼翻做下述的 Java 位元組碼。&lt;br /&gt;
&lt;br /&gt;
==是因為 Java 位元組碼的語言==&lt;br /&gt;
&lt;br /&gt;
上捷用的彼个基於 Java 位元組碼的語言就是開發出 Java 位元組碼的 Java 語言。伊起先，干焦存在一个由昇陽微系統開發的一个編譯器 javac。這馬 Java 位元組碼規範已經會用得著，所以，第三方公司亦開發出支援 Java 位元組碼的編譯器。比如講：&lt;br /&gt;
&lt;br /&gt;
* Jikes，編譯 Java 原始碼到 Java 位元組碼（由 IBM 開發，用 C + + 實現）&lt;br /&gt;
* Espresso，編譯 Java 原始碼到 Java 位元組碼（干焦支援 Java 一垺零）&lt;br /&gt;
* GCJ，GNU Compiler for Java，編譯 Java 代碼到 Java 位元組碼；抑是會當編譯著機械碼。做為 GNU Compiler Collection ( GCC ) 的一部份提供。&lt;br /&gt;
&lt;br /&gt;
有一寡案提供 Java 組譯器就較好直接用 Java 位元組碼進行開發。主要的 Java 組譯器如下：&lt;br /&gt;
&lt;br /&gt;
* Jasmin，讀取 Java 類別的文字描寫；用一種簡單的使用 Java 虛擬機器指令的類組譯語法，輸出 Java 類別檔案&lt;br /&gt;
* Jamaica，一種為 Java 虛擬機器編寫的宏組合語言。其中，會當介面由 Java 語法定義，抑若其中的方法煞由 Java 位元組碼定義。&lt;br /&gt;
&lt;br /&gt;
閣有其他的一寡編譯器，對其他的語言生成 Java 位元組碼，使其實會當執行佇 Java 虛擬機器之上。&lt;br /&gt;
&lt;br /&gt;
* ColdFusion&lt;br /&gt;
* JRuby 和 Jython，兩種因為 Ruby 和 Python 的手稿語言&lt;br /&gt;
* Groovy , 一種因為 Java 的手稿語言&lt;br /&gt;
* Scala , 一種類型安全的通用程式語言，支援物件導向程式設計佮函式語言程式設計&lt;br /&gt;
* JGNAT 和 AppleMagic , 編譯 Ada 語言到 Java 位元組碼&lt;br /&gt;
* Clojure , 一種函數式的通用程式語言，提供優秀的並行性。是一種 LISP 方言&lt;br /&gt;
* MIDletPascal&lt;br /&gt;
* JavaFX Script 由昇陽微系統公司開發的一種手稿語言，執行 Java 虛擬機器之上&lt;br /&gt;
&lt;br /&gt;
==執行==&lt;br /&gt;
&lt;br /&gt;
當前已經有足濟種 Java 虛擬機器產品，包括著自由軟體佮商業軟體。&lt;br /&gt;
若佇咧 Java 虛擬機器之中執行 Java 位元組碼並無理想，會當使用一寡工具譬如講 GNU Compiler for Java 將 Java 代碼抑是講 Java 位元組碼編譯做機器碼並由硬體直接執行。&lt;br /&gt;
閣有一寡處理器會當直接執行 Java 位元組碼，這種處理器名做 Java 處理器。&lt;br /&gt;
&lt;br /&gt;
==對動態語言的支援==&lt;br /&gt;
&lt;br /&gt;
Java 虛擬機器對動態型別語言提供了一定的支援。但是真多數 Java 虛擬機器指令集是因為靜態型別語言的。佇靜態型別機制下，方法呼叫中的類型分析攏是咧編譯的時執行的，而且欠缺一種機制佇執行的時陣確定一个類型已經確定相應的方法。&lt;br /&gt;
&lt;br /&gt;
JSR 兩百九十二中，佇咧 Java 虛擬機器層次增加一種支援動態型別的指令 ` invokedynamic `，以支援佇動態型別檢測中的方法呼叫。達文西機器是一種支援這種動態型莫呼叫的虛擬機器。所有支援 JSE 七的 Java 虛擬機器攏應支援 invokedynamic 操作碼。&lt;br /&gt;
&lt;br /&gt;
==參考文獻==&lt;br /&gt;
&lt;br /&gt;
[[分類: 待校正]]&lt;/div&gt;</summary>
		<author><name>TaiwanTonguesApiRobot</name></author>
	</entry>
</feed>