java虛擬機編譯文件,理解Java虛擬機(1)之一個.java文件編譯成.class文件發生了什么...

理解Java虛擬機(1)之一個.java文件編譯成.class文件發生了什么

最近在看《深入理解Java虛擬機》弄明白了很多java的底層知識,決定分幾部分總結下,從.java文件編譯,到類加載機制,內存分配

垃圾回收機制,線程并發,鎖機制。

JVM虛擬機只能識別.class文件這種字節碼文件,然后將字節碼翻譯成可執行的0,1;這個說明了JVM具有語言無關性,不僅僅是平臺無關性,這也是scala,Grovvy,JRUby….能在JVM上運行的原因,各種語言通過不同的編譯器將其編譯成.class文件

classFile_1.png

從上面圖可以看出來JVM支持很多語言,只要有語言的編譯器編譯成.class文件,順帶說下scala是函數式語言,在高并發領域很流行的,有人說java不靈活,其實完全可以JVM語言混編,底層并發用scala,業務層用java。下面下個java類看看具體編譯成class文件。

public class TestClass{

private int id;

public String name;

public void sayHello(){

System.out.print("hello class ");

}

}

編譯javac -TestClass.java,編譯后class文件TestClass.class如下

cafe babe 0000 0033 0020 0a00 0600 1209

0013 0014 0800 150a 0016 0017 0700 1807

0019 0100 0269 6401 0001 4901 0004 6e61

6d65 0100 124c 6a61 7661 2f6c 616e 672f

5374 7269 6e67 3b01 0006 3c69 6e69 743e

0100 0328 2956 0100 0443 6f64 6501 000f

4c69 6e65 4e75 6d62 6572 5461 626c 6501

0008 7361 7948 656c 6c6f 0100 0a53 6f75

7263 6546 696c 6501 000e 5465 7374 436c

6173 732e 6a61 7661 0c00 0b00 0c07 001a

0c00 1b00 1c01 000c 6865 6c6c 6f20 636c

6173 7320 0700 1d0c 001e 001f 0100 1b63

6f6d 2f68 632f 7365 7276 6963 6549 6d70

2f54 6573 7443 6c61 7373 0100 106a 6176

612f 6c61 6e67 2f4f 626a 6563 7401 0010

6a61 7661 2f6c 616e 672f 5379 7374 656d

0100 036f 7574 0100 154c 6a61 7661 2f69

6f2f 5072 696e 7453 7472 6561 6d3b 0100

136a 6176 612f 696f 2f50 7269 6e74 5374

7265 616d 0100 0570 7269 6e74 0100 1528

4c6a 6176 612f 6c61 6e67 2f53 7472 696e

673b 2956 0021 0005 0006 0000 0002 0002

0007 0008 0000 0001 0009 000a 0000 0002

0001 000b 000c 0001 000d 0000 001d 0001

0001 0000 0005 2ab7 0001 b100 0000 0100

0e00 0000 0600 0100 0000 0600 0100 0f00

0c00 0100 0d00 0000 2500 0200 0100 0000

09b2 0002 1203 b600 04b1 0000 0001 000e

0000 000a 0002 0000 000c 0008 000d 0001

0010 0000 0002 0011

classs文件采用類似C語言結構體偽數據結構來存儲數據,有2種數據類型無符號數和表,無符號數屬于基本類型,以u1、u2、u4、u8分別代表1字節、2字節、4字節和8字節。無符號數可以用來描述數字、索引引用、數量值或者按照UTF-8編碼組成的字符串表是有多個無符號數或者其他表作為數據項構成的符合數據類型,所有表都習慣性地以info結尾。Class文件本質上就是一張表。

下面舉幾個字節碼的含義

魔數 打頭的”0xcafebabe”用來確定這個文件是否虛擬機能夠接受的Class文件,固定值為0xCAFEBABE,它的作用是確定這個文件是否唯一能被虛擬機接受的Class文件,gif,jpg等文件頭都存有魔數

版本,緊跟魔數后面的就是版本了,”0000 0033”,表示jdk1.7.0

下面是class文件版本號(參照《深入理解java虛擬機》)

classFile_2.png

就舉這2個例子,對.class文件有個大概認識。

特么的,大夏天的感冒了,看書沒動力,看書都沒動力,接下來寫java類的加載機制

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392323.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392323.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392323.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode 684. 冗余連接()

在本問題中, 樹指的是一個連通且無環的無向圖。 輸入一個圖,該圖由一個有著N個節點 (節點值不重復1, 2, …, N) 的樹及一條附加的邊構成。附加的邊的兩個頂點包含在1到N中間,這條附加的邊不屬于樹中已存在的邊。 結果圖是一個以邊組成的二維數組。每一…

Go-如何讀取yaml,json,ini等配置文件

1. json使用 JSON 應該比較熟悉,它是一種輕量級的數據交換格式。層次結構簡潔清晰 ,易于閱讀和編寫,同時也易于機器解析和生成。 創建 conf.json:{"enabled": true,"path": "/usr/local" }新建conf…

SQL轉化為MapReduce的過程

轉載:http://www.cnblogs.com/yaojingang/p/5446310.html 在了解了MapReduce實現SQL基本操作之后,我們來看看Hive是如何將SQL轉化為MapReduce任務的,整個編譯過程分為六個階段: Antlr定義SQL的語法規則,完成SQL詞法&am…

使用集合映射和關聯關系映射_使用R進行基因ID映射

使用集合映射和關聯關系映射Inter-conversion of gene ID’s is the most important aspect enabling genomic and proteomic data analysis. There are multiple tools available each with its own drawbacks. While performing enrichment analysis on Mass Spectrometry da…

