java虚拟机移植问题

metuu 2011-02-21 09:13:12
最近弄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 移植时 ,可不可以脱离操作系统直接运行啊? 谢谢
...全文
184 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangyingji2 2011-10-23
  • 打赏
  • 举报
回复
找一个vc下编写多线程程序,需要保护什么库,包含上就可以了。
metuu 2011-03-08
  • 打赏
  • 举报
回复
请问cldc 用cygwin 编译时出现如下错误,是什么问题???

Linking ... kvm.exe

runtime2_md.o error LNK2001: unresolved external symbol __beginthread
kvm.exe: fatal error LNK1120: 1 unresolved externals
metuu 2011-03-01
  • 打赏
  • 举报
回复
目前,用的kvm源码在vc++中已经编译通过,现在正向设备中移植,但一直没有看到梦想的 "Hello world".
metuu 2011-03-01
  • 打赏
  • 举报
回复
有没有成功移植过java虚拟机的同仁,讲一下移植过程,和移植注意点。 谢谢。
metuu 2011-02-24
  • 打赏
  • 举报
回复
看java虚拟机书有流程:
java程序 --->java API --> 本地方法(动态库) -->主机操作系统


请问: 本机方法库在 jvm 什么位置? 如何移植? 谢谢
树成 2011-02-24
  • 打赏
  • 举报
回复
jvm进程管理整个过程,所有的程序都在jvm内运行。
启动java程序必须启动jvm,所以所有流程都属于jvm。
树成 2011-02-22
  • 打赏
  • 举报
回复
老实说,我没有对虚拟机的源码研究过,不过单纯的移植肯定不行,因为操作系统不同并不仅仅是api上的不同,可能操作系统的运行机制与算法机制都不同,包括数据结构和IO调用方式都会有差异,甚至是文件系统类型与系统路径。

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

所以我觉得如果可能,依照规范从新开发jvm,当然你们可能不可能投入那么多人力物力,但是如果简单的移植,可能出现的结果就只是编译能够通过可以运行而已,不能投入到实际生产中。
metuu 2011-02-22
  • 打赏
  • 举报
回复
进一步了解和windows api 还有: AlterUser(), allocateHeap(), freeHeap(), InitilizeNativeHeap(), FinalizeHeap(), CurrentTime_md(), uLong64, long64, Big_ENDIAN or LITTLE_ENDIAN
metuu 2011-02-22
  • 打赏
  • 举报
回复
spiniper :
能不能详细说几个 JVM 调用的 API,我的理解是, jvm在初始化中 调用InitializeNativeCode()函数需要创建线程,这个和操作系统有关,还有后面的就是和文件相关的了。还有,jvm 运行时启动几个线程?

我对jvm 运行流程理解:在jvm 初始完, 通过loadMainClass(argv[0]);加载,验证 类文件,之后调用Interpret()开始解析输出类文件的结果了。
树成 2011-02-22
  • 打赏
  • 举报
回复
纯粹的jvm移植还是比较困难的,jvm应该是比较依赖操作系统api的
metuu 2011-02-22
  • 打赏
  • 举报
回复
1. 函数 void InitalizeAsynchronousIO(void) , 在startJVM.c 文件中,int KVM_Start(int argc, char* argv[]),函数中。

2. Windows 版本的 JVM 底层大量地调用了 Win32 API, 请问都调用哪些API,在哪部分调用的?我看JVM代码,看和windows系统相关的就是 线程 和 文件 是和windows打交道的。移植时文件可以用数据替换,线程能不能把多线程的去掉,这样,JVM是不是就和系统没有关系了。
谢谢
YOULOVEXIA 2011-02-22
  • 打赏
  • 举报
回复
JVM 移植时 ,可以脱离操作系统直接运行
ddyouyue 2011-02-22
  • 打赏
  • 举报
回复
其实大多数人都被sun公司的“一次编写,处处运行”的话给骗了,其实即使使用虚拟机有些方面的表现还是不一样的。毕竟要做到各种不同的操作系统表现一直需要非常了解系统底层。这也是这也年sun没在大肆强调的原因
  • 打赏
  • 举报
回复
第一个中的 JVM 代码是哪个文件中的?至少说一下文件名吧?否则这一段莫名其妙的代码天知道是干嘛的。

JVM 运行依赖于操作系统的,像 Windows 版本的 JVM 底层大量地调用了 Win32 API

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