1. 程式人生 > >深入理解JVM規範

深入理解JVM規範

Compiled from "HelloWorld.java"
public class HelloWorld extends java.lang.Object
  SourceFile: "HelloWorld.java"
  minor version: 0
  major version: 50
  Constant pool:
const #1 = Method	#6.#28;	//  java/lang/Object."<init>":()V
const #2 = Field	#29.#30;	//  java/lang/System.out:Ljava/io/PrintStream;
const #3 = Method	#31.#32;	//  java/io/PrintStream.println:(Ljava/lang/String;)V
const #4 = String	#33;	//  Hello,Wolrd
const #5 = class	#34;	//  HelloWorld
const #6 = class	#35;	//  java/lang/Object
const #7 = Asciz	<init>;
const #8 = Asciz	()V;
const #9 = Asciz	Code;
const #10 = Asciz	LineNumberTable;
const #11 = Asciz	LocalVariableTable;
const #12 = Asciz	this;
const #13 = Asciz	LHelloWorld;;
const #14 = Asciz	hello;
const #15 = Asciz	(Ljava/lang/String;)I;
const #16 = Asciz	txt;
const #17 = Asciz	Ljava/lang/String;;
const #18 = Asciz	test1;
const #19 = Asciz	test2;
const #20 = Asciz	(J)V;
const #21 = Asciz	i;
const #22 = Asciz	I;
const #23 = Asciz	t;
const #24 = Asciz	J;
const #25 = Asciz	j;
const #26 = Asciz	SourceFile;
const #27 = Asciz	HelloWorld.java;
const #28 = NameAndType	#7:#8;//  "<init>":()V
const #29 = class	#36;	//  java/lang/System
const #30 = NameAndType	#37:#38;//  out:Ljava/io/PrintStream;
const #31 = class	#39;	//  java/io/PrintStream
const #32 = NameAndType	#40:#41;//  println:(Ljava/lang/String;)V
const #33 = Asciz	Hello,Wolrd;
const #34 = Asciz	HelloWorld;
const #35 = Asciz	java/lang/Object;
const #36 = Asciz	java/lang/System;
const #37 = Asciz	out;
const #38 = Asciz	Ljava/io/PrintStream;;
const #39 = Asciz	java/io/PrintStream;
const #40 = Asciz	println;
const #41 = Asciz	(Ljava/lang/String;)V;
 
{
public HelloWorld();
  Code:
   Stack=1, Locals=1, Args_size=1
   0:	aload_0
   1:	invokespecial	#1; //Method java/lang/Object."<init>":()V
   4:	return
  LineNumberTable: 
   line 1: 0
 
  LocalVariableTable: 
   Start  Length  Slot  Name   Signature
   0      5      0    this       LHelloWorld;
 
 
public int hello(java.lang.String);
  Code:
   Stack=2, Locals=2, Args_size=2
   0:	getstatic	#2; //Field java/lang/System.out:Ljava/io/PrintStream;
   3:	aload_1
   4:	invokevirtual	#3; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   7:	iconst_1
   8:	ireturn
  LineNumberTable: 
   line 4: 0
   line 5: 7
 
  LocalVariableTable: 
   Start  Length  Slot  Name   Signature
   0      9      0    this       LHelloWorld;
   0      9      1    txt       Ljava/lang/String;
 
 
private void test1();
  Code:
   Stack=0, Locals=1, Args_size=1
   0:	return
  LineNumberTable: 
   line 9: 0
 
  LocalVariableTable: 
   Start  Length  Slot  Name   Signature
   0      1      0    this       LHelloWorld;
 
 
protected void test2(long);
  Code:
   Stack=1, Locals=5, Args_size=2
   0:	ldc	#4; //String Hello,Wolrd
   2:	astore_3
   3:	bipush	11
   5:	istore	4
   7:	bipush	12
   9:	istore	4
   11:	return
  LineNumberTable: 
   line 12: 0
   line 14: 3
   line 16: 7
   line 17: 11
 
  LocalVariableTable: 
   Start  Length  Slot  Name   Signature
   7      0      4    i       I
   0      12      0    this       LHelloWorld;
   0      12      1    t       J
   3      9      3    txt       Ljava/lang/String;
   11      1      4    j       I
 
 
}

相關推薦

深入理解JVM規範

Compiled from "HelloWorld.java" public class HelloWorld extends java.lang.Object SourceFile: "HelloWorld.java" minor version: 0 major version: 50 C

讀書筆記-深入理解JVM虛擬機-1.OOM初探

