小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

Java运行机制

java,jvm,面试 额外说明

收录于:18天前

java的运行机制

Java程序的运行机制分为三个步骤:编写、编译和运行。

1.写

编写是指在Java开发环境中编辑程序代码,最终生成后缀为“.java”的Java源文件。

2.编译

编译是指使用Java编译器对源文件进行故障排除的过程。编译后会生成后缀为.class的字节码文件,可以被Java虚拟机(JVM)的解释器正常读取。

3.运行
运行是指使用Java解释器将字节码文件翻译成机器代码,执行并显示结果。 字节码文件是一种和任何具体机器环境及操作系统环境无关的中间代码,它是一种二进制文件,是Java源文件由Java编译器编译后生成的目标代码文件。

Java运行过程

在这里插入图片描述

从编写好的Java源文件,到编译成字节码文件,再到通过JVM执行程序,再将程序的运行结果显示给用户,这就是一个完整的Java运行过程。

JVM

JVM(Java虚拟机Java虚拟机)

(1)JVM是Java字节码执行的引擎。它为Java程序的执行提供必要的支持。它还可以优化Java字节码并将其转换为更高效的机器指令。程序员编写的程序最终都会在JVM上执行。 JVM中类的加载是由类加载器(ClassLoader)及其子类来实现的。

(2)ClassLoader是Java运行时的重要系统组件,负责在运行时查找并加载类文件中的类。

(3)JVM屏蔽了与特定操作系统平台相关的信息,从而实现Java程序只需生成在JVM上运行的字节码文件(类文件),无需修改即可在多个平台上运行。不同的平台对应不同的JVM。在执行字节码时,JVM负责将每个要执行的字节码发送给解释器,然后解释器将其翻译成特定平台环境的机器指令并执行。 Java语言最重要的特点是跨平台运行。使用JVM的目的是为了支持跨平台运行,与操作系统无关。

ClassLoader

(1)是JVM实现的一部分,包括bootstrapclassloader(启动类加载器)

(2)ClassLoader在JVM运行时加载Java核心API,通过Java程序实现两个ClassLoader:

  • ExtClassLoader,它的作用是加载Java的扩展API,即lib\ext类;

  • AppClassLoader用于加载用户机器上CLASSPATH设置目录中的Class。

(3)ClassLoader加载过程:运行程序时,JVM启动并运行引导类加载器。 ClassLoader加载java核心API,然后调用ExtClassLoader加载扩展API,最后AppClassLoader加载CLASSPATH目录中定义的Class。

JRE

JRE是JavaRuntimeEnvironment,java运行时环境。它是运行java程序所必需的环境的集合。主要由java虚拟机、java平台核心类和几个支持文件组成。它不包括开发工具、编译器、调试器和其他工具。

当执行java程序时,操作系统会按照以下顺序搜索JRE环境。

(1)首先检查当前目录下是否有JRE

(2)检查父目录是否有JRE

(3)然后在环境变量PATH指定的路径中搜索JRE

(4) 检查注册表,查看CurrentVersion键值指向哪个JRE。

JRE自带的基础类库主要在JRE\LIB\rt.jar文件中。程序运行时,JRE ClassLoader负责查找并加载程序引用的基类库和其他类库。对于基础类库,ClassLoader会自动去rt.jar所在位置;对于其他类库,ClassLoader会在环境变量CLASSPATH指定的路径中搜索。

JDK

JDK是Java Development Kit,简称java开发工具包。

JDK是java的核心。它包括一个java运行环境、一堆java工具和java基础类库(rt.jar)。

JDK除了包含JRE的全部内容外,还包含供开发人员编译、调试和运行Java程序的工具。

JDK、JRE和JVM之间的关系:

在这里插入图片描述

高级语言的运行机制

我们都使用高级语言进行编程。计算机不能直接理解高级语言,只能理解并运行机器语言。因此,必须将高级语言翻译成机器语言,以便计算机可以运行用高级语言编写的程序。

翻译,其实翻译有两种方式,一种是编译,一种是解释。两种方法之间的唯一区别是翻译时间。

在这里插入图片描述

. . .

相关推荐

额外说明

JS——appendChild()和insertBefore()插入新节点的区别

文章目录 前言 appendChild(newchild) insertBefore(newchild, refchild) insertBefore() 补充 参考资料 前言 在html中,如果需要动态的插入数据标签(li、a等),则需要使用到标题所示

额外说明

leetcode415(字符串加法)

题目:给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。 注意:你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。 题解(一):维护两个指针,从后向前分别遍历两个字符串,模拟竖式加法运算。 clas

额外说明

Redisson自定义序列化方式将Long转成String,并以json格式存储到redis

小伙伴们,你们好呀,我是老寇 package org.laokou.redis.config; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.j

额外说明

pytorch 学习之 训练流程

train.py 的代码基本结构。 读取与加载数据 从硬盘读取数据 train_data = XXXDataset(data_dir=train_dir, transform=train_transform) valid_data = XXXDatase

额外说明

排序:Java实现冒泡排序原理及代码注释详解

冒泡排序 1.简介: 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢

额外说明

摩天大楼记录

文章目录 一、摩天大楼诅咒 二、摩天大楼记录 1、纽约市的公平人寿保险大楼 - 40米 2、芝加哥的家庭保险大楼 - 42米 3、芝加哥会堂大厦 - 68米 4、曼哈顿人寿保险大楼 - 106米 5、辛格大楼 - 187米 6、大都会人寿保险大楼 - 2

额外说明

Spring Boot 中动态创建 Flowable 工作流

在 Spring Boot 中动态创建 Flowable 工作流可以通过以下步骤实现: 1. 创建 Flowable 配置:首先,您需要在 Spring Boot 应用程序中配置 Flowable。您可以使用 Spring Boot 的配置文件或注解来配

额外说明

【Jmeter】文件详解:文件译文 —— graph.js.fmkr (测试报告模版配置文件)

目录 一、文件许可说明 第1段——文件许可说明 二、已封装的方法 第2段—— $(document).ready(function()

额外说明

猿创征文|前端到全栈,一名 IT 初学者的学习与成长之路

目录导读 写在前面 创作之路 ❤ 前端开发工程师知识体系 ❤ Vue&React 开发框架 ❤ 前端开发实战 ❤ Linux&云原生 小马技术栈 ❤ 主打技术专栏 ❤ 其他专栏(实用干货) ❤ 技术栈词云 学习与成长总结 写在前面 2021 年 7 月

额外说明

MySQL找回误删的数据,数据恢复

原创作品,未经同意,请勿转载;允许复制链接,对原文直接进行转发。 原创作者玉龙有着十几年大厂软件开发工作经验, 目前自由职业, 欢迎业务洽谈。 误删了几十万条MySQL记录, 要如何找回物理删除的数据呢?  查阅各种资料, 被误导做了些无效尝试, 现把成

ads via 小工具