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.mzph.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的…