【JavaSE】Java的基础概念

server/2024/10/20 17:26:24/

文章目录

  • `JavaSE`和`JavaEE`
  • `JVM`,`JDK`,`JRE`
    • `JVM`
      • 字节码
        • 什么是字节码
    • `JDK`和`JRE`
      • `JDK`,`JRE`,`JVM`,`JIT`之间的关系

JavaSEJavaEE

  • JavaSE:Java平台标准版,Java编程语言的基础,包含Java应用程序开发和运行的核心类库虚拟机等核心组件.
  • JavaEE:Java平台企业版,建立在JavaSE的基础上,增加了支持企业级应用程序开发和部署的标准和规范.
    总结来说,JavaSEJava的基础版本,JavaSEJava的高级版本.JavaSE适合开发简单的应用程序,JavaEE更加适合开发 复杂的企业级应用程序或者Web应用程序

JVM,JDK,JRE

JVM

JVM虚拟机:是运行Java字节码 的虚拟机,JVM针对不同的操作系统(window,Linux,mac)具有不同的实现.目的是使用相同的字节码,在不同的平台上,JVM都可以得出相同的结果.
Java语言的一大特点:一次编译,处处运行.JVM的设计是关键所在.

所以:不同的编译语言(Java,Groovy)等,通过各自的编译器编译成.class文件(即字节码文件),最终通过JVM在不同的平台上运行,都可以得到相同的结果**.

但是,JVM并不是只有一种,我们平时使用的HotSpotVM,只是其中的一个实现,在满足JVM规范的状态下,每个公司,组织和个人都可以开发属于自己的JVM.

字节码

什么是字节码

Java中,JVM虚拟机可以理解的代码叫做字节码(扩展名为.class的文件),字节码并不面向任何特定的处理器,只面向虚拟机.Java通过字节码的方式,在一定程度上解决了传统解释性语言执行效率低的问题

解释型语言vs编译型语言:

  • 编译型语言:源代码在执行前需要通过编译器转换成机器语言或中间代码。预处理阶段,源代码在运行前被完整地编译成目标代码(通常是机器码)。执行时,直接以机器码形式运行,不需要在运行时再次翻译
  • 解释型语言: 源代码在运行时由解释器逐行或逐块转换成机器语言并立即执行。程序在执行过程中逐条或逐段被解释器翻译成机器码并执行。
  • 执行效率:
    编译型语言:由于程序直接以机器码形式运行,因此执行效率高。
    解释型语言:由于每次运行都需要实时翻译,所以通常比编译型语言慢。
    在这里插入图片描述

字节码一定程度上提高了传统解释型语言的执行效率:

  • 将源代码编译成字节码,解释器或虚拟机可以针对字节码进行优化,从而提高执行效率。这些优化可能包括代码重组指令合并循环优化等。
  • 字节码还可以被即时编译器JIT)进一步编译成机器码,从而在运行时获得更高的执行效率。JIT编译器会在程序运行时监控代码的执行情况,并根据需要动态地将字节码编译成机器码。
    在这里插入图片描述

什么是JIT:
我们根据上面的过程,了解到,Java先进行编译,得到字节码文件后,JVM的类加载器先加载字节码文件,然后再由解释器逐行解释执行,这种方式的执行速度会相对比较慢.而JIT解释器完成第一次编译之后,会将字节码对应的机器码保存起来,下一次可以直接使用.所以,JIT属于运行时编译.
在这里插入图片描述
根据二八定律,消耗大部分系统资源的只有一部分热点代码,所以Java会将热点代码交给JIT编译器处理:
在这里插入图片描述

所以,Java编译与解释共存的语言.

JDKJRE

  • JDK:是一个功能齐全的Java开发工具包.包含了JRE以及编译器(javac)和其他的工具(如监控工具(jconsole),反编译工具(javap),调试器(jdb),文档生成器(javadoc)等)
  • JRE:是运行已编译Java程序所需的环境,主要包含:JVM和**Java基础类库**.
    在这里插入图片描述

JDK,JRE,JVM,JIT之间的关系

在这里插入图片描述


http://www.ppmy.cn/server/133401.html

相关文章

uni-app写的微信小程序如何体积太大如何处理

方法一:对主包进行分包处理,将使用url: /pages/components/equipment/equipment跳转页面的全部拆分为分包,如url: /pagesS/components/equipment/equipment 在pages.json中添加 "subPackages": [{ "root"…

【C++篇】领会C++标准库:STL

文章目录 前言 💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力! 👍 点赞、收藏与分享:觉得这篇文章对你有帮助吗&#xff1…

认识python数据分析

Python作为一种高效、灵活且易于学习的编程语言,在数据分析领域展现出了强大的应用潜力。 从数据清洗、预处理到复杂的统计分析、可视化及机器学习模型的构建,Python提供了丰富的库和框架,极大地简化了数据分析的流程,提高了工作…

Rhymes AI发布首款开源多模态AI模型Aria 性能超越GPT-4o mini等多家知名AI模型

最近,日本东京的初创公司 Rhymes AI 推出了他们的首款人工智能模型 ——Aria。该公司自称,Aria 是全球首个开源的多模态混合专家(MoE)模型。这个模型不仅具有处理多种输入模态的能力,还声称在能力上与一些知名的商业模…

基于springboot+thymeleaf+springsecurity搭建一套web小案例

一、前言 本案例中的源代码已上传到资源库,可自行下载,传送阵 https://download.csdn.net/download/qq_36260963/89906196 Spring Boot是为了简化Spring应用的创建、运行、调试、部署等而出现的,使用它可以做到专注于Spring应用的开发&#x…

iptables 命令详解

iptables 是 Linux 中用于设置、维护和检查 IP 数据包过滤规则的命令。它是一个强大的工具,广泛用于网络防火墙、安全性和网络地址转换 (NAT) 等。 以下是 iptables 命令的主要选项及其详细说明。 1. 基本语法 iptables [选项] [链名称] [规则匹配条件] [动作][选…

Flutter开发的树莓派应用如何优化性能?

哈喽,我是老刘 前段时间有朋友咨询我在树莓派上开发的Flutter程序如何优化性能的问题。 老刘写了6年多的Flutter代码,树莓派这种平台还真是头一次碰到。 不过我听他说完他们的场景,我就知道他们大概率是碰到性能问题了。 那么今天就来说说这…

十三、行为型(策略模式)

策略模式(Strategy Pattern) 概念 策略模式(Strategy Pattern)是一种行为型设计模式,允许定义一系列算法,将每个算法封装在策略类中,并使它们可以互换使用。客户端可以根据需要动态选择不同的策…