JVM 字节码(四)静态方法.构造代码.this 以及 synchronized 关键字 一.静态代码 public class ByteCodeStatic { private static final String DEFAULT_VALUE = "default_value"; private static String str = DEFAULT_VALUE; static { System.out.println("hello"); } } 编译后查看对应…
<Java虚拟机原理图解>1.5. class文件中的方法表集合--method方法在class文件中是怎样组织的 一个类有多个方法,所以方法肯定是一个集合. 目标是: 1,了解方法在字节码中结构,在字节码中的位置. 2,了解方法体会怎样被编译成机器指令 3,开发环境是如何根据字节码产生代码提示功能. 1,方法位置和结构:计数器和方法信息集合 2,方法信息包括那些内容: 这些信息对应的方法信息结构和字段的结构类似: 这些内容包括: 访问标志(access_flags):记录这个方法的作用域.静…
Class文件二进制字符流通过类加载器和虚拟机加载到内存(方法区)完成在内存上的布局和初始化后,虚拟机字节码执行引擎就可以执行相关代码实现程序所定义的功能.虚拟机执行引擎执行的对象是方法(均特指非本地方法),方法是 着一个程序所定义的一个功能的载体,实现预定的业务功能或者特定的功能等.虚拟机执行引擎就是执行程序方法的一个引擎,一个类的信息通过方法承载了它所担负的功能职责,程序的执行就是一个个方法的执行和相互调用. 方法的内容有:方法名,参数列表,返回值,内部定义的局部变量,方法的可见性,方法内部…
Dalvik字节码有着自己的类型,方法与字段表示方法,这些方法与Dalvik虚拟机指令集一起组成了一条条的Dalvik汇编代码. 1.类型 Dalvik字节码只有两种类型,基本类型与引用类型.Dalvik使用这两种类型来表示Java语言的全部类型,除了对象与数组属于引用类型外,其他的Java类型都是基本类型.BakSmali严格遵守DEX文件格式中的类型描述符定义.类型描述符对照如下表 语法 含义 V void,只用于返回类型 Z boolean B byte S short C char I…
在上一次[https://www.cnblogs.com/webor2006/p/9723289.html]中已经对Java方法的静态分派在字节码中的表现了,也就是方法重载其实是一种静态分派的体现,这次来分析一下与之对应的动态分派机制,其表现就是方法的重写多态机制,下面先来看下代码: 很显然是一个多态相关的代码,但结果会打印啥呢,看一下: 这个结果比上一节的要容易理解一些,是符合预期的,那从字节码角度如何来解释该程序的输出呢,下面详细来用jclasslib来分析一下它的字节码流程,如下: 上面是…
转自:http://blog.csdn.net/neustar1/article/details/19492113 本文在上篇的基础上介绍WebRTC视频部分的模块结构,以进一步了解其实现框架,只有了解了整体框架结构,对局部算法修改才能够胸有成竹. 一.对外接口 对外接口有ViEBase,ViECapture,ViECodec,ViEEncryption,ViEFile,ViEImageProcess,ViENetwork,ViERender和ViERTP_RTCP.主要接口有: 1)ViEBa…
一.执行引擎      “虚拟机”的概念是相对于“物理机”而言的,这两种“机器”都有执行代码的能力.物理机的执行引擎是直接建立在硬件处理器.物理寄存器.指令集和操作系统层面的:而“虚拟机”的执行引擎是自己实现的,因此可以自定义指令集和执行引擎的结构体系,而且可以执行那些不能被硬件直接支持的指令. 在不同的“虚拟机”实现里面,执行引擎在执行JAVA代码的时候有两种方式:解析实行(通过解释器执行)和编译执行(通过即时编译器编译成本地代码执行). 二.运行时数据结构 栈帧       栈帧是用于支持虚…
invokestatic,用于static修饰的方法.任何时候调用的时候只需要类名+方法名即可,无需new.JVM直接将其映射到方法区,执行速度极快.当该方法需要参数的时候,invokestatic会使用命令将参数从栈中弹出,传递给invokestatic. invokevirtual,用于public和protected修饰而没有static修饰的方法.在invokevirtual之前,总会有两条命令,astore(从栈中弹出对象引用,然后将其存到相应位置的局部变量中) & aload(将对象…
方法表 1.methods_count  method_info,前三个字段和field_info一样 2.方法的属性结构 方法中的每个属性都是一个attribut_info结构 JVM定义了部分attribute,但是编译器自己也可以实现自己的attribute写入class文件里,供运行时使用. 不同的attribute通过attribute_name_index来区分. JVM规范预定义的attribut 3.Code结构 Code attribute 的作用是保存该方法的结构,如所对应的…
方法表: 在上一次咱们已经分析到了字段信息了,如下: 紧接着就是方法相关的信息了: 而它展开之后的结构为: 所以往后数2个字节,看一下方法的总数: 3个方法,可咱们只定义了两个方法呀: 因为编译器会为我们生成一个默认的构造方法,所以就3个了,那每个方法的具体信息是啥呢?它是一个method_info类型的,如下: 也就是方法表,当然也有它自己的一个结构,下面来看一下: access_flags:占用两个字节,表示访问标记. name_index:占用两个字节,名字索引,指向的是常量池. desc…