`
king523103
  • 浏览: 8321 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

JVM初学二

    博客分类:
  • JVM
JVM 
阅读更多
Class文件的结构其实也很简单,主要可通过下面的数据结构表示
ClassFile {
    	u4 magic;
    	u2 minor_version;
    	u2 major_version;
    	u2 constant_pool_count;
    	cp_info constant_pool[constant_pool_count-1];
    	u2 access_flags;
    	u2 this_class;
    	u2 super_class;
    	u2 interfaces_count;
    	u2 interfaces[interfaces_count];
    	u2 fields_count;
    	field_info fields[fields_count];
    	u2 methods_count;
    	method_info methods[methods_count];
    	u2 attributes_count;
    	attribute_info attributes[attributes_count];
    }

每个java源代码都会生成对应的class文件,文件中最重要的当属constant_pool了,不过首先还是说一下描述符。

A 描述符
    Java源代码中有方法、类、域(即成员变量或类变量)几种,这些在Class文件中都有对应的描述符进行描述。例如:
   
Object method(int i,double d,Thread t)

    对应的描述符为:
   
(IDLjava/lang/Thread;)LJava/Object

    格式为(参数描述符*)返回描述符,可以看到函数名称在其中并没有出现。
B 常量池
    有了描述符就可以在常量池中对它进行索引了。例如在常量池中包含一种数据结构:
CONSTANT_NameAndType_info {
    	u1 tag;
    	u2 name_index;
    	u2 descriptor_index;
    }

用于描述域和方法的
    其中descriptor_index会索引到一个Constant_Utf8的字符串,这个字符串可能就是前面所说的"(IDLjava/lang/Thread;)LJava/Object"
    其中name_index会索引到一个Constant_Utf8的字符串,它是这个方法或域的不完整限定名。(Thread类的完整限定名是 java.lang.Thread, 不完整限定名是Thread)
C 属性
    一些的关注还需要放在attributes上,因为这个数据结构中包含了将要被执行的JVM指令代码,attributes的数据结构如下:
attribute_info {
    	u2 attribute_name_index;
    	u4 attribute_length;
    	u1 info[attribute_length];
    }

    这只是一个可变的结构,对于code来说,它能演化为:
Code_attribute {
    	u2 attribute_name_index;
    	u4 attribute_length;
    	u2 max_stack;
    	u2 max_locals;
    	u4 code_length;
    	u1 code[code_length];
    	u2 exception_table_length;
    	{    	u2 start_pc;
    	      	u2 end_pc;
    	      	u2  handler_pc;
    	      	u2  catch_type;
    	}	exception_table[exception_table_length];
    	u2 attributes_count;
    	attribute_info attributes[attributes_count];
    }

    我们关心的code就放在code的数组中,另外我们看到了一些关于exception的信息,还有最后居然还又嵌入了attributes信息,这些信息可能是LineNumberTable或LocalVariableTable ,这些都是我们可能想知道的一些调试信息,需要在编译时加上"-g"选项。

    知道了Class文件的格式就可以使用JVM加载它,并进行校验,准备和解析了,并加载运行指令

分享到:
评论

相关推荐

    深入理解JVM性能调优和内存模型,垃圾回收,虚拟机原理,经典视频教程

    总共110讲,非常适合jvm初学者,希望对大家有所帮助,奋斗吧少年

    JVM监控工具使用入门

    JVM监控工具使用入门,对初学这帮助很大

    JVM原理一秒懂,不懂算我输.zip

    整理好了JVM虚拟机的原理,适合初学者理论,也适合找工作面试的。内附运行图,思维导图,文字详解,并有相关算法的详解的方式供大家理解,请大家多多支持!

    eta, 在JVM上,Eta编程语言,Haskell的方言.zip

    eta, 在JVM上,Eta编程语言,Haskell的方言 - 在JVM上的现代 Haskell Eta编程语言是在JVM上运行的Haskell方言,具有以下目标:命令式语言的初学者,特别是Java的辅助功能GHC 7.10.3 Haskell的兼容性。访问 eta

    JVM及其调优

    初学者想要对jvm垃圾回收有比较全的了解和认识,这个PPT正是你所需要的,希望对你有用,也感谢原资源分享者!

    jvm内存模型个人笔记

    java初学者了解jvm相关知识增强

    JVM优化day01.pdf

    适合初学JVM优化,有一些基础的指令,还有视图工具方便查看jvm堆内存的使用 还有简单死锁的案例

    JVM思维导图.xmind

    全网最全的JVM思维导图,总体分基础、进阶、底层,包含工具,内有实战案例,适合初学者到P7技术专家。

    Java集合、JVM面试题

    Java集合、JVM面试题,包括Java集合、JVM内存模型、垃圾回收机制、JVM调优、异常处理等相关面试题 ...适用于Java编程的初学者,加强自身对于Java集合、JVM、异常处理等方面的知识储备,更好的应对面试机会

    cucumber-jvm-tutorial:Cucumber-jvm-教程

    Cucumber-jvm-教程这是一个初学者使用cucumber-jvm学习行为驱动开发(BDD)的教程。 本教程包括以下步骤我们首先浏览一个骨架 Eclipse 项目。 我们使用 XMind 的思维导图技术探索需求。 然后我们将需求从 XMind 导出...

    java虚拟机深入JVM内核—原理、诊断与优化视频教程

    深入JVM内核—原理、诊断、优化视频教程 总共11集 适合初学者入门

    Java中JDK,JRE和JVM之间的关系

    初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解是Java开发工具包,JRE(Java Runtime Enviroment)是Java的运行环境,JVM( java virtual machine)也...

    本人Java编译,无需JVM的单位换算器02

    Java编译的单位换算器,无需JVM,可以直接安装 这个是rar part2,part1在我的资源里面找(。。没有办法啦~每次只能上传20MB) 该软件我觉得是解决了很会初学Java的人的问题,例如图片应该如何载入在别的机子上运行...

    尚硅谷_宋红康_深度解析Java内存原型

    此文对于java初学者,想了解清楚java内存结构的童鞋,很有参考价值

    初学者面试宝典.docx

    java开发基本知识点整理,面试常用问题整理,WEB 前端基础,HTTP 状态消息,抽象类和接口,面向对象编程的原则,封装,继承和多态,字节流与字符流的区别,垃圾回收的优点和原理,什么是线程安全,同步和异步有什么...

    Java编译的单位换算器,无需JVM,可以直接安装

    Java编译的单位换算器,无需JVM,可以直接安装 这个是rar part1,part2在我的资源里面找(。。没有办法啦~每次只能上传20MB) 该软件我觉得是解决了很会初学Java的人的问题,例如图片应该如何载入在别的机子上运行...

    java环境中的JDK、JVM、JRE详细介绍

    主要介绍了java环境中的JDK、JVM、JRE详细介绍的相关资料,对于初学者还是有必要了解下,细致说明他们是什么,需要的朋友可以参考下

    rock-the-jvm-scala-beginners

    摇滚jvm-scala初学者

    Java,Jvm 的设计理念和Android的基础和贯彻

    初学Java——Java语言继承了Smalltalk的OOP的特性,是广泛运用的编程语言中的OOP的代表 再学Java——适用于网络开发的平台无关性语言,在Java的Object对象实现了wait,notify的对象级别的多线程的管程机制,让每一个...

    深入Java 2 SDK

    JDK、JRE、以及JVM 及初学配置 非常清晰的PDF

Global site tag (gtag.js) - Google Analytics