-a 最大 xms stat new 理解 虛擬機 class 當前 Java堆OOM(Out-Of-Memory)異常 執行例如以下程序,爆出異常 java.lang.OutOfMemoryError: Java heap space /** * VM Ar

深入理解JVM:HotSpot虛擬機對象探秘

意願 對象分配 初始化 處理 失敗 每一個 面向 this 線程id 對象的創建 java是一門面向對象的語言。在Java程序執行過程中無時無刻有Java對象被創建出來。在語言層面上,創建對象(克隆、反序列化)一般是一個newkeyword而已,而在虛

深入理解JVMJVM執行時數據區域分類

return 位置 工作 () 對象 地方法 存在 utm 連續 JVM在運行java程序的過程中會把他所管理的內存劃分為若幹個不同的數據區域。這些區域都有各自的用途和創建、銷毀時間。有些區域隨著虛擬機的啟動而存在。有些區域則依賴用戶線程的啟動和結束而建

深入理解JVM:垃圾收集器與內存分配策略

四種 內存回收 第一次 不可達 append test 方法 static hot 堆裏面存放著Java世界差點兒全部的對象實例,垃圾收集器在對堆進行回收前。第一件事情就是要確定這些對象之中哪些還存活,哪些已經死去。推斷對象的生命周期是否結束有下面幾種方

深入理解JVMJVM內存區域與內存分配

錯誤 銷毀 構造方法 初學 不存在 data 空閑 table fin 深入理解JVM之JVM內存區域與內存分配   在學習jvm的內存分配的時候,看到的這篇博客,該博客對jvm的內存分配總結的很好,同時也利用jvm的內存模型解釋了java程序中有關參數傳遞的問題。  

垃圾收集器與內存分配策略 (深入理解JVM二)

nali noclass eth 清理 full gc 原因 商業 jit編譯器 代碼 1.概述 垃圾收集(Garbage Collection,GC). 當需要排查各種內存溢出、內存泄露問題時,當垃圾收集成為系統達到更高並發量的瓶頸時,我們就需要對這些&ldquo

深入理解JVM內存模型

關聯 tab 理解 row 多人 嚴重 html obj 編譯期 我們知道,計算機CPU和內存的交互是最頻繁的,內存是我們的高速緩存區,用戶磁盤和CPU的交互,而CPU運轉速度越來越快,磁盤遠遠跟不上CPU的讀寫速度,才設計了內存,用戶緩沖用戶IO等待導致CPU的等待成本,

深入理解JVM(二)--垃圾收集算法

靜態 情況下 ref 遊戲 規模 還在 生存 案例 object 一. 概述     說起垃圾收集(Garbage Collection, GC), 大部分人都把這項技術當做Java語言的伴隨生產物. 事實上, GC的歷史遠遠比Java久遠, 1960年 誕生於MIT的Li

深入理解JVM閱讀筆記-內存溢出小結

list 小結 sof () add 表示 內存 保存 區域 JAVA系統除了程序計數器和虛擬機內存之外的其它幾個內存區域都有發生OutOfMemory(OOM)的可能。堆,棧,方法區,靜態常量池,直接內存,都是可能的。 1.Java堆溢出 Java堆用於存儲對象實例,只要

01 深入理解JVM的內存區域

啟動 也有 存在 jvm 入棧 並不是 第一次 部分 代碼 先來看看JVM運行時候的內存區域,如下圖:   大多數 JVM 將內存區域劃分為 Heap(堆)、方法區、Stack(棧)、本地方法棧、程序計數器。其中 Heap 和 方法區 是線程共享的,Stack、本地方法棧

深入理解JVM虛擬機》讀書筆記

經典 虛擬機 class 如果 理解 讀書筆記 audio nbsp log 前言:《深入理解JVM虛擬機》是JAVA的經典著作之一,因為內容更偏向底層,比較枯燥難啃,所以之前一直沒有好好的閱讀過。最近因為剛好有空,又有了新目標。所以打算和《構架師的12項修煉》一起看,這樣

深入理解JVM(六)——類加載器原理

區域 (六) HR tcl parse cep 引用關系 throws wid 我們知道我們編寫的java代碼,會經過編譯器編譯成字節碼文件(class文件),再把字節碼文件裝載到JVM中,映射到各個內存區域中,我們的程序就可以在內存中運行了。那麽字節碼文件是怎樣裝載到JV

深入理解JVM(一)——JVM內存模型

創建 overflow 動態擴展 兩個 class -s sta 理解 新的 JVM內存模型 Java虛擬機(Java Virtual Machine=JVM)的內存空間分為五個部分,分別是: 1. 程序計數器 2. Java虛擬機棧 3. 本地方法棧 4. 堆 5. 方

深入理解JVM

垃圾收集 解釋 適合 由來 周期 min CA 語言 行為 最近在看周誌明的《深入理解Java虛擬機》,寫的真是太棒了,簡直是讓我打開了新世界的大門,JVM 的世界真是豐富多彩啊!還有......特別的復雜。 運行時數據區域 首先從 JVM 運行時數據區域的劃分來說起 程

深入理解JVM虛擬機:(一)Java運行時數據區域

字面量 符號 地方 64位 因此 lower 優化 java堆大小 工作 概述 JVM是Java語言的精髓所在,因為它Java語言實現了跨平臺運行,以及自動內存管理機制等,本文將從概念上介紹JVM內存的各個區域,說明個區域的作用。 JVM運行時數據區模型 Java虛擬機在執

深入理解jvm虛擬機讀書筆記-垃圾收集器與內存分配策略(二)

具體實現 地方 比例 並發 解決 垃圾收集 替換 map 而是 垃圾收集算法-標記清除算法 標記清除算法是最基礎的收集算法。算法分為“標記”和“清楚”兩個階段:首先標記出所有需要回收的對象,在標記過程完成後統一回收所有被標記的對象。後續的收集算法都是基於這種思路對其不足進行

深入理解JVM之內存區域

通過 java方法 管理 服務 靜態 包含 中間 棧幀 函數庫 以下是閱讀《深入理解Java虛擬機--JVM高級特性與最佳實踐》的讀書筆記 本文結構:   運行時數據區域   HotSpot虛擬機對象那些事兒     對象的創建     對象的內存布局     對象

深入理解JVM(一):執行時資料區

深入理解JVM(一):執行時資料區 執行時資料區 JVM在執行java程式的過程中,會把記憶體分為幾個不同的資料區域,如上圖所示。 程式計數器 雖然圖片中程式計數器所佔的面積比較大,但實際上程式計數器所佔的記憶體非常小,也是唯一一塊在所有JVM中都沒有規定OOM的區

深入理解JVM——7種垃圾收集器

轉自:https://crowhawk.github.io/2017/08/15/jvm_3/ 如果說收集演算法是記憶體回收的方法論,那麼垃圾收 集器就是記憶體回收的具體實現。Java虛擬機器規範中對垃圾收集器應該如何實現並沒有任何規定,因此不同的廠商、版本的虛擬機器所提供的垃圾收集器都可能