java虚拟机5 字节码

  java字节码本质是java程序的格式化表示,便于机器处理。所以他是java程序的另一种表示,java程序包含的信息他都包含并且更加结构化。

  java虚拟机字节码格式:

magic

  魔数,标识该文件是一个字节码文件。

minor_version

major_version

  字节码的版本号

constant_pool

  常量池,存储字节码中的常量数据以及符号引用。常量数据包括有utf8、Integer、float、long、double几种类型。符号引用包括有class、field、method

  因为java在编译的时候,不像c有连接的过程,虚拟机加载的时候是动态连接,所以需要存储符号引用以便虚拟机加载的时候进行连接。

access_flags

  访问标识。

this_class

  类索引,指向一个常量池中的class类型

super_class

  父类索引,指向一个常量池中的class类型

interfaces

  接口索引,指向多个常量池中的class类型

fields

  字段,存储类的字段定义。

methods

  方法,存储类的方法定义。

attributes

  属性表用于存储class文件、字段、方法的专有信息,如下所示。字段和方法都有自己的属性定义。

属性名称 使用位置 含义
code 方法 字节码指令
ConstantValue 字段 final定义的常量
Deprecated 类、方法、字段 声名位deprecated的类、字段、方法
Exceptions 方法 方法抛出的异常
InnerClasses 内部类列表
LineNumberTable code 源码行号欲指令对应关系
LocalVariableTable code 方法局部变量
SourceFile 原文件名称
Synthetic 类、方法、字段 编译器自动生成

  

原文地址:https://www.cnblogs.com/zhangwanhua/p/7427123.html

时间: 2024-10-07 21:01:52

java虚拟机5 字节码的相关文章

深入JAVA虚拟机之字节码执行引擎

前言:class文件结构.类加载机制.类加载器.运行时数据区这四个java技术体系中非常重要的知识,学习完了这些以后,我们知道一个类是通过类加载器加载到虚拟机,存储到运行时数据区,而且我们也知道了我们方法体内的代码被编译成字节码保存在方法表中的code属性中,那么虚拟机又是怎么执行这些代码的,得出方法输出结果的呢?这一节我们就要来学习,关于虚拟机字节码执行引擎的相关知识.通过这章节的学习,我们要掌握一下知识点: 1.运行时栈帧结构 2.方法调用 3.基于栈的字节码执行引擎 运行时栈帧结构 栈帧是

命令查看java的class字节码文件

查看java字节码 1 javac –verbose查看运行类是加载了那些jar文件 HelloWorld演示: javac –verbose HelloWorld.java 可以看到虚拟机编译时做了那些事情-- java –verbose HelloWorld 可以看到虚拟机运行一个程序时加载的jar包 更多内容查看javac –help命令 2  javap查看字节码 首先使用javap –help可以查看到各种命令,各个命令什么作用,可以自己运行试试-- 这里只测试javap –c和jav

java Instrument修改字节码实现aop功能

Agent工程2个类: public class MyAgent { /** * 该方法在main方法之前运行,与main方法运行在同一个JVM中 * 并被同一个System ClassLoader装载 * 被统一的安全策略(security policy)和上下文(context)管理 */ public static void premain(String agentOps, Instrumentation inst) { System.out.println("=========prema

如何查看.java文件的字节码(原码)

出自于:https://www.cnblogs.com/tomasman/p/6751751.html 直接了解foreach底层有些困难,我们需要从更简单的例子着手.下面上一个简单例子: 1 public class Simple { 2 3 public static void main(String[] args) { 4 int i = 5; 5 System.out.println(i); 6 } 7 } 找到其字节码文件所在目录并在目录下打开终端(Windows系统是在目录下shif

Java虚拟机定义

虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机有自己完善的硬体架构,如处理器.堆栈.寄存器等,还具有相应的指令系统.JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行.[1] 中文名 java虚拟机 外文名 Java Virtual Machine 目录 1定义 2简介 3特点 4使用主体 5安装方法 6数据类型 7规格描述 ? JVM指令系统 ? JVM寄

《深入Java虚拟机学习笔记》- 第3章 安全

3.1为什么需要安全性 Java的安全模型是其多个重要结构特点之一,它使Java成为适于网络环境的技术.因为网络提供了一条攻击连人的计算机的潜在途径,因此安全性是非常重要的.Java安全模型侧重于保护终端用户免受从网络下载的.来自不可靠来源的.恶意程序(以及善意程序中的bug)的侵犯.为了达到这个目的,Java提供了一个用户可配置的"沙箱",在沙箱中可以放置不可靠的Java程序. 例如:原来在版本1.0中的沙箱对很多不可靠Java applet的活动做了限制,包括: 对本地硬盘的读写操

Java 虚拟机面试题全面解析(干货)

Java 虚拟机面试题全面解析(干货) 本文固定链接:https://www.zybuluo.com/Yano/note/321063 本文 PDF 下载:http://download.csdn.net/detail/yano_nankai/9469648 LeetCode题解:https://github.com/LjyYano/LeetCode 我的博客:http://blog.csdn.net/yano_nankai 周志明著的<深入理解 Java 虚拟机>的干货~如有错误,欢迎指出

《Java虚拟机精讲》读书笔记-第二章 字节码的编译原理

jvm同样可以执行其它语言的代码,如ruby,js只要他们编译成符合规范的字节码 相关信息可以百度jruby等 而java本身编译字节码的工具也就是我们都知道的javac.exe 然而我们在eclipse中的编译工作并不是读取jdk执行javac实现的,而是使用了eclipse自带的ECJ编译器实现的,javac采用的是全量编译,而ecj使用的是增量编译,tomcat也使用ecj编译jsp页面 编译分为4部分 词法分析 将源码中的关键字和标识符等内容转换为符合java语法规范的token序列,然

java字节码忍者禁术

Java语言本身是由Java语言规格说明(JLS)所定义的,而Java虚拟机的可执行字节码则是由一个完全独立的标准,即Java虚拟机规格说明(通常也被称为VMSpec)所定义的. JVM字节码是通过javac对Java源代码文件进行编译后生成的,生成的字节码与原本的Java语言存在着很大的不同.比方说,在Java语言中为人熟知的一些高级特性,在编译过程中会被移除,在字节码中完全不见踪影. 这方面最明显的一个例子莫过于Java中的各种循环关键字了(for.while等等),这些关键字在编译过程中会