来张图:这个帖子写给新人的,老玩家就直接无视他,因为这个完完全全是白话基础原理。

解释:上面的图是从上往下依次调用的关系。

操作系统(Windows/Linux)管理硬件,让硬件能够正常、合理的运行,当然各种硬件的驱动实现了操作系统的接口,操作系统调用这些接口就能管理硬件,操作系统还像程序员提供了一层接口,叫做系统呼叫层,程序员可以面向这一层的接口编程,来实现对计算机的控制,而不同的操作系统(或者说不同的CPU架构)所提供的接口都是不一样的,Windows和Linux提供给的那肯定是完全不一样的,虽然站在最终的角度来看都能实现某一功能。所以同样一个程序是不能在不同的系统上运行的,甚至可能在同一个系统的不同版本都不一定能完美运行,这就是所谓的平台相关的程序,比如C/C++程序,然而计算机和互联网的飞速发展,计算机种类和型号千千万,操作系统也有很多种类,Window、Linux、iOS等,同样一款软件不能不做改变就在不同的操作系统上面运行,这对开发者来说不是很友好。Java语言就能解决这个平台(说成是Java平台更准确,JVM+JavaAPI),鉴于不同的操作系统所需要的程序是不一样的,那么就可以寻找一个方法来解决这个问题,于是JVM就诞生了,又JVM来向下关联所有操作系统,他能操作所有操作系统,向上提供统一接口,也就是JavaAPI,开发者只需要面向JVM(JavaAPI)编程,至于JVM是如何各种不同的操作系统打交道开发者完全不用管,管他是怎么沟通交流的,于是只要面向JVM+JavaAPI编程,一个程序可以在任意操作系统平台上面运行,这就是所谓的跨平台,Java代码和平台是无关的,没有任何关系。---而这,就是Java的跨平台性质。

其实这个理念跟Linux的shell是一样的,Linux操作系统管理硬件,Linux向上提供统一接口,而Shell(就等于是上面的JVM)作为命令输入这和操作系统接口的中间人,中间人会将输入的命令解释给操作系统接口来管理和调用各种硬件,只不过shell没有JVM做得那么彻底,这也就是为什么对于那么多不同的shell来说,输入的命令都基本上是一样的的道理。

举个例子:我们国家有很多方言,比如广东人至听得懂广东话,四川人只听得懂四川话,天津人只听得懂天津话,这些方言就是所谓的地域相关的语言,对应计算机软件来说就是平台相关性,如果我一个北京人要跟广东、四川和天津人说话,我必须要会说这三种方言,这对于我的语言能力来说很痛苦,要学会这三种话。但是我们知道湖南卫视汪涵很牛逼,会说各种方言,我把他请来当翻译,汪涵就是JVM,他能说这三种方言,并且他只听懂得普通话,但是会说各种方言,这好像有点奇怪,所有想要跟广东、四川和天津打交道的人都跟汪涵说普通话,让他来帮忙翻译,我们说一句他翻译语句,这样的最终目的我们只需要学会普通话就可以跟任何人交流了。这就是Java平台。正是因为多了中间翻译人这么一个过程,所以很明显我说普通话跟广东人交流显得很慢,需要等汪涵来翻译,肯定是没有我直接说广东话来的直接。这也就是为什么Java比C/C++慢的原因,虚拟机需要解释执行。虽然速度慢,但是换来的是我们只需要说普通话就能跟所有人交流,这样的代价是值得的,而且虚拟机性能和各种Java技术的发展,这个解释执行的过程越来越快,以后说不定就追上C/C++了,也就是汪涵的语速会变得和好声音华少的语速,甚至再快,到了周杰伦唱歌速度那么快,我们和不同地区的人交流就更快了。当然现在的JVM不仅仅是逐行解释执行,还有部分JIT技术和其他很多各方面的提升。

