[jvm] -- 类文件结构篇】的更多相关文章

类文件结构 结构图  魔数 头四个字节,作用是确定这个文件是否为一个能被虚拟机接收的 Class 文件. Class 文件版本 第五和第六是次版本号,第七和第八是主版本号. 高版本的 Java 虚拟机可以执行低版本编译器生成的 Class 文件,但是低版本的 Java 虚拟机不能执行高版本编译器生成的 Class 文件. 常量池 字面量(接近于 Java 语言层面的的常量概念) 类和接口的全限定名 字段的名称和描述符 方法的名称和描述符 符号引用(属于编译原理方面的概念) 访问标志 用于识别一些…
配置classpath 根据path环境变量的原理,可以定义一个名为classpath环境变量,将要运行的class文件所在目录定义在该变量中. 例:set classpath=c:\ classpath变量值是java类文件的目录 path变量是windows程序文件的目录 JVM查找类文件的顺序: 如果没有配置classpath环境变量,JVM只在当前目录下查找要运行的类文件. 如果配置了classpath环境,JVM会先在classpath环境变量值的目录中查找要运行的类文件. 值的结尾处…
JVM查找类文件的顺序: 在doc下使用set classpath=xxx, 如果没有配置classpath环境变量,JVM只在当前目录下查找要运行的类文件. 如果配置了classpath环境,JVM会先在classpath环境变量值的目录中查找要运行的类文件. 值的结尾处如果加上分号 " ; ",那么JVM在classpath目录下没有找到要指定的类文件,会在当前目录下在查找一次. 值的结尾出如果没有分号" ; ",那么JVM在classpath目录下没有找到要指…
概述 class类文件的结构可见下面这样图(出处见参考资料),可以参照下面的例子,对应十六进制码,找出找出相应的信息. 其中u2 , u4 表示的意思是占用两个字节和占用四个字节,下面我们将会各项说明. class类文件结构 Class 文件是一组以8 字节位单位的二进制流,各个数据按照一定的顺序排放,Class文件采用一种类似于C语言结构体的伪结构来存储数据. 例如下面代码使用java编译后,生成的class 文件. public class TestClass { private int m…
一.类文件的结构 我们都知道,各种不同平台的虚拟机,都支持 "字节码 Byte Code" 这种程序存储格式,这构成了 Java 平台无关性的基石.甚至现在平台无关性也开始演变出 "语言无关性" ,就是其他语言也可以运行在 Java 虚拟机之上,比如现在的 Kotlin.Scala 等. 实现语言无关性的基础仍然是虚拟机和字节码存储格式,Java 虚拟机步包括 Java 语言在内的任何语言绑定,他只和 "Class 文件" 这种特定的二进制文件格…
class类文件并不一定以磁盘的形式存在,也可以是由类加载器直接生成的二进制流,他其实是一种数据结构,类似于c语言结构体,这种数据结构只有两种数据类型:无符号数和表. 1.魔数:类似于文件拓展名,CAFEBABE表示这个是一个class文件 2.版本号:前两个字节是次版本号,后两个字节是主版本号,虚拟机拒绝执行超过其版本号的class文件 3.常量池计数值:0x0016表示有21项常量值,索引1~21,第0 项表示当某数据不引用任何一个常量池项目时索引为0 4.常量池包括字面量和符号引用.07表…
前言 为了研究Class文件,先编写一个最简单的代码: package com.courage; public class T0100_ByteCode01 { } 之所以说最简单,是因为这个类里面任何方法,变量都没有,看看编译之后Class文件的16进制代码: 在解读上面的Class文件(后面没有特殊生命的话都是指16进制)之前,需要先学习几个前置知识,Java 虚拟机规范规定 Class 文件格式采用一种类似与 C 语言结构体的微结构体来存储数据,这种伪结构体中只有两种数据类型:无符号数和表…
今天在往一个jsp文件里添加代码时,项目跑起来访问这个jsp时报错.. The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit _jspService方法超过65535 bytes最大限制. 额,这是什么鬼,看不懂啊.于是问问度娘,发现Java对类文件有个限制,不能超过65K字节.因为我改动的这个jsp已经很大了,而jsp文件在weblog…
类文件及类加载机制 标签(空格分隔): Java 本篇博客的重点是分析JVM是如何进行类的加载的,但同时我们会捎带着说一下Class类文件结构,以便对类加载机制有更深的理解. 类文件结构 平台无关性 众所周知,Java是平台无关的语言,那么是如何实现平台无关的呢? Java程序要在Java虚拟机(JVM)上运行,而JVM并不与包括Java在内的任何语言绑定,它只与"Class文件"这种特定的二进制文件格式所关联. 也就是说,任何语言,只要可以编译成符合某种特定规则的Class文件,都可…
动态加载(Dynamic Loading)是指在程序运行时加载需要的类库文件,对Java程序来说,一般情况下,一个类文件在启动时或首次初始化时会被加载到内存中,而反射则可以在运行时再决定是否需要加载一个类,比如从Web上接受一个String参数作为类名,然后在JVM中加载并初始化,这就是动态加载,此动态加载通常是通过Class.forName(String)实现的,只是这个forName()方法到底是什么意思? 我们知道一个类文件只有在被加载到内存中后才可能生成实例对象,也就是说一个对象的生成必…