深入理解JVM(10)——Class文件结构
什么是“JVM”的无关性
Java具有平台无关性,也就是任何操作系统都能够运行Java代码,之所以能够实现这一点,是因为Java运行在虚拟机上,不同的操作系统都有各自的Java虚拟机,从而实现一次编译,到处运行。
JVM不仅具有平台无关性,还具有语言无关性。平台无关性是指不同的操作系统都有各自的JVM来运行Java代码,但语言无关性是指Java虚拟机能运行除了Java之外的代码,只是对能运行的语言有严格的要求。
Java源代码首先需要使用Javac编译器编译程class文件,然后启动JVM执行class文件,从而程序开始执行。言外之意就是JVM只认识class文件,它不管是何种语言生成了class文件,只要class文件符合JVM的规范就行。因此目前已经有Scala、JRuby、Jython等语言能够在JVM上运行。它们有各自的语法规则,不过它们的编译器都能将各自的源码编译成符合JVM规范的class文件,从而能够借助JVM运行它们。
Class文件结构:
class文件是二进制文件,它的内容具有严格的规范,文件中没有空格,全部都是连续的0/1,class文件中的全部内容被分为两部分内容:无符号数(它表示class文件中的值,这些值没有任何类型,但有不同的长度)和表(class文件中的数据要么是单个值,要么是二维表。)。
class文件的组织结构:
- 魔数:用来表示这个class文件的类型,魔数的作用就相当于文件后缀名,只不过后缀名容易被修改,不安全,因此在class文件中用魔数表示文件类型比较合适。
- 本文件的版本信息:它表示本class中使用的是哪个版本的JDK。在高版本的JVM上能够运行低版本的class文件,但在低版本的JVM上无法运行高版本的class文件,即使该class文件中没有用到任何高版本JDK的特性也无法运行!
- 常量池:
a) 通常存放两种类型的常量:字面值常量和符号引用。
b) 常量池的特点:
1) 常量池的长度不固定
2) 常量池中的常量由二维表来表示
3) 常量池是class文件的资源仓库
4) 常量池是与本class文中其他部分联系最紧密的一部分
5) 常量池是class文件中占空间最大的一部分
c) 为什么Java中定义的类名、变量名必须小于64K:类、接口、变量等名字都属于符号引用,它们都存储在常量池中,这种类型的常量使用u2存储字符串的长度。由于2字节最多能表示65535个数,因此这些名字的最大长度最多只能是64K。
d) 什么是UTF-8编码?什么是缩略UTF-8编码:前者每个字符使用3个字节表示,而后者把128个ASKII码用1字节表示,某些字符用2字节表示,某些字符用3字节表示。
- 访问标志:访问标志是用来表示这个class文件是类还是接口、是否被public修饰、是否被abstract修饰、是否被final修饰等。
- 类索引、父类索引、接口索引集合: 类索引、父类索引、接口索引集合是用来表示当前class文件所表示类的名字、父类名字、接口们的名字。
- 字段表集合: 字段表用来存储本类涉及到的成员变量,包括实例变量和类变量,但是不包括方法中的局部变量。每一个字段表示一个成员变量,本类中所有的成员变量组成字段表。
- 方法表集合:在class文件中,所有的方法都是以二维表的形式来存储,每一张表表示一个函数,一个类中的所有方法构成方法表的集合。方法表集合的结构和字段表集合的结构一致,只不过访问标志和属性表集合的可选项有所不同。
- 方法表集合的注意点:
a) 如果class文件没有重写父类的方法,那么本class文件的方法表集合中不会出现父类/父接口的方法表
b) 本class文件的方法表中可能出现程序员没有定义的方法,因为在编译类的时候编译器会在class文件的方法表集合中加入类构造器和实例构造器。
c) 重载一个方法需要有相同的简单名称和不同的特征签名。JVM的特征签名和Java的特征签名不一样:Java的特征签名(方法参数在常量池中的字段符号引用的集合);JVM的特征签名(方法参数+返回值)
深入理解JVM(10)——Class文件结构的更多相关文章
- 深入理解JVM(六)类文件结构
6.1 关于类文件 1.class文件的一次编译,到处运行的跨平台性: 2.JVM不止有跨平台性,还有跨语言性,不管是JRuby还是Groovy写出来的程序,只要编译出符合JVM规范的class文件就 ...
- [译]深入理解JVM
深入理解JVM 原文链接:http://www.cubrid.org/blog/dev-platform/understanding-jvm-internals 每个使用Java的开发者都知道Java ...
- 转:深入理解jvm
深入理解JVM 原文链接:http://www.cubrid.org/blog/dev-platform/understanding-jvm-internals 每个使用Java的开发者都知道Java ...
- 【转】[译]深入理解JVM
http://www.cnblogs.com/enjiex/p/5079338.html 深入理解JVM 原文链接:http://www.cubrid.org/blog/dev-platform/un ...
- [译]深入理解JVM Understanding JVM Internals
转载: 英文原版地址:http://www.cubrid.org/blog/dev-platform/understanding-jvm-internals/ 翻不了墙的可以看这个英文版:https: ...
- 深入理解JVM内幕(转)
转自:http://blog.csdn.net/zhoudaxia/article/details/26454421/ 每个Java开发者都知道Java字节码是执行在JRE((Java Runtime ...
- 深入理解JVM内幕:从基本结构到Java 7新特性
转自:http://www.importnew.com/1486.html 每个Java开发者都知道Java字节码是执行在JRE((Java Runtime Environment Java运行时环境 ...
- 深入理解JVM垃圾收集机制(JDK1.8)
垃圾收集算法 标记-清除算法 最基础的收集算法是"标记-清除"(Mark-Sweep)算法,分两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象. 不足: ...
- 《深入理解JVM虚拟机》读书笔记
前言:<深入理解JVM虚拟机>是JAVA的经典著作之一,因为内容更偏向底层,所以之前一直没有好好的阅读过.最近因为刚好有空,又有了新目标.所以打算和<构架师的12项修炼>一起看 ...
- 理解JVM GC
理解JVM GC对于我们把控Java应用有很大的帮助.下面我从运维角度,把网上的JVM相关的资料整理如下,以加深对JVM GC的理解.如有错误的地方,请看官指正. JVM内存使用分类 JVM的内存分区 ...
随机推荐
- UE4 ShooterGame Demo的开火的代码
之前一直没搞懂按下鼠标左键开火之后,代码的逻辑是怎么走的,今天看懂了之前没看懂的部分,进了一步 ShooterCharacter.cpp void AShooterCharacter::OnStart ...
- Sway
啥是Sway: http://livesino.net/archives/7520.live 地址:http://sway.com 现在又可以申请了 试试效果
- Quartz.net 2.4.1 使用记录
项目需要开发一个调度任务工具,用于
- bzoj2969矩形粉刷
题解: 和前面那个序列的几乎一样 容斥之后变成求不覆盖的 然后再像差分的矩形那样 由于是随便取的所以这里不用处理前缀和直接求也可以 代码: #include <bits/stdc++.h> ...
- 【BZOJ1095】【ZJOI2007】捉迷藏 [动态点分治]
题解: 好像还是比较简单的 对每个重心向下一层重心连边 树高是log的 我们对每一层维护两个信息 1.所有节点到上一层重心的距离 2.所有儿子的1堆的堆顶 另外开个总的堆 维护每一层最长+次长 修改是 ...
- 【演示】在CSS里用calc进行计算
请阅读 在CSS里用calc进行计算 下面的元素的width,padding,margin都使用了CSS calc进行计算. 简单计算: 100% – 100px 这是经过简单计算的元素宽度 复杂 ...
- ubuntu12.04 mysql 卸载安装
参考: https://blog.csdn.net/qq_26093511/article/details/52847943
- vue 中如何对公共css、 js 方法进行单文件统一管理,全局调用
1.前言 最近,为公司开发交付的一个后台管理系统项目,我使用了 Vue 框架进行开发实践. 模块化.组件化.工程化的开发体验非常好.良好的 api,优雅的设计,对于工程师非常友好. 但是由于模块比较多 ...
- F. Shovels Shop 背包DP
题意: 商店里有n把铲子 每个铲子有其标价 一个人要买k吧 有m个优惠政策 每个优惠政策有两个元素x,y 表示 正好买x个铲子的时候 这x个铲子中最便宜的y个铲子免单 求用最少的前买到k个铲子 ...
- 数据特征分析:1.基础分析概述& 分布分析
基础分析概述 几个基础分析思路: 分布分析 对比分析 统计分析 帕累托分析 正态性检测 相关性分析 分布分析 分布分析是研究数据的分布特征和分布类型,分定量数据.定性数据区分基本统计量. import ...