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,一经查实,立即删除!

相关文章

RabbitMQ学习系列(一): 介绍

1、介绍 RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue )协议的开源实现。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面都非常的优秀。是当前最主流的消息中间件之一。 RabbitMQ的官网:http…

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…

Android数据适配-ExpandableListView

Android中ListView的用法基本上学的时候都会使用,其中可以使用ArrayAdapter,SimpleAdapter,BaseAdapter去实现,这次主要使用的ExpandableListView展示一种两层的效果,ExpandableListView是android中可以实现下拉list的…

JavaWeb 命名规则

命名规范命名规范命名规范命名规范 本规范主要针对java开发制定的规范项目命名项目命名项目命名项目命名 项目创建,名称所有字母均小写,组合方式为:com.company.projectName.component.hiberarchy。1. projectName:项目名称2. com…

多元概率密度_利用多元论把握事件概率

多元概率密度Humans have plenty of cognitive strengths, but one area that most of us struggle with is estimating, explaining and preparing for improbable events. This theme underpins two of Nassim Taleb’s major works: Fooled by Randomness and The Black Swa…

nginx php访问日志配置,nginx php-fpm 输出php错误日志的配置方法

由于nginx仅是一个web服务器,因此nginx的access日志只有对访问页面的记录,不会有php 的 error log信息。nginx把对php的请求发给php-fpm fastcgi进程来处理,默认的php-fpm只会输出php-fpm的错误信息,在php-fpm的errors log里也看不…

SMSSMS垃圾邮件检测器的专业攻击

Note: The methodology behind the approach discussed in this post stems from a collaborative publication between myself and Irene Anthi.注意: 本文讨论的方法背后的方法来自 我本人和 Irene Anthi 之间 的 合作出版物 。 介绍 (INTRODUCTION) Spam SMS te…

Nagios学习实践系列

其实上篇Nagios学习实践系列——基本安装篇只是安装了Nagios基本组件,虽然能够打开主页,但是如果不配置相关配置文件文件,那么左边菜单很多页面都打不开,相当于只是一个空壳子。接下来,我们来学习研究一下Nagios的配置…

kvm vnc的使用,鼠标漂移等

1.宿主机的vnc(virtual Network Computing)配置 安装rpm包 yum install tigervnc-server -y 为了防止干扰直接关闭防火墙和selinux /etc/init.d/iptables stop setenforce 0 配置vnc密码和启动vncserver服务 vncpasswd vncserver 2.客户机的vnc 在qemu…

php深浅拷贝,JavaScript 中的深浅拷贝

工作中经常会遇到需要复制 JavaScript 数据的时候,遇到 bug 时实在令人头疼;面试中也经常会被问到如何实现一个数据的深浅拷贝,但是你对其中的原理清晰吗?一起来看一下吧!一、为什么会有深浅拷贝想要更加透彻的理解为什…

使用Python进行地理编码和反向地理编码

Geocoding is the process of taking input text, such as an address or the name of a place, and returning a latitude/longitude location. To put it simply, Geocoding is converting physical address to latitude and longitude.地理编码是获取输入文本(例如地址或地点…

[Object-C语言随笔之三] 类的创建和实例化以及函数的添加和调用!

上一小节的随笔写了常用的打印以及很基础的数据类型的定义方式,今天就来一起学习下如何创建类与函数的一些随笔; 首先类的创建:在Xcode下,菜单File-New File,然后出现选择class模板,如下图&…

2024-AI人工智能学习-安装了pip install pydot但是还是报错

2024-AI人工智能学习-安装了pip install pydot但是还是报错 出现这样子的错误: /usr/local/bin/python3.11 /Users/wangyang/PycharmProjects/studyPython/tf_model.py 2023-12-24 22:59:02.238366: I tensorflow/core/platform/cpu_feature_guard.cc:182] This …

带彩色字体的man pages(debian centos)

1234567891011121314151617181920212223242526272829303132333435363738我的博客已迁移到xdoujiang.com请去那边和我交流简介most is a paging program that displays,one windowful at a time,the contents of a file on a terminal. It pauses after each windowful and prin…

Zabbix 3.0 从入门到精通(zabbix使用详解)

第1章 zabbix监控 1.1 为什么要监控 在需要的时刻,提前提醒我们服务器出问题了 当出问题之后,可以找到问题的根源 网站/服务器 的可用性 1.1.1 网站可用性 在软件系统的高可靠性(也称为可用性,英文描述为HA,High Avail…

Maven基础。

---恢复内容开始--- Maven: 1、概念。 * maven 是一个项目管理工具。 * maven的作用。 1、jar包。依赖管理。将jar包放在jar包仓库(pom.xml),不需要每个项目都添加jar包。 2、测试。 3、项目发布。 2、使用。 * 下载解压即可。 * 环境变量配置…

Dinosaur Run - Dinosaur world Games

转载于:https://www.cnblogs.com/hotmanapp/p/7092669.html

Go_ go mod 命令解决墙的问题

简介 由于众所周知的原因,在下载一些库的时候会下载不了,比如 golang.org/x/... 相关的库。为此,网上出现了很多解决方案。 从 Go1.11 开始,Go 引入了 module,对包进行管理,通过 go mod 命令来进行相关操作…