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的掌握我相信不止于此,如果您对此语言或其他有进阶的要求,请移步至我的博客进行其余的修炼计划。

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

        相关文章
        |
        26天前
        |
        Java
        安装JDK18没有JRE环境的解决办法
        安装JDK18没有JRE环境的解决办法
        126 3
        |
        4天前
        |
        Java
        jvm复习,深入理解java虚拟机一:运行时数据区域
        这篇文章深入探讨了Java虚拟机的运行时数据区域,包括程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区、元空间和运行时常量池,并讨论了它们的作用、特点以及与垃圾回收的关系。
        34 19
        jvm复习,深入理解java虚拟机一:运行时数据区域
        |
        1月前
        |
        存储 缓存 监控
        【Java面试题汇总】JVM篇(2023版)
        JVM内存模型、双亲委派模型、类加载机制、内存溢出、垃圾回收机制、内存泄漏、垃圾回收流程、垃圾回收器、G1、CMS、JVM调优
        【Java面试题汇总】JVM篇(2023版)
        |
        1月前
        |
        安全 前端开发 Java
        浅析JVM invokedynamic指令与Java Lambda语法的深度融合
        在Java的演进历程中,Lambda表达式无疑是Java 8引入的一项革命性特性,它极大地简化了函数式编程在Java中的应用,使得代码更加简洁、易于阅读和维护。而这一切的背后,JVM的invokedynamic指令功不可没。本文将深入探讨invokedynamic指令的工作原理及其与Java Lambda语法的紧密联系,带您领略这一技术背后的奥秘。
        20 1
        |
        2月前
        |
        C# Windows 开发者
        当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
        【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
        118 0
        |
        2月前
        |
        C# 开发者 Windows
        震撼发布:全面解析WPF中的打印功能——从基础设置到高级定制,带你一步步实现直接打印文档的完整流程,让你的WPF应用程序瞬间升级,掌握这一技能,轻松应对各种打印需求,彻底告别打印难题!
        【8月更文挑战第31天】打印功能在许多WPF应用中不可或缺,尤其在需要生成纸质文档时。WPF提供了强大的打印支持,通过`PrintDialog`等类简化了打印集成。本文将详细介绍如何在WPF应用中实现直接打印文档的功能,并通过具体示例代码展示其实现过程。
        157 0
        |
        2月前
        |
        数据库 C# 开发者
        WPF开发者必读:揭秘ADO.NET与Entity Framework数据库交互秘籍,轻松实现企业级应用!
        【8月更文挑战第31天】在现代软件开发中,WPF 与数据库的交互对于构建企业级应用至关重要。本文介绍了如何利用 ADO.NET 和 Entity Framework 在 WPF 应用中访问和操作数据库。ADO.NET 是 .NET Framework 中用于访问各类数据库(如 SQL Server、MySQL 等)的类库;Entity Framework 则是一种 ORM 框架,支持面向对象的数据操作。文章通过示例展示了如何在 WPF 应用中集成这两种技术,提高开发效率。
        41 0
        |
        2月前
        |
        缓存 前端开发 Java
        浅析JVM invokedynamic指令与Java Lambda语法
        【8月更文挑战第27天】在Java的演进历程中,invokedynamic指令的引入和Lambda表达式的出现无疑是两大重要里程碑。它们不仅深刻改变了Java的开发模式和性能表现,还极大地推动了Java在函数式编程和动态语言支持方面的进步。本文将从技术角度浅析JVM中的invokedynamic指令及其与Java Lambda语法的紧密联系。
        42 0
        |
        2月前
        |
        安全 前端开发 Java
        【JVM 探秘】ClassLoader 类加载器:揭秘 Java 类加载机制背后的秘密武器!
        【8月更文挑战第25天】本文全面介绍了Java虚拟机(JVM)中的类加载器,它是JVM的核心组件之一,负责将Java类加载到运行环境中。文章首先概述了类加载器的基本工作原理及其遵循的双亲委派模型,确保了核心类库的安全与稳定。接着详细阐述了启动、扩展和应用三种主要类加载器的层次结构。并通过一个自定义类加载器的例子展示了如何从特定目录加载类。此外,还介绍了类加载器的完整生命周期,包括加载、链接和初始化三个阶段。最后强调了类加载器在版本隔离、安全性和灵活性方面的重要作用。深入理解类加载器对于掌握JVM内部机制至关重要。
        79 0
        |
        2月前
        |
        运维 监控 Java
        【JVM 调优秘籍】实战指南:JVM 调优参数全解析,让 Java 应用程序性能飙升!
        【8月更文挑战第24天】本文通过一个大型在线零售平台的例子,深入探讨了Java虚拟机(JVM)性能调优的关键技术。面对应用响应延迟的问题,文章详细介绍了几种常用的JVM参数调整策略,包括堆内存大小、年轻代配置、垃圾回收器的选择及日志记录等。通过具体实践(如设置`-Xms`, `-Xmx`, `-XX:NewRatio`, `-XX:+UseParallelGC`等),成功降低了高峰期的响应时间,提高了系统的整体性能与稳定性。案例展示了合理配置JVM参数的重要性及其对解决实际问题的有效性。
        72 0