jvm为什么是一个“虚拟的计算机”

对jvm常这样描述:“ jvm是jre的一部分,它是一个虚拟出来的计算机 ”;对此,我一直不明白jvm怎么跟虚拟计算机扯到一块了?

    是jvm的用途让它必须玩那么大整个虚拟计算机吗?但jvm的作用是翻译和运行,翻译.class为二进制,运行这些二进制;翻译不应该整这么大,那就是运行了?但你直接在真实的实体计算机上运行不就得了,干嘛整个虚拟的?C语言就是拿二进制直接在真实计算机上运行的呀!

    刚开始我还想是不是你整成机器码后,肯定得验证下对不对,类似项目开发上线你得有个预生产环境验证通过了,才能部署到生产环境,难道这个虚拟计算机就是上线前的预生产环境?不过怎么感觉不对呢?

    后来查资料说设计虚拟计算的初衷是为了“一次编译,到处运行,实现跨平台”的目的,那么设计成虚拟计算机怎么就可以“跨平台”了?

    那么换个角度思考,为了可以跨平台,我们该怎么办?比如window的机器码要部署到Linux上,那么得有一个翻译器,把window的机器码翻译成适宜Linux系统的,此时jvm就是这个翻译器角色,window上的jvm就是模拟的Linux计算机;

    由此可见,jvm是跨平台跨的都是各种计算机内存和物理硬件等的差别,不同系统间的内存模型是不一样的,那么jvm肯定也得是系统类的大件了,那么说jvm是虚拟计算机也不算过分;

    由于jvm一次编译,到处运行,那么如何解决这个“到处”问题,也就是说window7上的jvm既得是Linux系统计算机,又得是Unix系统计算机,还得是window10系统计算机,也得是其他系统计算机,jvm一人如何能同时承担这么多种系统计算机的角色?

    我觉的是适配器的角色,java程序不是可以通过配置来适配各种数据库吗,用哪个适配哪个,jvm感觉也是一个可以适配各种系统的角色,也就是说jvm是一个虚拟计算机,它可以适配模拟其他各种系统的计算机,从而实现跨平台;

    C语言没法跨平台,因为它的二进制码直接面向实体真实的计算机,而java能跨平台,是因为它的jvm能模拟其他计算机,所以说jvm是一台虚拟的计算机,它模拟的是啥系统,得看实际应用;

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    一般项目的开发部署,大家用的都是window开发系统,开发好了把.class文件上传到Linux服务器上就行了,这个过程的jvm跨平台怎么理解呢?

    window的.class文件上传到Linux后,Linux上的jvm会适配模拟Linux计算机环境,然后把window的.class适配成Linux的.class文件然后运行?感觉这理不好逻辑,先不理了!

    

猜你喜欢

转载自blog.csdn.net/jim_007/article/details/81081619
今日推荐