Java基础学习笔记二

Java的加载与执行

Java既是编译型语言又是解释型语言

question:为什么JVM可以跨平台执行

answer :
Java虚拟机(JVM)之所以能够跨平台执行,是因为它在不同操作系统上提供了一个统一的运行环境,实现了Java程序的平台无关性。以下是几个关键原因:

字节码:Java源代码在编译时被编译器转换成字节码,而字节码是一种与具体平台无关的中间表示形式。这意味着Java程序不直接在特定平台上运行,而是运行在JVM上,JVM负责将字节码解释或编译成特定平台的机器码。

JVM实现:JVM的实现者根据不同的操作系统和硬件平台,开发了相应的JVM实现。这些实现负责在不同平台上提供与Java程序交互的接口,并将字节码转换为本地机器码。这样,只需要针对特定平台开发适当的JVM实现,就可以在该平台上执行Java程序。

JVM规范:Java虚拟机规范定义了JVM的行为和要求,包括字节码格式、内存模型、类加载机制、垃圾回收等。这个规范确保了不同的JVM实现遵循相同的规则,从而使得Java程序在不同的JVM上具有一致的行为。

运行时环境:JVM提供了一个独立于底层操作系统的运行时环境,它屏蔽了底层操作系统的差异性。JVM负责管理内存、线程、安全性等方面的任务,使得Java程序能够在不同平台上以相似的方式运行。

综上所述,JVM的跨平台执行能力是通过将Java程序编译为平台无关的字节码,并在不同平台上提供适当的JVM实现来实现的。这种设计使得Java程序可以在任何安装了相应JVM的操作系统上运行,提供了可移植性和平台无关性的优势。

在这里插入图片描述

编译阶段

.java --> 通过javac命令 --> .class

  • .java : java程序员编写的java源代码
  • javac : 专门负责编译,检查.java文件语法是否合法,如果不合法,会有错误提示
  • .class : 字节码文件,编译成功的产物。只有JVM能理解该文件(字节码文件不是机器码文件(0101010))

java

java只是一个命令,通过这个命令可以运行java程序,只要它执行,JVM就启动了

运行阶段

JVM --> 操作系统 --> 硬件


在JVM中:

  1. 类加载器(classLoader)根据CLASSPATH环境变量找到.class文件并装载进去
  2. 加载class文件到内存
  3. 连接
  4. 初始化
  5. 执行
  6. 卸载

java加载与执行

需要注意的

  1. 包含两个阶段 : 编译阶段和运行阶段
  2. 编译阶段和运行阶段可以在不同的操作系统上完成
  3. 编译后删除java源程序,不会影响程序的执行
  4. 生成的class文件如果是A.class 则 类名为A
  5. javac是负责编译的命令
  6. java是负责运行的命令
  7. JVM会把class字节码解释为机器码,这样操作系统才能看懂
  8. JDK是什么

JDK(Java Development
Kit)是Java开发工具包,它是用于开发Java应用程序的软件包。JDK包含了开发和调试Java程序所需的工具、编译器、运行时环境和类库。

JDK提供了以下主要组件:

  • 编译器(javac):JDK中的编译器将Java源代码(扩展名为.java)编译为字节码文件(扩展名为.class),这些字节码文件可以在Java虚拟机(JVM)上运行。

  • Java运行时环境(JRE):JDK中包含了完整的JRE,用于在本地机器上执行Java应用程序。JRE包括Java虚拟机(JVM)和Java类库,它提供了Java程序运行所需的基本功能和API支持。

  • 开发工具:JDK提供了一系列的开发工具,如调试器(jdb)、打包工具(jar)、文档生成工具(javadoc)等,用于开发、调试、打包和文档化Java应用程序。

  • 类库:JDK包含了广泛的Java类库,提供了丰富的API和功能,包括集合框架、输入输出、网络编程、数据库访问、图形用户界面(GUI)等。这些类库可以帮助开发者更快速地开发Java应用程序。

除了上述组件,JDK还提供了各种工具、配置文件和示例代码,以帮助开发者更好地进行Java应用程序的开发和调试。
在这里插入图片描述

  1. JRE(Java Runtime Environment)是Java运行时环境,它是Java应用程序运行所需的最小环境。JRE包括Java虚拟机(JVM)和Java类库,用于解释和执行Java字节码,并提供Java应用程序运行所需的基本功能和API支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/280233.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot+Vue前后端分离项目如何部署到服务器

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

19.WEB渗透测试--抓包技术(下)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:18.WEB渗透测试--抓包技术(上)-CSDN博客 Burp含义和内容参考&…

《算法王晓东》多处最优服务次序问题

多处最优服务次序问题 题目描述 设有n个顾客同时等待一项服务。顾客i需要的服务时间为ti, 1≤i≤n。共有s处可以提供此项服务。应如何安排n个顾客的服务次序才能使平均等待时间达到最小? 平均等待时间是n个顾客等待服务时间的总和除以n。 算法设计:对于给定的n个顾…

jvm的垃圾回收器以及触发full gc的场景

JVM(Java虚拟机)的垃圾回收器有很多种,主要包括以下几种: Serial收集器:串行收集器是最古老、最稳定的收集器。它使用单个线程进行垃圾收集工作,在进行垃圾回收时会暂停所有用户线程。 ParNew收集器&#…

