日期:2014-05-20  浏览次数:20579 次

java虚拟机移植问题
最近弄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 移植时 ,可不可以脱离操作系统直接运行啊? 谢谢

------解决方案--------------------
第一个中的 JVM 代码是哪个文件中的?至少说一下文件名吧?否则这一段莫名其妙的代码天知道是干嘛的。

JVM 运行依赖于操作系统的,像 Windows 版本的 JVM 底层大量地调用了 Win32 API
------解决方案--------------------
JVM 移植时 ,可以脱离操作系统直接运行
------解决方案--------------------
纯粹的jvm移植还是比较困难的,jvm应该是比较依赖操作系统api的
------解决方案--------------------
老实说,我没有对虚拟机的源码研究过,不过单纯的移植肯定不行,因为操作系统不同并不仅仅是api上的不同,可能操作系统的运行机制与算法机制都不同,包括数据结构和IO调用方式都会有差异,甚至是文件系统类型与系统路径。

jvm是java依赖的底层环境,没有好的运行环境,java会变得非常恶心,因为java本身性能就不优越,它全靠jvm的优良设计。

所以我觉得如果可能,依照规范从新开发jvm,当然你们可能不可能投入那么多人力物力,但是如果简单的移植,可能出现的结果就只是编译能够通过可以运行而已,不能投入到实际生产中。
------解决方案--------------------
其实大多数人都被sun公司的“一次编写,处处运行”的话给骗了,其实即使使用虚拟机有些方面的表现还是不一样的。毕竟要做到各种不同的操作系统表现一直需要非常了解系统底层。这也是这也年sun没在大肆强调的原因
------解决方案--------------------
jvm进程管理整个过程,所有的程序都在jvm内运行。
启动java程序必须启动jvm,所以所有流程都属于jvm。