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

java虚拟机开发,刚刚走通执行了一段测试java代码

阅读更多
我想开发一个学习用的Java虚拟机。做这件事已经有二三个月了。今天刚刚跑起来,
执行了一段简单的java代码。虚拟机开发是一件复杂的事情,有许多事情要做。现在只做了了一点工作而已,让它跑起来,可以执行几条简单指令。

这是我用来测试的一段java代码:
public class ClassHasStaticMethod
{

public static void main()
{
int sum;
sum = addTwoInt(10,20);
}

static int addTwoInt(int x, int y)
{
int z;
z = x+y;
return z;
}

}

这个java类只有静态方法。其中main方法为执行入口,为了简单,main方法不需要参数。

虚拟机源代码,请参考附件,可以用visual studio编译或者gcc编译(我在vs2008和cygwin下均编译通过)。当前只实现了invokestatic指令和其它一些指令的解释执行。

请用javac编译ClassHasStaticMethod类,然后编译这个虚拟机和运行。

  • v02.rar (29.4 KB)
  • 下载次数: 46
分享到:
评论
7 楼 simpleman7210 2013-11-29  
关于父类对象强制转为子类对象,我可能说的不够清楚,补充一下:父类对象可以强制转为子类对象,前提是这个对象实际上是子类(或其继承类)的对象。举个例子:
A a;
A* pa;
B b;
B* pb;
pa = &a;
//pb = (B*)pa; //这是错误的
pa = &b;       //ok
pb = (B*)pa;   //ok


这个例子中,设类B继承自A。
6 楼 simpleman7210 2013-11-26  
可以强制转换的,一般是从子类对象转换为父类,但也可以强制从父类转为子类。如果没有这样的继承关系,你不能将一个对象强制转为另一个对象。
5 楼 panqj_hust 2013-11-25  
    NameDescHash *hashObj = lookup(name, descriptor, _methods_hash_table, NAME_DESC_TABLE_SIZE);
    MethodInfo *methodInfo = (MethodInfo *)hashObj;

这个强制转换,是怎么做到的?从子类,可以得到父类的信息,我感觉很奇怪啊。平时接触c语言多些,对于面向对象的机制不是很懂。

//NameDescHash是用hash的办法检验类中是否有重复字段或方法,
//同时利用hash的办法也便于快速查找字段或方法
class NameDescHash
{
public:
virtual CONST_Utf8_ptr_info getName() = 0;
virtual CONST_Utf8_ptr_info getDescriptor() = 0;
virtual NameDescHash *getNext() = 0;
virtual void setNext(NameDescHash *next) = 0;
};

class MethodInfo : public NameDescHash
4 楼 simpleman7210 2013-11-24  
常量池中的项的排列次序,我没有看到有什么文章说,需要遵守一定的次序。因此,this_class对应常量池索引3,或者super_class对应4,只是在这个例子中是如此而已,没有什么必然性。
3 楼 panqj_hust 2013-11-24  
这几天看了下,明白了些常量池,觉得类似于嵌入式下面的map文件,包含了变量的大小,地址,函数地址。

但是还有个不懂的地方就是在ClassHasStaticMethod.class中,为什么每次编译都有如下的结果呢?


u2 this_class   0003
u2 super_class  0004

当前类一定是0003吗?
2 楼 simpleman7210 2013-11-23  
你的问题不够具体,我不大明白你的意思。在对Class文件解析之后,得到JavaClass对象,里面包含若干个MethodInfo,MethodInfo包含了方法的信息。CodeInterpreter(后面版本改名为Bytecode)负责字节码解释执行,请看execute()函数,一条条解释执行字节码。比如执行invokestatic字节码指令时,就调用handle_invokestatic()函数,具体请看这个函数是怎么实现的。
1 楼 panqj_hust 2013-11-22  
把method和class在常量池记录下来后,应该怎么去用呢?字节码是怎么找到这些信息的呢?