java能不能不用jvm_Java、JVM和操作系统之间的关系,写给新人,相关推荐

  1. java和jvm_Java、JVM和操作系统之间的关系,写给新人,

    来张图:这个帖子写给新人的,老玩家就直接无视他,因为这个完完全全是白话基础原理. 解释:上面的图是从上往下依次调用的关系. 操作系统(Windows/Linux)管理硬件,让硬件能够正常.合理的运行, ...

  2. JVM与计算机之间的关系

    计算机内存硬件架构 CPU,一台现代计算机拥有两个或多个CPU,其中一些CPU还有多核,从这一点可以看出,在一个有两个或多个CPU的现代计算机上,同时运行多个线程是非常有可能的,而且每个CPU在某一个 ...

  3. 通过张三与如花悲惨爱情故事,理解“用户“、“shell“、“操作系统“之间的关系

    通过张三与如花悲惨爱情故事,理解"用户"."shell"."操作系统"之间的关系 目录 shell命令以及运行原理 张三与如花的恩爱情仇 人 ...

  4. Java设计模式、框架、架构、平台之间的关系

     1.设计模式 为什么要先说设计模式?因为设计模式在这些概念中是最基本的,而且也比较简单.那么什么是设计模式呢?说的直白点,设计模式就是告诉你针对特定问题如何组织类.对象和接口之间的关系,是前人总结的 ...

  5. JAVA类加载器包括几种?它们之间的关系是怎么样的?双亲委派机制是什么意思?有什么好处?

    JAVA类加载器包括几种? 引导类加载器 bootstrap class loader 启动类加载器主要加载的是JVM自身需要的类,这个类加载使用C++语言实现的,是虚拟机自身的一部分,它负责将 /l ...

  6. java repaint闪烁_java中paint,repaint,update之间的关系(闪烁问题的解决)

    最近总结了一下java中的paint,repaint和updata三者之间的关系,首先咱们都知道用paint方法来绘图,用repaint重绘,用update来写双缓冲.但是他们之间是怎么来调用的呢,咱 ...

  7. Linux,Unix和Linux操作系统之间的关系

    Ubuntu和Linux的区别 大家经常会说Linux操作系统,Ubuntu操作系统,这种叫法是不正确的,严格意义上讲,Linux并不是操作系统,而是属于操作系统的一个内核. 由于Linux是开源的, ...

  8. Java中for循环continue,break,return三者之间的关系

    理论介绍 1.continue 跳出本次循环,进行下一个循环 2.break 跳出for循环结束: 3.return 直接结束循环 实例 实例1: for(int i =0;i<5;i++){S ...

  9. Java 字节流、字符流和转换流之间的关系

    1. 字节流.字符流和转换流之间的关系 (1)字节流:读取字节到内存或将字节写入硬盘文件中. (2)字符流:将字节转换为字符(读入)或将字符转换为字节(写出). (3)转换流:将字节按照指定的编码格式 ...

最新文章

  1. dll的概念、dll导出类(转)
  2. nginx的反向代理及负载均衡
  3. anaconda python降级_anaconda 使用的一些体验与困惑
  4. Java集合框架:总结
  5. java取邮箱前缀_java抓取网页或文件中的邮箱号码
  6. 未来机器人哆拉A梦身上的高科技程序应用
  7. 监控组策略应用----组策略结果
  8. mysql desc show_mysql 查看信息的命令(show\desc\explain)
  9. DeepLearning - Forard Backward Propogation
  10. Xcode 输入时 搜索代码块前面标记的字母含义
  11. Hexo博客中添加Live 2D模型
  12. html中页面整体排版,html在不同尺寸浏览器窗口中页面排版混乱
  13. html周志模板,毕业设计指导周志模板
  14. IOS从零开始之_objective-c初探上
  15. 火灾自动报警系统 300W广播功率放大器
  16. PS运动模糊+径向模糊+高斯模糊
  17. 灵狐系统不能找到数据库服务器,企业数据总线技术架构说明.docx
  18. 数论概论 第五章 习题解答(上)(宋二娃的BLOG)
  19. 激光电视开启未来,2021年是“大众化”的开始
  20. 用css3画一个哆啦A梦

热门文章

  1. 设计模式(6)——抽象工厂模式(Abstract Factory Pattern,创建型)
  2. java中this关键字的基本使用
  3. linux shell中的流编辑器sed的使用
  4. Python之面向对象和正则表达(代数运算和自动更正)
  5. 《Linux 性能及调优指南》1.4 硬盘I/O子系统
  6. 配置SQL Server 2008 R2 Reporting Services
  7. 解决UnicodeEncodeError。python的docker镜像增加locale 中文支持
  8. [Bzoj4817] [Sdoi2017]树点涂色 (LCT神题)
  9. 【软件工程实践 · 团队项目】 第一次作业
  10. 嵌入式软件设计第10次实验报告