Java常量的基本型別在位元組碼中的規範定義
以下內容來自《Java特種兵》
型別字元 | 對應型別 | 說明 |
---|---|---|
B | byte | 代表位元組,但不是Byte的意思 |
Z | boolean | 代表布林值,同樣不是Boolean值 |
S | short | |
C | char | |
I | int | |
J | long | |
F | float | |
D | double | |
V | void | 沒有返回值 |
LClassName; | Reference | 引用類,例如String被標識為:Ljava/lang.String; |
[ | Array Reference | 陣列的引用,例如double[][]被標識為:[[D;String[]被標識為:[Ljava.lang.String; |
以上是在位元組碼中的規範定義。
之前用jmap命令檢視java應用中的物件內容的時候,輸出的一堆東西看不懂,但是對照著上面的規範之後就很清晰明瞭了,
1.用jps -l
java應用
[[email protected] ~]$ jps -l
17439 sun.tools.jps.Jps
31456 com.test.bootstrap.Main
[[email protected] ~]$
2.輸入命令jmap -histo:live 31456|more
[[email protected] ~]$ jmap -histo:live 31456|more
num #instances #bytes class name
----------------------------------------------
1: 206707 14594424 [C
2: 69903 9904328 <constMethodKlass>
3: 69903 8959328 <methodKlass>
4 : 6543 7538872 <constantPoolKlass>
5: 206312 4951488 java.lang.String
6: 6543 4829504 <instanceKlassKlass>
7: 5680 4465248 <constantPoolCacheKlass>
8: 17715 2113904 [B
9: 54203 1734496 java.lang.ref.WeakReference
10: 2882 1486608 <methodDataKlass>
11: 39774 1272768 java.util.concurrent.ConcurrentHashMap$HashEntry
12: 30530 1221200 java.util.LinkedHashMap$Entry
13: 22637 905480 java.lang.ref.SoftReference
14: 14081 788536 java.beans.MethodDescriptor
15: 21827 754632 [Ljava.lang.Object;
16: 7799 684168 [Ljava.util.HashMap$Entry;
17: 6978 682856 java.lang.Class
18: 12115 678440 java.util.LinkedHashMap
19: 28127 675048 java.beans.MethodRef
20: 8424 673920 java.lang.reflect.Method
21: 8810 577704 [S
22: 7702 561816 [I
23: 10000 530096 [[I
像以上內容的[C
、[[I
等等就能知道具體的含義了,char陣列引用和int[][]引用。
相關推薦
Java常量的基本型別在位元組碼中的規範定義
以下內容來自《Java特種兵》 型別字元 對應型別 說明 B byte 代表位元組,但不是Byte的意思 Z boolean 代表布林值,同樣不是B
java反射機制——獲取位元組碼對應類中的函式
package cn.itcast.reflect.demo; import java.lang.reflect.Constructor; import java.lang.reflect.Method; //獲取類中的函式 public class ReflectDemo4 { public
java反射機制——獲取位元組碼對應類中的欄位
package cn.itcast.reflect.demo; import java.lang.reflect.Field; public class ReflectDemo3 { public static void main(String[] args) throws ClassNot
[java虛擬機器]--(2)位元組碼檔案--(3)常量池
宣告: Author:趙志乾 Date:2018-6-18 Declaration:All Right Reserved!!! 背景知識: 常量池這一概念在虛擬機器記憶體章節中也提到過(《虛擬機器記憶體》)。虛擬機器記憶體中的常量池位於方法區內,其
java虛擬機器5 位元組碼
java位元組碼本質是java程式的格式化表示,便於機器處理。所以他是java程式的另一種表示,java程式包含的資訊他都包含並且更加結構化。 java虛擬機器位元組碼格式: magic 魔數,標識該檔案是一個位元組碼檔案。 minor_version major_ver
java反射機制——獲取位元組碼對應類的物件
package cn.itcast.reflect.demo; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import cn.itcast.bean.demo
深入拆解虛擬機器(二)Java的基本型別
Java基本型別 (1)boolean型別在Java虛擬機器中被對映為整數型別:"true"被對映為1,"false"被對映為0。Java中的邏輯運算以及條件跳轉,都是用整數相關的位元組碼來實現的 (2)除boolean型別外,Java還有另外7個基本型別。它們擁有不同的值域,但
深入理解Java虛擬機器(七)位元組碼執行引擎(棧幀、動態連線、方法呼叫)
執行引擎是Java虛擬機器最核心的組成部分之一。“虛擬機器”是一個相對於“物理機”的概念,這兩種機器都有程式碼執行能力,其區別是物理機的執行引擎是直接建立在處理器、硬體、指令集和作業系統層面上的,而虛擬機器的執行引擎則是由自己實現的,因此可以自行制定指令集與執行引擎的結構體系,並且能夠執
Java基礎-----基本型別包裝類概述
前言 將基本資料型別封裝成物件的好處在於可以在物件中定義更多的功能方法操作該資料。 Integer概述 Integer類在物件中包裝了一個基本型別int的值,該類提供了多個方法,能在int型別和String型別之間相互轉換。 構造方法 1、public Int
java不同基本型別之間的運算
一、不同基本型別 在JAVA中,基本型別(除了boolean外)可以自動轉換的,轉換形式為:byte,short,char – int –long–float–double這就是自動轉換的順序了,其中byte,short,char在運算時是自動轉換為int型的
Java基礎篇(JVM)——位元組碼詳解
這是Java基礎篇(JVM)的第一篇文章,本來想先說說Java類載入機制的,後來想想,JVM的作用是載入編譯器編譯好的位元組碼,並解釋成機器碼,那麼首先應該瞭解位元組碼,然後再談載入位元組碼的類載入機制似乎會好些,所以這篇改成詳解位元組碼。 由於Java純面向物件的特性,位元組碼只要能表示一個類的資訊,就可以
[三] java虛擬機器 JVM位元組碼 指令集 bytecode 操作碼 指令分類用法 助記符
上面關於dup的描述摘自 虛擬機器規範,很難理解看起來是非常難以理解的,不妨換一個角度我們知道區域性變數的空間分配分為兩種long 和 double 佔用2個slot 其他佔用一個運算元棧,每個單位可以表示虛擬機器支援的任何的一個數據型別不過運算元棧其實同區域性變數一樣,他也是被組織一個數組, 每個元素的資
Java基礎-基本型別變數和引用型別變數
前言 每個變數佔據了一定的記憶體位置,宣告一個變數時,就是在告知編譯器這個變數可以存放什麼型別(佔據多少個位元組的記憶體)。 什麼是基本型別變數 一、定義 JAVA語言本身定義的整型、字元型、浮點型和布林型別是基本型別變數,通俗來說可利用關鍵字宣告的變數
Java傳遞基本型別:值傳遞,物件作為引數:引用傳遞
值傳遞:方法呼叫時,實際引數把它的值傳遞給對應的形式引數,方法執行中形式引數值的改變不影響實際參 數的值。 引用傳遞:也稱為傳地址。方法呼叫時,實際引數的引用(地址,而不是引數的值)被傳遞給方法中相對應的形式引數,在方法執行中,對形式引數的操作實際上就是對實際引數的操作,方
Java八大基本型別詳解與包裝類
java八大基本型別: 整型: byte: byte資料型別是8位、有符號的,以二進位制補碼錶示的整數; 最小值是-128(-2^7); 最大值是127(2^7-1); 預設值是0; byte型別用在
Java基礎——基本型別和包裝類、基本型別和字串之間的轉換
基本型別和包裝類之間的轉換 基本型別和包裝類之間經常需要互相轉換,以 Integer 為例(其他幾個包裝類的操作雷同哦): 在 JDK1.5 引入自動裝箱和拆箱的機制後,包裝類和基本型別之間的轉換就更加輕鬆便利了。 那什麼是裝箱和拆箱呢?我們分別來看下 裝箱:把基本型別轉換成包裝類,使其具有物件的
02 Java 的基本型別
Java 的基本型別 Java 包括了八種基本型別,明細如下: Java 的基本型別都有對應的值域和預設值。byte,short,int,long,float以及double的值域依次擴大,前面的值域都被後面的值域包括在內。所以,從前面的基本型別轉換成後面的基本型別,無需強制轉換。補充:儘管它們的預設值
從java反編譯學習位元組碼指令(一)
最近沉迷於java反編譯,經常看到iconst_1指令,見得多了,也讓我對它感到很好奇,它是不是就是固定代表int 1啊? 做個小測試,從11到0,看看它們分別對應位元組碼什麼? public class Bytecode { public void ByteCo
位,位元,位元組,基本型別位元組數
首先要弄清介個概念: 1. 位=bit=位元(bit) 表示二進位制位,位是計算機內部資料儲存的最小單位. 1位元就是1位 2. 位元組=Byte 1Byte(位元組) = 8bit(位元) 一個位元組存放一個ASCII碼,1個英文字母佔1個位元組的空間,1箇中文漢字佔
Java虛擬機器之位元組碼執行引擎
1 概述 虛擬機器執行引擎是Java虛擬機器最核心的部分之一,其目的是實現:輸入位元組碼檔案,將位元組碼解析或等效處理後,執行並輸出結果。 其中兩種執行方式:解釋執行和編譯執行。 2 執行時棧幀結構 棧幀(Stack Frame)是用於支援虛擬機器進