最近弄jvm 移植到ucos上,在看 jvm代码比较迷茫。
1。void InitalizeAsynchronousIO(void) {
    if (VersionOfTheWorld++ == 0) {
        int i;
        for (i = 0 ; i < ASYNC_IOCB_COUNT ; i++) {
            ASYNCIOCB *aiocb = &IocbRoots[i];
            FreeAsyncIOCB(aiocb);
        }
    } else {
        while (ActiveAsyncOperations() > 0) {
            Yield_md();
        }
    }
}
这个代码创始化 5 个 I/O ,这个5 个 I/O 是什么作用。 在程序运算时,启动几个线程。2。 JVM 移植时 ,可不可以脱离操作系统直接运行啊?  谢谢

解决方案 »

  1.   

    第一个中的 JVM 代码是哪个文件中的?至少说一下文件名吧?否则这一段莫名其妙的代码天知道是干嘛的。JVM 运行依赖于操作系统的,像 Windows 版本的 JVM 底层大量地调用了 Win32 API
      

  2.   

    JVM 移植时 ,可以脱离操作系统直接运行
      

  3.   

    1. 函数 void InitalizeAsynchronousIO(void) , 在startJVM.c 文件中,int KVM_Start(int argc, char* argv[]),函数中。2. Windows 版本的 JVM 底层大量地调用了 Win32 API, 请问都调用哪些API,在哪部分调用的?我看JVM代码,看和windows系统相关的就是 线程 和 文件 是和windows打交道的。移植时文件可以用数据替换,线程能不能把多线程的去掉,这样,JVM是不是就和系统没有关系了。
    谢谢
      

  4.   

    纯粹的jvm移植还是比较困难的,jvm应该是比较依赖操作系统api的
      

  5.   

    spiniper :
    能不能详细说几个 JVM 调用的 API,我的理解是, jvm在初始化中 调用InitializeNativeCode()函数需要创建线程,这个和操作系统有关,还有后面的就是和文件相关的了。还有,jvm 运行时启动几个线程?
     
    我对jvm 运行流程理解:在jvm 初始完, 通过loadMainClass(argv[0]);加载,验证 类文件,之后调用Interpret()开始解析输出类文件的结果了。 
      

  6.   

    进一步了解和windows api 还有: AlterUser(), allocateHeap(), freeHeap(), InitilizeNativeHeap(), FinalizeHeap(),  CurrentTime_md(), uLong64, long64, Big_ENDIAN or LITTLE_ENDIAN
      

  7.   

    老实说,我没有对虚拟机的源码研究过,不过单纯的移植肯定不行,因为操作系统不同并不仅仅是api上的不同,可能操作系统的运行机制与算法机制都不同,包括数据结构和IO调用方式都会有差异,甚至是文件系统类型与系统路径。jvm是java依赖的底层环境,没有好的运行环境,java会变得非常恶心,因为java本身性能就不优越,它全靠jvm的优良设计。所以我觉得如果可能,依照规范从新开发jvm,当然你们可能不可能投入那么多人力物力,但是如果简单的移植,可能出现的结果就只是编译能够通过可以运行而已,不能投入到实际生产中。
      

  8.   

        其实大多数人都被sun公司的“一次编写,处处运行”的话给骗了,其实即使使用虚拟机有些方面的表现还是不一样的。毕竟要做到各种不同的操作系统表现一直需要非常了解系统底层。这也是这也年sun没在大肆强调的原因
      

  9.   

    看java虚拟机书有流程:
      java程序 --->java API --> 本地方法(动态库) -->主机操作系统
    请问: 本机方法库在 jvm 什么位置? 如何移植?  谢谢
      

  10.   

    jvm进程管理整个过程,所有的程序都在jvm内运行。
    启动java程序必须启动jvm,所以所有流程都属于jvm。
      

  11.   

    有没有成功移植过java虚拟机的同仁,讲一下移植过程,和移植注意点。 谢谢。 
      

  12.   

    目前,用的kvm源码在vc++中已经编译通过,现在正向设备中移植,但一直没有看到梦想的 "Hello world".
      

  13.   

    请问cldc 用cygwin 编译时出现如下错误,是什么问题???Linking ... kvm.exeruntime2_md.o  error LNK2001: unresolved external symbol __beginthread
    kvm.exe: fatal error LNK1120: 1 unresolved externals