`
simpleman7210
  • 浏览: 18129 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

实现invokespecial指令和invokevirtual

阅读更多
自从上次实现new指令之后,我没有马上实现invokespecial指令,因为对于invokespecial指令的理解需要时间。现在基本实现了invokesecial指令,但是在权限检查上遇到一个困难,主要是派生类对于基类protected实例成员(非静态成员)的访问。这个问题暂时忽视了。接着实现了invokevirtual指令,也遇到访问权限方面的疑问。我参考“深入java虚拟机”的一个例子,这个例子测试通过了,如下。

Superclass.java
class Superclass {
	private void interestingMethod() {
		//System.out.println("Superclass's interesting method.");
	}

	void exampleMethod() {
		interestingMethod();
	}
}


Subclass.java
class Subclass extends Superclass {
	void interestingMethod() {
		//System.out.println("Subclass's interesting method.");
	}

	public static void main(String args[]) {
		main();
	}

	public static void main() {
		Subclass me = new Subclass();
		me.exampleMethod();
	}
}


用javac编译上述两个java文件,然后编译和运行虚拟机。虚拟机代码参考附件,同样这一次的版本我在visual studio以及cygwin下都编译通过。
0
4
分享到:
评论

相关推荐

    深入JVM---JVM命令---invokespecial

    NULL 博文链接:https://wensiqun.iteye.com/blog/1125503

    JVM调用Lambda的表达式实现方法原理详解.docx

    invokespecial:用于调用实例构造器方法、私有方法和父类中的方法。 invokevirtual:用于调用所有的虚方法。 invokeinterface:用于调用接口方法,会在运行时再确定一个实现该接口的对象。 invokedynamic:...

    JVM工作原理及内存管理机制

    在执行方法时JVM提供了invokestatic、invokevirtual、invokeinterface和invokespecial四种指令来执行 (1)invokestatic:调用类的static方法 (2)invokevirtual:调用对象实例的方法 (3)invokeinterface:将属性...

    深入java虚拟机第二版

    19.3.1 指令invokespecial和[init]()方法 19.3.2 指令invokespecial和私有方法 19.3.3 指令invokespecial和super关键字 19.4 指令invokeinterface 19.5 指令的调用和速度 19.6 方法调用的实例 19.7 从方法...

    深入JAVA虚拟机(第2版)

    19.3.3 指令invokespecial和super关键字 19.4 指令invokeinterface 19.5 指令的调用和速度 19.6 方法调用的实例 19.7 从方法中返回 19.8 随书光盘 19.9 资源页 第20章 线程同步 20.1 监视器 20.2 ...

    深入Java虚拟机

    19.3.1 指令invokespecial和[init]()方法 19.3.2 指令invokespecial和私有方法 19.3.3 指令invokespecial和super关键字 19.4 指令invokeinterface 19.5 指令的调用和速度 19.6 方法调用的实例 19.7 ...

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    19.3.1 指令invokespecial和[init]()方法 19.3.2 指令invokespecial和私有方法 19.3.3 指令invokespecial和super关键字 19.4 指令invokeinterface 19.5 指令的调用和速度 19.6 方法调用的实例 19.7 ...

    深入java虚拟机中文第2版

    第20章 指令invokespecial 第21章 线程同步 附录A 按操作码助记符排列的指令集 附录B 按功能排列的操作码助记符 附录C 按操作码字节值排列的操作码助记符 附录D Java虚拟机的一个模拟:“Slices of Pi”

    深入Java虚拟机(原书第2版)及书中源代码

    第20章 指令invokespecial 第21章 线程同步 附录A 按操作码助记符排列的指令集 附录B 按功能排列的操作码助记符 附录C 按操作码字节值排列的操作码助记符 附录D Java虚拟机的一个模拟:“Slices of Pi” 原码中的小...

    深入java虚拟机

    完整版,有书签。 第1章 Java体系结构介绍 第2章 平台无关 第3章 安全 第4章 网络移动性 第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 ...第20章 指令invokespecial 第21章 线程同步

    【Java】从汇编码分析java对象的创建过程

    源码: class T { int m = 8; } T t = new T(); 汇编码: 0 new #2 ...4 invokespecial #3 ...复制操作,因为invokespecial会消耗一份引用...将符号和对象建立关联,即t和堆中的对象。 其实很简单,今天看一个视频说了半天

    Head First Java 中文高清版1

    public void buildInvite() {File Edit Window Help Plead1 invokespecial #1 <Method

    Head First Java中文版1

    public void buildInvite() {File Edit Window Help Plead1 invokespecial #1 <Method

    10Java对象的内存布局1

    // Foo 类构造器会调用其父类 Object 的构造器1 invokespecial java.lang.Object() [8]然后,子类的构造器需要调用

    深入java虚拟机(inside the java virtual machine)

    invokespecial and Private Methods invokespecial and super The invokeinterface Instruction Invocation Instructions and Speed Examples of Method Invocation Returning from Methods On the CD-ROM ...

    bytecodelib:类似LLVM的JVM字节码库

    我构建它是因为使用 SSA 表单比手动管理操作数堆栈和局部变量要容易得多。 它有许多缺陷,既有明显的(异常处理程序没有建模),也有微妙的( invokespecial没有建模,除了调用超类构造函数)。 但就其功能而言,它...

Global site tag (gtag.js) - Google Analytics