使用STM32 再实现电动车防盗

项目需求 点击遥控器 A 按键,系统进入警戒模式,一旦检测到震动(小偷偷车),则喇叭发出声响报警, 吓退小偷。 点击遥控器 B 按键,系统退出警戒模式,再怎么摇晃系统都不会报警&…

SQLiteC/C++接口详细介绍之sqlite3类(十二)

返回目录:SQLite—免费开源数据库系列文章目录 上一篇:SQLiteC/C接口详细介绍之sqlite3类(十一) 下一篇:SQLiteC/C接口详细介绍之sqlite3类(十三) ​37.sqlite3_load_extension 用于在SQLit…

MyBatis核心配置文件:解锁数据之美的密码

MyBatis,这位编程的诗人,通过其独特的核心配置文件,为我们描绘出一幅数据之美的画卷。本篇博客将带你深入探讨MyBatis核心配置文件的奥秘,让你能够更好地理解和运用这个优雅的数据持久化框架。 最近想搞私域,欢迎各位…

Docker与containerd:容器技术的双璧

🐇明明跟你说过:个人主页 🏅个人专栏:《Docker幻想曲:从零开始,征服容器宇宙》 🏅 🔖行路有良友,便是天堂🔖 目录 一、前言 1、Docker和containerd的背景…

PyTorch 深度学习(GPT 重译)(五)

十二、通过指标和增强改进训练 本章涵盖 定义和计算精确率、召回率以及真/假阳性/阴性 使用 F1 分数与其他质量指标 平衡和增强数据以减少过拟合 使用 TensorBoard 绘制质量指标图 上一章的结束让我们陷入了困境。虽然我们能够将深度学习项目的机制放置好,但实…

Hive SQL必刷练习题:日期交叉问题(两种思路)

思路一: ​ 首先想到的是借助炸裂函数,一行变成多行,就可以进行去重操作,然后再统计日期。 用到炸裂函数,就首先需要可以拿到起始和终止日期差大小的数组,然后再炸裂​ 那这个指定长度数组怎么获取呢&…

sentry-cli - error: Failed to load .sentryclirc file from project path

Xcode 15.2 warning sentry-cli - error: Failed to load .sentryclirc file from project path (/Users/zhuhongwei/Desktop/pandabill/.sentryclirc)推荐一下刚上线的 App 熊猫小账本,里面有用到这篇博客讲的内容 熊猫小账本 一个简洁的记账 App,用于…

文件IO(代码案例: 文件复制, 指定目录查找文件, 指定目录查找内容)

文件复制 进行普通文件的复制 使用操作字节流的对象操作文件 // 文件复制 public class Main {public static void main(String[] args) throws IOException {// 输入两个路径, 源路径, 目的路径Scanner scanner new Scanner(System.in);System.out.println("请输入拷贝文…

将OpenCV与gcc和CMake结合使用

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV4.9.0开源计算机视觉库在 Linux 中安装 下一篇: 引言: 近年来,计算机视觉技术在图像处理、目标检测和机器人等方面得到了广泛的应用…

Centos7部署使用TELEMAC-MASCARET

Background TELEMAC-MASCARET是一款研究水动力学和水文学领域的高性能数值仿真开源软件。MASCARET(1980)和 TELEMAC(1987)最初是由法电集团所属的法国国立水利与环境实验室开发,随后整合为TELEMAC-MASCARET并由法英德三…

简单了解多线程

并发和并行 并发: 在同一时刻,多个指令在单一CPU上交替指向 并行:在同一时刻,多个指令在多个CPU上同时执行 2核4线程,4核8线程,8核16线程,16核32线程 基础实现线程的方式 Thread :继承类 &…

UE5.3 StateTree使用实践

近期浏览UE的CitySample(黑客帝国Demo),发现有不少逻辑用到了StateTree学习一下,StateTree是多层状态机实现,以组件的形式直接挂载在蓝图中运行。 与平时常见的一些FSM库不同,StateTree并不会返回给外界当…

软件工程-第9章 软件工程项目管理概述

9.1 软件工程管理活动 9.2 软件规模、成本和进度估算 9.3 能力成熟度模型CMM 9.4 ISO 9000系列标准简介 9.5 CMM与ISO 9000系列标准的比较 9.6 本章小结

【MySQL】学习和总结使用列子查询查询员工工资信息

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-5odctDvQ0AHJJc1C {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

[保姆级教程]Windows安装MongoDB教程

文章目录 MongoDB安装包下载1.点击进入mongodb官网2.点击MongoDB Community Edition(社区版),进入下图界面3.选择版本4.下载5.安装6.勾选同意协议,点击“Next"7.选择自定义安装8.点击“Next"9.修改到合适的地址10.点击i…

Java SE入门及基础(44)

目录 I / O流(上) 1. 什么是I / O流 过程分析 I / O的来源 Java 中的 I / O流 2. 字节流 OutputStream 常用方法 文件输出流 FileOutputStream 构造方法 示例 InputStream 常用方法 文件输入流 FileInputStream 构造方法 示例 综合练习 字节流应用场景 Java SE文…