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文件的对应和内存中的关系。
相关推荐
classpy, 用于研究Java类文件的GUI工具 ClasspyClasspy是一个用于研究Java类文件的GUI工具。的灵感这里工具主要由 javap 和 JavaClassViewer激发。 我重新发明了轮子,原因如下:1. Learn Java class file
jShield是本人基于自定义类加载器技术开发的Java代码保护工具,可以加密保护Jar包或Class文件,适合需要保护Java程序的朋友使用和研究。 jShield是一款WinForm工具,通过图形化界面导入jar包或class文件后,即可...
JAVA类文件反编译工具,可以将编译后的class文件反编译为.java文件,如果源文件没有经过加密的话,基本上可以返回源代码的正确内容。 这对我们研究别人的代码又多了一个快捷方式
JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...
实际代码做一定的修改用配置文件appliction.propertities 涵盖全局变量 com.lyl.netty_mybatis_obd_01.redis.testClass 与之绑定 在com.lyl.netty_mybatis_obd_01.redis.RedisUtil中的pushData_1方法直接返回json...
1、版本:jad158e 2、支持不同系统,windows、linux、mac 3、压缩包共有四个文件...4、用法:jad -o -a -s XXX.java XXX.class 5、使用 jad 反编译的好处之一就是,可以同时生成字节码和源代码。这样可以进行对照研究。
java反编译工具 反编译java class文件 方便研究源码
其中Java编译后的Class文件12个,PNG图片文件9个,JSP页面文件8个,Java源代码文件6个,JPG图片文件3个,Preferences配置文件2个,Markdown文档2个,CSS样式文件2个,Classpath配置文件1个,以及项目配置文件1个。...
其中JPG图片文件116个,编译后的Class文件34个,XML配置文件24个,JAR打包文件18个,Java源代码文件17个,JSP页面文件8个,CSS样式文件8个,Properties配置文件3个,Markdown文档2个,以及Manifest文件2个。...
- 类文件(.class):32个 - Java源文件(.java):14个 - JAR包:3个 - Classpath配置:1个 - 项目配置文件:1个 - 偏好设置文件:1个 - Markdown文档(.md):1个 本项目为深入研究和应用用户协同过滤算法提供了...
实际代码做一定的修改用配置文件appliction.propertities 涵盖全局变量 com.lyl.netty_mybatis_obd_01.redis.testClass 与之绑定 在com.lyl.netty_mybatis_obd_01.redis.RedisUtil中的pushData_1方法直接返回json...
前段时间读了《深入Java虚拟机第二版》一书,整理了Java虚拟机的操作码,也许对学习Java VM或者研究class文件结构的朋友会有用。
项目共包含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 文件表达的...
010101_【第1章:JAVA概述及开发环境搭建】_JAVA发展概述笔记.pdf 010102_【第1章:JAVA概述及开发环境搭建】_Java开发环境搭建笔记.pdf 010201_【第2章:简单Java程序】_简单Java程序笔记.pdf 010301_【第3章:Java...
每个同学的文件夹名字为"班级_学号_姓名",文件夹中应该包括可执行文件、全部源文件及对应的class文件、辅助文件。 四、实践地点、时间、学时分配 教学内容 学时 地点 备注 学习derby数据库环境配置与基础知识 4 ...
五、具体设计 文件分别编译生成相应的字节码(class)文件。然后,用java解释器运 行主类: 主界面 六、具体分工 我参与设计添加页面,添加方法,删除页面,查询部分操作资以及源管理模块,背景 框格布局操作。 添加...
今 年 6月 7日 ,由 SUN公 司 和 台 湾 经 济 事 务 部 信 息 发 展 局, 台湾信 息 技 术 研究 所 等 单 位 牵 头 ,成 立 了 一 个 "Java联 盟 ", 参 加 的 有 22个 在 台 湾相 当 著 名 的 计 算 机公 司 ,并 在 台 ...
这个工具类目前主要有25种正规表达式(有些不常用,但那时才仔细深入的研究了一下正规,写上瘾了,就当时能想到的都写了): 1.匹配图象; 2 匹配email地址; 3 匹配匹配并提取url ; 4 匹配并提取http ; 5.匹配日期 6...