JVM存在的目的和意义是什么?

一句话,实现跨平台。

代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,确是编程语言发展的一大步。

记得在第一节计算机程序设计课上我的老师讲过:计算机只认识0和1,所以我们写的程序需要经过编译器编译成由0和1构成的二进制格式才能有计算机执行。多年过去了,今天的计算机仍然只能识别0和1,但由于虚拟机和大量建立在虚拟机上的程序语言如雨后春笋出现并蓬勃发展,将我们编写的程序编译成二进制本地机器码已不再是唯一的选择,越来越多的程序语言选择了与操作系统和机器指令集无关的、平台中立的格式作为程序编译后的存储格式。

#无关性的基石

因为操作系统的多样:linux、mac、windows、unix等等,他们在实现上都有多少的差异,在java之前,程序移植到不同平台总会有很多问题,甚至我们要为多个平台编写不同的实现。与平台无关的理想最终实现在操作系统的应用层上:sun公司以及其他虚拟机提供商发布了许多可以运行在各种平台上的虚拟机,这些虚拟机都可以载入和执行一种平台无关性的字节码,从而实现了程序的”一次编写,到处运行“。

各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码是构成平台无关性的基石。

jvm在设计之初就明确了不仅仅为java服务的可能性,时至今日,商业机构和开源机构已经在java语言之外发展出一批在java虚拟机之上运行的语言,如Clojure\Groovy\JRuby\Jython\Scala等。这里面scala在大数据领域运行较为广泛,spark的实现语言就是scala。

实现语言无关性的基础仍然是虚拟机和字节码存储格式。jvm不和包括java在内的任何语言绑定,它只在class文件这种特定的二进制文件格式所关联,class文件中包含了java虚拟机指令集和符号表以及若干辅助信息,任何一门功能性语言都可以表示为一个能被java虚拟机所接受的有效的class文件。如下图所示;

细说JVM系列:JVM存在的目的和意义是什么?相关推荐

  1. JVM系列:jvm基本结构

    http://mp.weixin.qq.com/s/ReM763jIyPs2P0RuhWNeNQ 知识点1:什么是Java虚拟机(你以为你知道,如果你看我下面的例子,你会发现你其实不知道) 第一步:先 ...

  2. Jvm 系列(八):Jvm 知识点总览

    对于Java程序员来讲,spring全家桶几乎可以搞定一切,spring全家桶便是精妙的招式,jvm就是内功心法很重要的一块,线上出现性能问题,jvm调优更是不可回避的问题.因此JVM基础知识对于高级 ...

  3. Jvm 系列(六):Java 服务 GC 参数调优案例

    本文介绍了一次生产环境的JVM GC相关参数的调优过程,通过参数的调整避免了GC卡顿对JAVA服务成功率的影响. 这段时间在整理jvm系列的文章,无意中发现本文,作者思路清晰通过步步分析最终解决问题. ...

  4. jvm系列(六):Java服务GC参数调优案例

    本文介绍了一次生产环境的JVM GC相关参数的调优过程,通过参数的调整避免了GC卡顿对JAVA服务成功率的影响. 这段时间在整理jvm系列的文章,无意中发现本文,作者思路清晰通过步步分析最终解决问题. ...

  5. jvm系列(八):jvm知识点总览-高级Java工程师面试必备

    在江湖中要练就绝世武功必须内外兼备,精妙的招式和深厚的内功,武功的基础是内功.对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内功直接去伤人,只能靠招式,利刃上优势来取胜了,但是练到高手之后 ...

  6. jvm系列(八):jvm知识点总览

    在江湖中要练就绝世武功必须内外兼备,精妙的招式和深厚的内功,武功的基础是内功.对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内功直接去伤人,只能靠招式,利刃上优势来取胜了,但是练到高手之后 ...

  7. 深入JVM系列(三)之类加载、类加载器、双亲委派机制与常见问题

    转载自 深入JVM系列(三)之类加载.类加载器.双亲委派机制与常见问题 一.概述 定义:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用 ...

  8. jvm系列(九):如何优化Java GC

    转载自 jvm系列(九):如何优化Java GC「译」 本文翻译自Sangmin Lee发表在Cubrid上的"Become a Java GC Expert"系列文章的第三篇&l ...

  9. jvm系列 (四) ---强、软、弱、虚引用

    java引用 目录 jvm系列(一):jvm内存区域与溢出 jvm系列(二):垃圾收集器与内存分配策略 jvm系列(三):锁的优化 我的博客目录 为什么将引用分为不同的强度 因为我们需要实现这样一种情 ...

最新文章

  1. Serializable And Parcelable
  2. Adobe Flash Player 10新特性详解:支持GPU加速
  3. inline函数包涵static变量,调用时是否会有多份拷贝
  4. Spring Cloud Eureka 自我保护机制
  5. Sklearn,TensorFlow,keras模型保存与读取
  6. 有关Spring注解@xxx的零碎知识
  7. C语言中指针定义的时候初始化的必要性
  8. 震惊!程序员要放弃 Python 了!?发生了啥?
  9. Python中的for循环,while循环
  10. 殷人昆数据结构第二版_从入门到拿offer,必须看的数据结构与算法书籍推荐,不好不推荐...
  11. 2019 年度全球程序员薪酬报告:40岁以后普遍遭遇收入天花板
  12. Win7系统能用一键装机的方式安装win10吗?
  13. PMP_模考三 (3A通过分享)(180题附答案及解析)
  14. STM32智能小车------红外遥控
  15. spring jpa Specification in 查询
  16. linux dns劫持转发,linux的dns被劫持
  17. 安装MySQL---已删除服务,却显示服务已存在
  18. 概率栅格地图中Uint8_t向int8_t转换
  19. 免费的云服务器,大家推荐哪个呢?
  20. gradle Illegal entry in Gradle Dependencies d:/eclipse

热门文章

  1. Linux 之父:林纳斯·托瓦兹(Linus Torvalds)
  2. 求一圈中留下的最后一个人
  3. 泛函分析简列:度量空间之列紧集
  4. R:parse函数和eval函数解析字符串为命令并运行
  5. vue 动态设置 echarts 画布大小 更新图表数据
  6. 用计算机算出神奇的数,神奇的数字:12345679!先随便乘一个数字,最后乘9,奇迹出现了...
  7. SK6# 上海居转户随记
  8. 北京邮电大学21年计算机考研情况 数一英一408,分数并不低,竞争激烈
  9. python将所有excel文档合并
  10. 软件服务与汽车修理技术