
java虚拟机
文章平均质量分 83
chunyuan314
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
自制Java 虚拟机(一)解析class文件
自制Java 虚拟机(一)解析class文件一、认识class文件结构一个.java后缀的java源文件,经过javac编译之后的字节码文件,结构如下:(摘自jvm虚拟机规范 version8)ClassFile { u4 magic; // 魔数,值为 0xCAFEBABE,表示这是一个java class文件 u2 minor_ve原创 2017-06-01 23:05:15 · 1362 阅读 · 0 评论 -
自制Java虚拟机(三)运行第一个main函数
自制Java虚拟机(三)运行第一个main函数一、执行指令的一般模型Java虚拟机有200多条指令,用switch-case来一一匹配并执行每个指令,显得过于臃肿又不灵活。我们可以把每个指令用一个函数实现,遇到指令就调用相应的函数处理之。这个函数应该知道它所处理指令的上下文,包括当前指令位置、当前类、当前帧等,这些我们都封装在一个结构体内,通过指针传给函数。函数太多,我们把它们组织到一个数组里,以o原创 2017-06-03 11:49:46 · 1759 阅读 · 0 评论 -
自制Java虚拟机(五)实现继承、多态、invokevirtual
自制Java虚拟机(五)实现继承、多态、invokevirtual本篇文章将研究如何实现面向对象的继承和多态特性,同时实现invokevirtual。一、实例属性的继承继承实现了数据与方法的复用。类属性与实例属性类属性的修饰符要加上static,是属于类的类属性只有一份,该类创建的多个对象共享同一份类属性,jvm中由getstatic、putstatic指令操作实例属性每个对象各自一份,各管各原创 2017-06-07 19:12:27 · 2715 阅读 · 2 评论 -
自制Java虚拟机(二)指令、帧/栈帧
自制Java虚拟机(二)指令、帧/栈帧上篇文章中,我们已经成功地解析了class文件,包括其中的常量池(constant_pool)和代码(code),一个很直接的思路就是实现jvm的200多条指令,然后找到main方法,执行里面的指令。一、初识jvm指令一条java虚拟机由一个指明需要执行操作的opcode,以及后面跟着的0个 或多个被操作的值组成。jvm指令是基于栈的,意味着这些指令不直接操作寄原创 2017-06-02 22:06:21 · 1190 阅读 · 0 评论 -
自制Java虚拟机(四)-对象、new、invokespecial
自制Java虚拟机(四)-对象、new、invokespecial一、对象的表示刚开始学Java的时候,图书馆各种教程,书名往往都是“Java面向对象高级编程”,通常作者都会与C++做个比较,列出的优点往往都有纯面向对象、自动垃圾收集(不用管理内存)、跨平台(Write once, run everywhere 是宣传的重点,前提是需要在每个平台上安装jvm)、没有指针(后来证明是有的)、安全等。本原创 2017-06-04 09:32:19 · 2933 阅读 · 0 评论 -
自制Java虚拟机-总结
自制Java虚拟机-总结项目介绍该项目的目的是从零开始用C语言做一个实验性质的Java虚拟机,实现大部分JVM指令,实现基本的面向对象特性(封装、继承、多态),能够运行一个不涉及Java本地方法调用的类(不能包含未实现的指令,见下面的指令实现情况),因为涉及到Java的本地方法(native method)还是比较麻烦的,暂时没有那么多时间精力去研究。 经过整理之后,代码托管到了github上。原创 2017-06-24 12:05:13 · 2024 阅读 · 3 评论 -
自制Java虚拟机(六)静态属性和静态方法(getstatic, putstatic, invokestatic, <clinit>)
自制Java虚拟机(六)静态属性和静态方法(getstatic, putstatic, invokestatic, )Java中,静态属性和静态方法都是属于类的,类的诸多实例共享同一个静态属性和静态方法。操作实例属性和实例方法的指令分别为:getfield、putfield、invokespecial、invokevirtual等,至于静态属性和静态方法,对应的指令为getstatic、putsta原创 2017-06-15 00:30:33 · 9709 阅读 · 0 评论