`

JAVA class文件研究1

    博客分类:
  • JAVA
阅读更多

      JAVA 代码经过编译后,会生成class文件,具体class文件结构又对应什么。

      JAVA虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域

      1 虚拟机栈

      2 方法区

      3 堆

      4 本地方法栈

       5 程序计数器

       我们主要来讨论1-3

       虚拟机栈

       虚拟机栈是线程私有的,虚拟机栈是服务于JAVA的方法的,每个方法被执行的时候就同时创建一个栈帧。栈帧中用于存储局部变量表,操作数栈,动态链接,方法出口等信息。

局部变量表和操作数栈的在执行前深度就已经确认,他们是用来执行方法中的操作的,局部变量表,存放的是编译器可知的基本数据类型,所以方法被编译时,系统只对方法中进行定义的对象进行统计,比如 String fengfu=new String();就对应一个局部变量表中一个变量,类型为reference 名字为fengfu;后面的new String();是堆上分配的,大小不确定,所以经编译后,并不存放于局部变量表中。

        方法被解析为jvm指令后,操作的就是局部变量表,将局部变量表中的数据取出,放入操作数栈中,进行计算或者将操作数栈的结果存放到局部变量表中。

        栈帧虽然是线程私有的,但是因为方法的jvm指令可以直接操纵堆中的变量,所以并不是线程安全的。


2 方法区

       方法区是线程共享的内存区域,用于存放已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等。

3 JAVA 堆 

       JAVA 堆是被所有线程共享的一块内存区域,用户存放对象实例的,几乎所有的对象实例都是在这里分配内存:所有的对象实例以及数组都要在堆上分配。

 

       一个类被编译为class后,jvm指令存在于哪个地方呢,class文件各部分对应内存中哪些模块呢。

首先,先来看一下class文件结构

 

       class文件中的常量池,对应于Java内存区域中的方法区,里面存放了类中的各种字面量和符号引用。存放了类和接口的全限定名,字段的名称和描述符,方法的名称和描述符,字段的字符串常量,方法中的变量和字符常量等。

       class文件中的字段表描述了字段的作用域(private,protected,public修饰符),可变性(final修饰符),并发性(volatile描述符),是类变量还是实例变量(static 描述符),该部分也对应内存区域的方法区

方法表则对应java文件中的各种方法,构造函数,其他方法等,方法的形参,返回值等,这些信息对应于内存中的方法区。上面曾说过,每个方法对应一个栈帧,里面包含局部变量表,操作数栈等。这些信息保存于方法表中每个方法对应的属性表中,属性表包含了局部变量表,操作数栈,及方法经编译后的Jvm指令等。这些信息存放于于内存中的虚拟机栈中。

        下一章,我会根据一例子来讨论java类文件与class文件的对应和内存中的关系。

 

  • 大小: 43.6 KB
  • 大小: 33.1 KB
分享到:
评论

相关推荐

    classpy, 用于研究Java类文件的GUI工具.zip

    classpy, 用于研究Java类文件的GUI工具 ClasspyClasspy是一个用于研究Java类文件的GUI工具。的灵感这里工具主要由 javap 和 JavaClassViewer激发。 我重新发明了轮子,原因如下:1. Learn Java class file

    Java代码保护工具全套源码(jShield)

    jShield是本人基于自定义类加载器技术开发的Java代码保护工具,可以加密保护Jar包或Class文件,适合需要保护Java程序的朋友使用和研究。 jShield是一款WinForm工具,通过图形化界面导入jar包或class文件后,即可...

    JAVA类文件反编译工具

    JAVA类文件反编译工具,可以将编译后的class文件反编译为.java文件,如果源文件没有经过加密的话,基本上可以返回源代码的正确内容。 这对我们研究别人的代码又多了一个快捷方式

    java开源包101

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java研究生毕业设计一个汽车远程通讯系统项目源码.zip

    实际代码做一定的修改用配置文件appliction.propertities 涵盖全局变量 com.lyl.netty_mybatis_obd_01.redis.testClass 与之绑定 在com.lyl.netty_mybatis_obd_01.redis.RedisUtil中的pushData_1方法直接返回json...

    JAD JAD下载(JAVA字节码文件查看工具)(Java反编译工具)

    1、版本:jad158e 2、支持不同系统,windows、linux、mac 3、压缩包共有四个文件...4、用法:jad -o -a -s XXX.java XXX.class 5、使用 jad 反编译的好处之一就是,可以同时生成字节码和源代码。这样可以进行对照研究。

    java反编译工具

    java反编译工具 反编译java class文件 方便研究源码

    基于Java Web的MySQL数据库驱动的JSP商城项目设计源码

    其中Java编译后的Class文件12个,PNG图片文件9个,JSP页面文件8个,Java源代码文件6个,JPG图片文件3个,Preferences配置文件2个,Markdown文档2个,CSS样式文件2个,Classpath配置文件1个,以及项目配置文件1个。...

    基于Java的动漫网站前端设计源码

    其中JPG图片文件116个,编译后的Class文件34个,XML配置文件24个,JAR打包文件18个,Java源代码文件17个,JSP页面文件8个,CSS样式文件8个,Properties配置文件3个,Markdown文档2个,以及Manifest文件2个。...

    基于Hadoop的Java实现用户协同过滤算法源码

    - 类文件(.class):32个 - Java源文件(.java):14个 - JAR包:3个 - Classpath配置:1个 - 项目配置文件:1个 - 偏好设置文件:1个 - Markdown文档(.md):1个 本项目为深入研究和应用用户协同过滤算法提供了...

    java研究生毕业设计汽车远程通讯系统项目源码.zip

    实际代码做一定的修改用配置文件appliction.propertities 涵盖全局变量 com.lyl.netty_mybatis_obd_01.redis.testClass 与之绑定 在com.lyl.netty_mybatis_obd_01.redis.RedisUtil中的pushData_1方法直接返回json...

    我整理的Java虚拟机操作码

    前段时间读了《深入Java虚拟机第二版》一书,整理了Java虚拟机的操作码,也许对学习Java VM或者研究class文件结构的朋友会有用。

    基于Java和微信小程序的教室预约系统设计源码

    项目共包含102个文件,其中Java源代码文件25个,XML配置文件22个,编译后的Java字节码文件class 14个,项目构建文件DS_Store 7个,JSON配置文件5个,项目偏好文件prefs 4个,Properties配置文件4个,JavaScript源...

    应用软件跨平台技术的研究

    一个class 文件包含Java 虚拟机指令( 或 者byte codes) 和一个符号表以及其他的辅助信息。为了安全, Java 虚拟机 对class 文件的代码强加了很强的格式和结构限制。但是, 任何具有能够 按照有效的class 文件表达的...

    Java开发详解.zip

    010101_【第1章:JAVA概述及开发环境搭建】_JAVA发展概述笔记.pdf 010102_【第1章:JAVA概述及开发环境搭建】_Java开发环境搭建笔记.pdf 010201_【第2章:简单Java程序】_简单Java程序笔记.pdf 010301_【第3章:Java...

    【Java语言程序设计教程】Java课程设计-教学大纲.docx

    每个同学的文件夹名字为"班级_学号_姓名",文件夹中应该包括可执行文件、全部源文件及对应的class文件、辅助文件。 四、实践地点、时间、学时分配 教学内容 学时 地点 备注 学习derby数据库环境配置与基础知识 4 ...

    java课程设计论文个人通讯录管理系统.doc

    五、具体设计 文件分别编译生成相应的字节码(class)文件。然后,用java解释器运 行主类: 主界面 六、具体分工 我参与设计添加页面,添加方法,删除页面,查询部分操作资以及源管理模块,背景 框格布局操作。 添加...

    java基础入门教程

    今 年 6月 7日 ,由 SUN公 司 和 台 湾 经 济 事 务 部 信 息 发 展 局, 台湾信 息 技 术 研究 所 等 单 位 牵 头 ,成 立 了 一 个 "Java联 盟 ", 参 加 的 有 22个 在 台 湾相 当 著 名 的 计 算 机公 司 ,并 在 台 ...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    这个工具类目前主要有25种正规表达式(有些不常用,但那时才仔细深入的研究了一下正规,写上瘾了,就当时能想到的都写了): 1.匹配图象; 2 匹配email地址; 3 匹配匹配并提取url ; 4 匹配并提取http ; 5.匹配日期 6...

Global site tag (gtag.js) - Google Analytics