`
caiyi
  • 浏览: 17304 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

对JAVA虚拟机的一点理解

阅读更多

为什么JAVA跨平台 

对于C/C++程序来说,编译后生成与特定操作系统平台相关字节码文件,由于与特定平台相关,所以不能在另一个操作系统平台运行,而对于JAVA程序来说,编译后生成是与JAVA虚拟机这个平台相关的class文件,与操作系统无关,由于生成后的字节码文件只与JAVA虚拟机相关与操作系统无关,所以在安装了JAVA虚拟机的操作系统上都能运行。 


JAVA跨平台不是绝对的 

先说下JAVA程序的运行原理,JAVA程序被编译成class文件后就可以被JAVA虚拟执行,JAVA虚拟对class文件进行解释后再调用本地方法,本地方法是与操作系统相关的,由于不同操作系统平台安装有不同类型的JAVA虚拟机,如windows系统安装window版的JAVA虚拟机,linux系统安装linux版的JAVA虚拟机,所以当JAVA程序在windows系统下运行时调用的是windows平台的本地方法,在linux下运行时调用的是linux平台对应的本地方法。至于调用怎样的本地方法根本不用我们操心,这是JAVA虚拟机干的事,理它是在windows平台还是在linux平台,我把只要把JAVA程序写好就行了,剩下的工作JAVA虚拟机会帮我们搞定。 

但是当JAVA程序直接调用本地方法,JAVA程序就与操作系统相关了,这样的JAVA程序是不能做到一次编写,到处运行的。也就是说你所编写的程序不只调用了JAVA API,而且还调用了操作系统的本地方法。如果你在自己的JAVA程序里面直接调用了windows API,那么这样的程序就不能在linux下运行了。关于JAVA程序如何调用windows API搜索下就能找到答案,这里就不多说了。 


以上只是个人对JAVA虚拟机的一点理解,关于JAVA虚拟还有很多东西,如类装载器、安全性、垃圾回收等....... 

分享到:
评论
2 楼 aiyust070 2011-05-13  
调用 c/c++写的,可以用Jco
如果你一定要在linux下调用windows下的api,那你编写的时候,就应该知道,linux下没有windows api,相反也一样
问题总有解决的方法,就是看你怎么解决
1 楼 gayid 2011-05-12  
好,不错,让我这个初学者对JAVA虚拟机有了比较深一层的理解

相关推荐

    java虚拟机的理解

    然后javac(不用ide,这样会更好一点)。Javac是编译。变成中间代码,class文件。  涉及 编译原理里面的解释和编译。  2.1. 编译和解释:  2.1.1.编译型语言在编译过程中生成目标平台的指令,解释型语言在运行...

    Java虚拟机体系结构深入研究总结

    不了解虚拟机的内部原理(或者叫规范更严谨一点)是肯定不行的,这里推荐一本好书《深入Java虚拟机 (第二版)》(Bill Venners著,曹晓刚 蒋靖 译,实际上本文正是作者阅读本书之后,对Java虚拟机的个人理解阐述)。...

    JAVA虚拟机,看这篇就够了!

    作为一名优秀的 Java 开发程序员,以及想那些想要学习 Java 更深层一点的知识的同学,对 JVM 的熟悉与熟练使用是必不可缺的核心技能了,也是每个 Java 程序员应该要做到的。 深入学习 JVM 可以有助于我们掌握 Java ...

    Java超全的基础面试题

    java利用Java虚拟机运行字节码,无论是在Windows、Linux还是MacOS等其它平台对Java程序进行编译,编译后的程序可在其它平台运行。 3. Java为解释型语言,编译器把Java代码编译成平台无关的中间代码,然后在JVM上解释...

    Java中JDK,JRE和JVM之间的关系

    首先从概念上理解一下吧,JDK(Java Development Kit)简单理解是Java开发工具包,JRE(Java Runtime Enviroment)是Java的运行环境,JVM( java virtual machine)也是常常听到Java虚拟机。JDK是面向开发者的,JRE是...

    基于JAVA超级玛丽游戏GUL 设计软件源码+WORD毕业论文文档.zip

    Java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java接口。使用Java编写的程序能在世界范围内共享。Java的数据类型与机器无关。 2. 安全性 Java的编程类似C++,但舍弃了C++的指针对存储器地址的直接操作,...

    Java编程经验

    相信大家都知道jdk的bin下有各种java程序需要用到的命令,与jre的bin目录最明显的区别就是jdk下才有javac,这一点很好理解,因为 jre只是一个运行环境而已。与开发无关,正因为如此,具备开发功能的jdk自己的jre下才...

    Java线程中yield与join方法的区别

    长期以来,多线程问题颇为受到面试官的...  在各种各样的线程中,Java虚拟机必须实现一个有优先权的、基于优先级的调度程序。这意味着Java程序中的每一个线程被分配到一定的优先权,使用定义好的范围内的一个正整数表

    java8源码-JavaEE-tutorial:自制《Java后端打怪升级》学习笔记系列,待更。-Javaback-enddevelopmen

    笔记大都基于视频教程的学习记录,有的地方是对视频里老师原话的复述,有的地方加上了自己的一点理解,有的内容来源于对网上博文干货的整理。若存在错误,还请各位大侠指出哈。 另外,目前只学了 Java 基础、JavaWeb...

    python笔记(1) 关于我们应不应该继续学习python

    然而,我大学毕业的时候,连linux的虚拟机都没装过,更别提系统熟不熟悉了。虽然我了解一点这个系统可以完全通过命令来操作。后来工作了,有时候写点代码,svn提交上去,服务器是Linux的,自己也是在windows上跑跑...

    Tcl_TK编程权威指南pdf

    此外,在Xerox PARC工作,那里有许多语言和系统上的专家,我不得不强迫自己去理解Tcl/Tk的长处和弱点。我的许多同事都在他们的项目中采用了Tcl和Tk,但是他们也很快指出了它的缺点。因此,我就总结了一套编程技巧以...

    c#学习笔记.txt

    看完了前面几段,我的朋友提出了不同的意见:C#不是Java的Clone,它只是长得有些像Java而已,其实面向对象、中间语言什么的也不是什么新玩意儿,非Sun独创,有文为证:华山论剑:C#对Java。另外他对我上一集中说...

Global site tag (gtag.js) - Google Analytics