有几点不解(我是做C#的,在C#版知道底层的人很少,所以来java版问了,可能问的有些不对)1、编译的机器码是在虚拟机上运行,还是在目标机上运行,我想应该是目标机吧,如果是在虚拟机上运行,那还要编译成不同的机器码干什么呢2、程序在运行的时候,虚拟机除了即时编译,内存管理,垃级回收等工作外,还需要和底层交互吗,也就是真正和机器交互的是虚拟机,还是线程执行的机器码
这两个问题有些雷同,大致我就是想了解“真正和目标机交互的是虚拟机,还是线程执行的机器码”,也就是虚拟机是保姆(即时编译,内存管理,垃级回收等工作),还是程序和机器交互的中介人
这两个问题有些雷同,大致我就是想了解“真正和目标机交互的是虚拟机,还是线程执行的机器码”,也就是虚拟机是保姆(即时编译,内存管理,垃级回收等工作),还是程序和机器交互的中介人
解决方案 »
- -------------------------------请教:Java缓存机制的问题
- json转换问题(使用Gson包)
- Hibernate的Id生成问题??????
- java.lang.OutOfMemoryError: PermGen space问题的解决
- 为什么会The requested resource (/TestUser/Login) is not available.
- struts2 实现输入数据的验证问题?
- mqsql4.1数据库获取/录入数据出现乱码
- (100分)郁闷至极SSH中Servlet Action is not available再次求助
- jboss下怎么发布一个application,注意:不是web application
- 用JAVA设计在线交友系统。
- javax.servlet.ServletException: ORA-01000:超出打开游标的最大数
- struts2接收表单值的问题
虚拟机负责把字节码通过JIT技术编译成机器码执行。
2 虚拟机有不同平台的实现,真正和机器交互的是虚拟机。
这有个jikes rvm(一种java虚拟机)将字节码装换成汇编语言的过程说明。
它采用的完全编译方式,所以最后字节码->汇编语言代码->机器码,执行。
sun的jdk是采用解释+编译的方式,虚拟机起到两个功能,一个是解释部分代码,一个是把关键的函数编译为机器码执行。
.net的clr应该是完全编译成机器码执行的。
C# 的可能理解起来更容易一些,有兴趣的话可以参考http://www.cnblogs.com/JeffreyZhao/上的几篇关于IL和汇编的文章,说的很透彻。