Java入门之Java概述以及JDK、JVM、JRE的关系

1 Java是什么

Java是一门面向对象的计算机编程语言。

  Java是一门强语言:①所有的变量必须先声明后使用②指定类型的变量只能接受类型与之匹配的值。作用:可以在编译时进行更加严格的语法检查,从而减少编程错误。

2 Java的优点

简单性 – 和C++相比,简单易学。
解释性
面向对象 – 设计思想
高性能
分布式处理
多线程
健壮性
动态
结构中立
安全性
开源
跨平台

2.1 什么是跨平台性?

通过Java语言编写的应用程序在不同的系统平台上都可以运行。

  只要在需要运行java应用程序的操作系统上,先安装一个Java虚拟机(JVM Java Virtual Machine)即可。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
在这里插入图片描述
  因为有了JVM,所以同一个Java程序在三个不同的操作系统中都可以执行。这样就实现了Java程序的跨平台性。也称为Java具有良好的可移植性。具体原因下面介绍

3 JVM与JRE与JDK

JRE(Java Runtime Environment Java运行环境)
   包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库 (例如rt.jar)等,其实如果想要运行一个开发好的Java程序(.class文件),计算机中只需要安装JRE即可。rt.jar可以简单粗暴地理解为:它就是java源码编译成的jar包。
JDK(Java Development Kit Java开发工具包)
   JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE,一堆Java工具,比如:编译工具(javac.exe) 打包工具(jar.exe) javadoc.exe等。所以安装了JDK,就不用在单独安装JRE了。
   简单而言:使用JDK开发完成的java程序,交给JRE去运行。
JVM(Java Virtual Machine Java虚拟机)
  它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行, JAVA虚拟机内部包含许多应用程序的类的解释器和类加载器等等。
  也就是说class文件并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。将class文件中的字节码指令进行识别并调用操作系统对应的API完成相应的动作。
  只有JVM还不能成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库,而jre包含这些类库。
  JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

3.1 JDK、JRE、JVM的关系?

  简而言之 —包含关系:JDk包含JRE包含JVM。

3.2 什么是字节码?采用字节码的好处是什么?

  在 Java 中,JVM可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不针对一种特定的机器,因此,Java程序无须重新编译便可在多种不同操作系统的计算机上运行。
  Java 程序从源代码到运行一般有下面3步:
在这里插入图片描述
  我们需要格外注意的是 .class->机器码 这一步。在这一步 JVM 类加载器首先加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度会相对比较慢。而且,有些方法和代码块是经常需要被调用的(也就是所谓的热点代码),所以后面引进了 JIT 编译器,而JIT 属于运行时编译。当 JIT 编译器完成第一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。而我们知道,机器码的运行效率肯定是高于 Java 解释器的。这也解释了我们为什么经常会说 Java 是编译与解释共存的语言。
  HotSpot采用了惰性评估(Lazy Evaluation)的做法,根据二八定律,消耗大部分系统资源的只有那一小部分的代码(热点代码),而这也就是JIT所需要编译的部分。JVM会根据代码每次被执行的情况收集信息并相应地做出一些优化,因此执行的次数越多,它的速度就越快。JDK 9引入了一种新的编译模式AOT(Ahead of Time Compilation),它是直接将字节码编译成机器码,这样就避免了JIT预热等各方面的开销。JDK支持分层编译和AOT协作使用。但是 ,AOT 编译器的编译质量是肯定比不上 JIT 编译器的。

3.3 JVM还支持哪些语言?

  到目前为止,或许大部分程序员都还认为Java虚拟机执行Java程序是一件理所当然和天经地义的事情。但是在java发展之初,设计者就曾经考虑过并实现了让其它语言运行在Java虚拟机之上的可能性。并且在1997年发布的第一版Java虚拟机规范中就i曾经承诺过:在未来,我们会对Java虚拟机进行适当的扩展,以便更好的支持其他语言运行于JVM之),JDK1.7开始就是兑现了这个承诺。
  时至今日,商业机构和开源机构已经在Java语言之外发展出一大堆在Java虚拟机之上运行的语言,如Clojure、Groovy、JRuby、Jython、Scala等。
  实现了语言无关性的基础仍然是虚拟机和字节码存储格式

3.4 Oracle JDK和Open JDK的区别?

  Open JDK是Oracle JDK的精简版本:虽然说OpenJDK与Oracle JDK绝大部分相同,但是还是得小心这种情况:本地代码测试OK,上了sit环境发现各种莫名其妙的问题,这时候需要看下部署sit环境的JDK是不是和本地一致了。其次OpenJDK是不包含部署功能的,比如:Browser Plugin、Java Web Start、以及Java控制面板。
  授权协议不同:OpenJDK采用GPL V2协议, SUN JDK则采用JRL。说白了,使用OpenJDK就不要想使用JAVA商标了。
  版本对比:OpenJDK的特点是更新频繁,实现快速迭代和高效试错,为Oracle JDK LTS版本打下基础。Oracle JDK的特点是单版本长期支持,提供稳定可用的商业版本,商用收费,学习研究免费。
  如果你在未来想要深入理解Java底层设计,那么Open JDK将是你必过的一个坑,但是有些人进去了就再也没出来了。

发布了58 篇原创文章 · 获赞 105 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43767015/article/details/105091641