相关推荐

    Java虚拟机规范中文版(JavaSE7).pdf

    Java源代码被编译成字节码,这是一种中间表示形式,可以被任何Java虚拟机理解和执行。字节码的这种设计使得Java程序能够在不同的平台上运行,无需重新编译。字节码文件格式定义了.class文件的结构,包括魔数、版本...

    Java虚拟机(Java VM) msjavax86 微软java虚拟机

    Java虚拟机(Java Virtual Machine,简称JVM)是Java编程语言的核心组成部分,它是一个用于执行Java字节码的软件或硬件设备。Java程序在编译时并不直接转化为机器语言,而是转化为中间代码,即字节码。JVM的作用就是...

    java虚拟机各种版本

    Java虚拟机(JVM)是Java编程语言的核心组成部分,它为Java程序提供了跨平台的运行环境。Java程序在编写完成后,会被编译成字节码(.class文件),这些字节码可以在任何装有JVM的系统上运行,实现了“一次编写,到处...

    java虚拟机

    Java虚拟机(JVM,Java Virtual Machine)是Java平台的核心组成部分,它负责执行Java程序,为Java代码提供了跨平台的运行环境。Java虚拟机的概念始于Sun Microsystems,现在由Oracle公司继续发展和维护。JVM的设计...

    Java虚拟机解释执行机制研究.pdf

    Java虚拟机(JVM)是一种能够执行Java字节码的虚拟机,它提供了一个平台无关的执行环境,使得Java程序可以在各种不同的硬件和操作系统上运行。JVM解释执行机制是Java虚拟机执行字节码的一种方式,其中解释器将Java...

    深入java虚拟机笔记

    - **Java虚拟机(JVM)**:JVM是Java体系的核心组件,负责解释执行Java字节码,同时提供了内存管理、异常处理等运行时服务。它确保了Java程序能够在不同的操作系统上一致地运行。 - **类装载器的体系结构**:类装载...

    java虚拟机的详细原理

    Java虚拟机(Java Virtual Machine,简称JVM)是一种可以执行Java字节码(Bytecode)的虚拟计算机。它为Java程序提供了一个运行环境,使得Java程序可以在任何安装了JVM的操作系统上运行而无需重新编译。 #### 二、...

    Java运行原理与Java虚拟机.pdf

    2. **解释执行阶段**:字节码文件由Java虚拟机(JVM)解释执行。JVM是Java平台的核心组件,它负责将字节码转换为特定平台的机器码并执行。这一过程不仅实现了平台无关性,还增强了程序的安全性和可移植性。 #### 二、...

    深入java虚拟机 高清pdf 高清高清高清

    1. **Java虚拟机概述**:Java虚拟机是Java平台的核心组件,它负责解析和执行Java字节码,为程序提供了一个跨平台的运行环境。理解JVM的工作原理有助于优化代码并解决各种运行时问题。 2. **内存模型**:书中详细...

    Java虚拟机规范PDF

    由于无法查看实际的图片和OCR扫描文字内容,我将基于标题和描述提供关于Java虚拟机(JVM)规范的详细知识点。 ### Java虚拟机规范知识点 #### 1. JVM概述 Java虚拟机是运行所有Java程序的抽象计算机,它遵循一定的...

    Java虚拟机规范(Java SE 7).pdf

    通过学习这本书,开发者不仅可以了解到Java虚拟机的工作原理,还能掌握如何利用这些知识来优化自己的代码。尽管本书的发布已经有相当一段时间,但对于那些希望深入了解Java底层实现的开发者来说,它仍然是不可或缺的...

    Java虚拟机的深入研究

    JVM的这种设计使得开发者只需关注Java代码,而无需关心底层操作系统和硬件细节,极大地提升了开发效率和程序的可移植性。通过深入理解JVM的工作原理,开发者可以更好地优化Java应用程序的性能,解决内存管理、垃圾...

    Java 虚拟机规范.pdf

    了解JVM规范,对于深入理解Java程序如何在不同的平台上运行,以及如何编写高效、优化的Java代码至关重要。 1. **JVM架构**: - **类加载器(ClassLoader)**:负责从文件系统或网络中加载Class文件,Class文件在...

    java 虚拟机 教程 pdf

    Java虚拟机(JVM)是Java程序运行的核心组件,它为Java代码提供了跨平台的运行环境。本教程将深入解析JVM的工作原理、内存管理、类加载机制以及性能优化等方面的知识,帮助Java程序员提升对这一关键技术的理解。 ...

    深入JAVA虚拟机 随书源码 JVM规范

    Java虚拟机(JVM)是Java程序运行的核心,它负责解释和执行字节码,为开发者提供了跨平台的运行环境。深入理解JVM对于优化代码性能、排查问题以及提升编程能力至关重要。本篇文章将详细探讨JVM的工作原理、内存管理...

    深入JAVA虚拟机第二版 Bill Venners著 曹晓钢 蒋靖译

    1. **Java虚拟机(JVM)概述**:JVM是Java平台的核心组成部分,它负责执行字节码,为Java提供跨平台的运行环境。JVM的设计目标是实现一次编写,到处运行。 2. **类加载机制**:JVM的类加载过程包括加载、验证、准备...

    java虚拟机精讲pdf

    高翔龙编著的《java虚拟机精讲》是一本面向已有一定Java基础的开发者的深度学习资料,旨在帮助读者深入理解JVM的工作原理及其在实际开发中的应用。 首先,我们需要了解JVM的主要结构和组件。JVM包括类装载器、运行...

Global site tag (gtag.js) - Google Analytics