`

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
分享到:
评论

相关推荐

    java class文件查看工具

    1. **Class文件结构** Java Class文件遵循特定的文件格式,这个格式由一系列的8位字节构成,包括魔数(Magic Number)、版本信息、常量池、访问标志、类和父类索引、接口索引集合、字段表集合、方法表集合、属性表...

    Java反编译工具把.class文件转换为.java文件

    ### Java反编译工具:将.class文件转换为.java文件 #### 概述 在软件开发领域,有时我们可能需要分析第三方库或者开源项目的内部结构,这时就需要借助于反编译工具来帮助我们阅读和理解其源码。Java作为一种广泛...

    电脑java class文件查看与修改工具

    需要注意的是,修改.class文件通常不是常规的开发流程,它可能用于调试、修复bug或研究已有的闭源软件。在进行这类操作时,必须遵守版权法,确保你有权利访问和修改这些代码。 总结来说,"电脑java class文件查看与...

    JavaDecompiler打开class文件

    它允许用户查看并理解已编译的.class文件的内容,因为Java的源代码(.java文件)通常不会随可执行文件一起发布。`JavaDecompiler`这个标题暗示我们将探讨如何使用Java反编译器来打开和解析.class文件。 Java类文件是...

    Java class文件反编译工具集

    Java class文件是Java程序编译后的二进制代码,它包含了类、方法、变量等信息。但是,由于class文件是以机器可读的形式存在,对于人类来说并不直观。这时,我们就需要借助于反编译工具来将class文件转换回源代码...

    java class文件反编译工具

    Java Class文件反编译工具是开发者在处理已编译的.class文件时的一种实用工具,它能够将二进制的Class文件转换回可读性更强的源代码格式,这对于理解和调试已封装的库或分析未知的Java程序至关重要。本文将详细介绍...

    ClassFinal是一款java class文件安全加密工具

    总的来说,ClassFinal作为一款Java class文件安全加密工具,为开发者提供了一种简单、高效的代码保护方案,尤其适合于那些重视代码安全但又不想改动大量代码的企业级项目。其兼容性和易用性使其在Java开发领域具有...

    java .class反编译成.java工具

    总之,jd-gui.exe作为一款便捷的Java反编译工具,使得开发者能够轻松地查看和理解.class文件中的代码,对于学习、调试和研究都有着很大的帮助。在使用过程中,我们需要注意其局限性,如代码格式和注释可能不完整,...

    java class 文件查看神器

    1. **打开类文件**:直接拖放或者通过菜单选择Java `.class`文件,软件会反编译成接近原始的Java源代码形式。 2. **查看类结构**:看到类的定义,包括类名、包名、继承关系、接口实现、字段和方法等。 3. **查看方法...

    java class反编译工具

    Java Class反编译工具是程序员在处理已编译的字节码文件时不可或缺的辅助工具。这类工具的主要功能是将`.class`文件转换回可读性强的`.java`源代码,帮助开发者理解或修改已有的Java程序,尤其在没有源代码的情况下...

    java class文件反编译

    1. JD-GUI:这是一个图形用户界面的Java反编译器,可以从jar包中直接打开并查看Class文件。它提供了简洁的源代码视图,支持搜索和高亮显示,便于阅读和理解。JD-GUI是文件列表中的"jd-gui.exe",可以直接运行进行反...

    java反编译软件—java破解CLASS文件工具jd-gui

    JD-GUI是一款常用的Java反编译工具,它能将.class文件转换回接近原始的Java源代码形式,帮助用户理解和分析Java程序。 JD-GUI是一个图形用户界面应用程序,可以直接打开并显示单个Java类文件的源代码。它的界面简洁...

    反编译软件,可以将class文件反编译为java文件

    在IT领域,反编译是一种将已编译的字节码(如Java的.class文件)转换回源代码(如Java的.java文件)的过程。标题提到的"反编译软件"是一种工具,它允许用户查看和理解Java类文件的内部结构,即使原始的源代码不再...

    java反编译工具,能将.class文件转换成.java文件

    Java反编译是将已编译的字节码(.class文件)转换回源代码(.java文件)的过程,这在需要查看或理解已丢失源代码的二进制类文件时非常有用。在这个领域,jd-gui是一款常用的开源工具。 jd-gui是一个图形用户界面的...

    Class文件反编译工具

    总的来说,Class文件反编译工具是Java开发者和研究人员的重要辅助工具,它使我们能在没有源代码的情况下理解和操作二进制的Java类文件,极大地扩展了我们的能力范围。在实际使用中,结合各种反编译器的特点和需求,...

    java反编译(将class文件反向编译成java源文件)

    Java反编译是一种技术,它允许开发者从已编译的.class文件中恢复原始的.java源代码。这在一些情况下非常有用,例如分析第三方库的内部实现、研究代码逻辑或者在丢失源代码时恢复源码。Java编译器将源代码转换成字节...

    反编译工具把Class文件转换为JAVA

    jad的使用非常简单,用户可以直接提供类文件的名称,例如`jad example1.class`,这将会把example1.class文件反编译为对应的.java文件。同时,jad也支持使用通配符(*)来一次性处理多个类文件,如`jad *.class`,这...

Global site tag (gtag.js) - Google Analytics