leetcode 1018. 可被 5 整除的二進制前綴

給定由若干 0 和 1 組成的數組 A。我們定義 N_i:從 A[0] 到 A[i] 的第 i 個子數組被解釋為一個二進制數(從最高有效位到最低有效位)。 返回布爾值列表 answer,只有當 N_i 可以被 5 整除時,答案 answer[i] 為 true&…

純java應用搭建,16、BoneCp純java項目使用

2、代碼實現 package com.study;import com.jolbox.bonecp.BoneCP;import com.jolbox.bonecp.BoneCPConfig;import com.jolbox.bonecp.BoneCPDataSource;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.sql.*;/*** Boncp 純java處理* CreateTime 2018/3/…

數據結構與算法深入學習_我最喜歡的免費課程,用于深入學習數據結構和算法...

數據結構與算法深入學習by javinpaul由javinpaul Data structures and algorithms are some of the most essential topics for programmers, both to get a job and to do well on a job. Good knowledge of data structures and algorithms is the foundation of writing go…

RabbitMQ學習系列(一): 介紹

1、介紹 RabbitMQ是一個由erlang開發的基于AMQP(Advanced Message Queue )協議的開源實現。用于在分布式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面都非常的優秀。是當前最主流的消息中間件之一。 RabbitMQ的官網:http…

詳盡kmp_詳盡的分步指南,用于數據準備

詳盡kmp表中的內容 (Table of Content) Introduction 介紹 What is Data Preparation 什么是數據準備 Exploratory Data Analysis (EDA) 探索性數據分析(EDA) Data Preprocessing 數據預處理 Data Splitting 數據分割 介紹 (Introduction) Before we get into this, I want to …

leetcode 947. 移除最多的同行或同列石頭(dfs)

n 塊石頭放置在二維平面中的一些整數坐標點上。每個坐標點上最多只能有一塊石頭。 如果一塊石頭的 同行或者同列 上有其他石頭存在,那么就可以移除這塊石頭。 給你一個長度為 n 的數組 stones ,其中 stones[i] [xi, yi] 表示第 i 塊石頭的位置&#x…

matlab距離保護程序,基于MATLAB的距離保護仿真.doc

基于MATLAB的距離保護仿真摘要:本文闡述了如何利用Matlab中的Simulink及SPS工具箱建立線路的距離保護仿真模型,并用S函數編制相間距離保護和接地距離保護算法程序,構建相應的保護模塊,實現了三段式距離保護。仿真結果表明&#xf…

ZOJ3385 - Hanami Party (貪心)

題目鏈接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode3385 題目大意: 妖夢要準備一個party,所以需要許多食物,初始化妖夢的烹飪技能為L,每天妖夢有兩種選擇,一是選擇當天做L個食物&am…

sklearn.fit_兩個小時后仍在運行嗎? 如何控制您的sklearn.fit。

sklearn.fitby Nathan Toubiana內森圖比亞納(Nathan Toubiana) 兩個小時后仍在運行嗎? 如何控制您的sklearn.fit (Two hours later and still running? How to keep your sklearn.fit under control) Written by Gabriel Lerner and Nathan Toubiana加布里埃爾勒納…

RabbitMQ學習系列(二): RabbitMQ安裝與配置

1.安裝 Rabbit MQ 是建立在強大的Erlang OTP平臺上,因此安裝RabbitMQ之前要先安裝Erlang。 erlang:http://www.erlang.org/download.html rabbitmq:http://www.rabbitmq.com/download.html 注意: 1.現在先別裝最新的 3…

帝國CMS淺淺滴談一下——博客園老牛大講堂

封筆多月之后,工作中遇到了很多很多的問題,也解決了一些問題,下面我把一些得出的經驗,分享給大家! 會帝國cms的請離開,這篇文章對你沒什么用 1、什么是帝國CMS?---博客園老牛大講堂 多月之前&am…

matlab cdf,Matlab 簡單計算PDF和CDF | 學步園

通信的魅力就是在于隨機性中蘊含的確定性,這也就是為什么你隨便拿出一本通信方面的教材,前面幾章都會大篇幅的講解隨機過程,隨機過程也是研究生必須深入了解的一門課,特別是對于信號處理以及通信專業的學生。在實際工作中&#xf…

leetcode 1232. 綴點成線

在一個 XY 坐標系中有一些點,我們用數組 coordinates 來分別記錄它們的坐標,其中 coordinates[i] [x, y] 表示橫坐標為 x、縱坐標為 y 的點。 請你來判斷,這些點是否在該坐標系中屬于同一條直線上,是則返回 true,否則…

mysql常用操作(一)

【數據庫設計的三大范式】1、第一范式(1NF):數據表中的每一列,必須是不可拆分的最小單元。也就是確保每一列的原子性。 例如:userInfo:山東省煙臺市 18865518189 應拆分成 userAds山東省煙臺市 userTel188655181892、第…

pmp 成本估算準確高_如何更準確地估算JavaScript中文章的閱讀時間

pmp 成本估算準確高by Pritish Vaidya通過Pritish Vaidya 準確估算JavaScript中篇文章的閱讀時間 (Accurate estimation of read time for Medium articles in JavaScript) 介紹 (Introduction) Read Time Estimate is the estimation of the time taken by the reader to rea…

Android數據適配-ExpandableListView

Android中ListView的用法基本上學的時候都會使用,其中可以使用ArrayAdapter,SimpleAdapter,BaseAdapter去實現,這次主要使用的ExpandableListView展示一種兩層的效果,ExpandableListView是android中可以實現下拉list的…