Java面试30天计划Day01(JRE/JDK/JVM三者关系...)

简介: Java语言的特点?JVM与JRE和JDK三者之间何关系?字节码是什么?Java是编译型还是解释型语言?为什么说是半编译/编译与解释共存? Java和C++有什么不同?Oracle JDK 与 Open JDK相比有什么不同?

这是一个Java面试的集合文档,将会周期性的进行更新,您完全将其看成一个番剧,追番的感觉可能会让您更有学习的兴趣。

Java语言的特点?

    1. 面向对象(封装、继承、多态)
    2. 具有平台无关性(一次编写,到处运行)
    3. 可靠性和安全性
    4. 稳健性

    JVM与JRE和JDK三者之间何关系?

    JVM是Java可以跨平台运行的核心,JVM(Java Virtual Machine)即Java虚拟机,它是一个虚构出来的计算机,一种规范。通过在实际的计算机上仿真模拟各类计算机功能实现···,它直接和操作系统进行交互,与硬件不直接交互,而操作系统可以帮我们完成和硬件进行交互的工作。

    image.gif编辑

    需要注意的是JVM并不是只有一种,前提条件是需要符合JVM规范

    JRE(Java Runtime Environment)是运行Java字节码(即 .class 的文件)的虚拟机,是Java的运行不可缺少的环境,它包含了JVM、核心类库、开发工具等,它只可以编译程序,不可以创建程序。

    JDK(Java Development Kit)即Java SDK,它是Java开发的工具包,包含了Java虚拟机(Java程序所运行的地方)和核心类库(已经写好的东西,直接拿来用)与开发工具(Javac、Java、jdb、jhat...)它是可以创建与编译程序的。

    三者的关系如图所示:

    image.gif编辑

    你可以这样理解(JDK包含JRE,JRE包含JVM

    字节码是什么?

    Java 字节码是 Java 程序编译的结果,是该程序的中间表示,与机器无关。即是Java可以理解的代码即是字节码(.class文件

    Java 字节码由 Java 虚拟机 (JVM) 处理,而不是处理器处理。JVM 的工作是对处理器进行必要的资源调用以运行字节码。

    Java源程序(.java)要先编译成与平台无关的字节码文件(.class),然后字节码文件再解释成机器码运行。解释是通过Java虚拟机来执行的。它本身是二进制文件,但是不可以被系统直接执行,而是需要虚拟机解释执行,由于被预处理过,所以比一般的解释代码要快,但是仍然会比系统直接执行的慢。

    image.gif编辑

    即:源码通过javac编译为字节码,通过编译器JVM解释为机器码执行。 所以,可以理解为是半编译型语言,这在下一个问题会问到。

    Java是编译型还是解释型语言?为什么说是半编译/编译与解释共存?

    首先我们需要知道什么是编译型,什么是解释型语言?

    编译型 如C、C++、Go、Rust,是将代码一次编译成为机器码执行,但因各平台的CPU指令集不同,因此需要编译出每种平台对应的机器码,执行速度快,但开发效率低
    解释型 如Python、Ruby、JavaScript,是由解释器直接加载源码直接运行,每次运行都要解释一次,执行速度慢,但开发效率高。

    可根据此图加深理解:

    image.gif编辑

    Java和C++有什么不同?

    首先我们需要知道它们的共同点:都是面向对象,且都支持封装、继承、多态

    不同点:

      1. C++兼容C,这也说明了C++不止支持面向对象还支持面向过程。而Java只支持面向对象。
      2. C++不支持自动垃圾回收需要手动回收,Java支持自动垃圾回收。
      3. C++支持多重继承,Java的类不支持多重继承,是单继承的,故只能通过实现多个接口来达到多重继承的目的。
      4. C++拥有C一样的指针,Java没有指针,可以将它的引用理解为安全指针。
      5. C++需要依赖特定的平台,Java则因为有虚拟机而不需要依赖,具有跨平台的特性。
      6. .......

      Oracle JDK 与 Open JDK相比有什么不同?

        1. Oracle JDK根据Oracle二进制代码许可协议获得许可,而OpenJDK具有GNU通用公共许可证(GNU GPL)版本2。
        2. OpenJDK 是一个参考模型且是完全开源的,Oracle JDK 是 OpenJDK 的一个实现,并不是完全开源的。
        3. Oracle JDK具有Flight Recorder功能,Open JDK具有Font Renderer功能。
        4. 在响应性和JVM性能方面,Oracle JDK与OpenJDK相比提供了更好的性能。
        5. Oracle JDK版本将每三年发布一次,Oracle为其版本提供长期支持。而OpenJDK版本每三个月发布一次,且仅支持对发布的更改,直到下一个版本发布。故Oracle JDK比Open JDK更稳定。
        6. Oracle JDK具有良好的GC选项和更好的渲染器,而OpenJDK具有更少的GC选项,并且由于其包含自己的渲染器的分布,因此具有较慢的图形渲染器选项。


        如果您认真阅读至此,您现在已经掌握了Java的面试篇追番版Day01,且随着您认真练习使用次数的增加,您对Java的掌握我相信不止于此,如果您对此语言或其他有进阶的要求,请移步至我的博客进行其余的修炼计划。

        感谢您认真观看完毕此文章,如果此文章对您有帮助的话,还请您点赞收藏评论这真的对我有很大的帮助。

        相关文章
        |
        4天前
        |
        存储 缓存 Oracle
        Java I/O流面试之道
        NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
        Java I/O流面试之道
        |
        1天前
        |
        存储 Java 程序员
        Java基础的灵魂——Object类方法详解(社招面试不踩坑)
        本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
        19 4
        |
        22天前
        |
        存储 监控 算法
        美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程 ?
        尼恩提示: G1垃圾回收 原理非常重要, 是面试的重点, 大家一定要好好掌握
        美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程  ?
        |
        14天前
        |
        存储 Java 程序员
        Java面试加分点!一文读懂HashMap底层实现与扩容机制
        本文详细解析了Java中经典的HashMap数据结构,包括其底层实现、扩容机制、put和查找过程、哈希函数以及JDK 1.7与1.8的差异。通过数组、链表和红黑树的组合,HashMap实现了高效的键值对存储与检索。文章还介绍了HashMap在不同版本中的优化,帮助读者更好地理解和应用这一重要工具。
        33 5
        |
        13天前
        |
        存储 Java
        [Java]面试官:你对异常处理了解多少,例如,finally中可以有return吗?
        本文介绍了Java中`try...catch...finally`语句的使用细节及返回值问题,并探讨了JDK1.7引入的`try...with...resources`新特性,强调了异常处理机制及资源自动关闭的优势。
        15 1
        |
        22天前
        |
        Java 程序员
        Java 面试高频考点:static 和 final 深度剖析
        本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
        22 3
        |
        11天前
        |
        算法 Java
        JAVA 二叉树面试题
        JAVA 二叉树面试题
        12 0
        |
        22天前
        |
        存储 Kubernetes 架构师
        阿里面试:JVM 锁内存 是怎么变化的? JVM 锁的膨胀过程 ?
        尼恩,一位经验丰富的40岁老架构师,通过其读者交流群分享了一系列关于JVM锁的深度解析,包括偏向锁、轻量级锁、自旋锁和重量级锁的概念、内存结构变化及锁膨胀流程。这些内容不仅帮助群内的小伙伴们顺利通过了多家一线互联网企业的面试,还整理成了《尼恩Java面试宝典》等技术资料,助力更多开发者提升技术水平,实现职业逆袭。尼恩强调,掌握这些核心知识点不仅能提高面试成功率,还能在实际工作中更好地应对高并发场景下的性能优化问题。
        |
        SQL 缓存 安全
        Java高频面试题目
        面试时面试官最常问的问题总结归纳!
        140 0
        JAVA高频面试题目集锦(6)
        JAVA高频面试题目集锦(6)
        139 0
        JAVA高频面试题目集锦(6)