Java程序运行机制
Java语言既具有编译型语言的特征,又具有解释型语言的特征,Java程序要经过先编译后解释两个阶段。
高级语言的运行机制
📍编译型语言
使用专门的编译器,针对特定的平台(移植性差),将高级语言的源代码一次性编译成机器码,所以生成的可执行程序可以脱离开发环境独立运行,且程序运行效率通通常较高。C、C++属于编译型语言。
📍解释型语言
使用专门的解释器,将高级语言的源代码逐行解释成特定平台的机器码并立即执行的语言。是代码在执行时才被解释器一行行动态解析和执行,而不是在执行之前就完成全部编译。可以认为,每次执行解释型语言的程序都需要通过解释器进行一次编译,所以不能脱离解释器独立运行,且程序运行效率通通常较低。JavaScript、Python属于解释型语言。
📍主要区别
编译型语言在一次性编译后即可在特定的平台运行,解释型语言是在运行期间才逐行进行编译。所以前者运行速度快(先前在哪个平台编译的,就在哪个平台运行),后者跨平台性好(在当前选定的平台一边编译一边运行)。
Java程序的运行机制和JVM
Java语言比较特殊,程序需要先经过编译步骤,但编译后并不会生成特定平台的机器码,而是生成一种与平台无关的字节码(.class文件),这种字节码并不是可执行的,必须经过java特定平台的解释器来解释执行,生成特定平台的机器码。因此可以认为,Java既是编译型语言,也是解释型语言。
java程序的执行过程必须经过先编译、后解释两个步骤。
.java文件(javac编译)---> .class字节码文件(java解释执行【使用java虚拟机】) ---> 特定平台的机器码
Java语言里负责解释执行字节码文件的就是java虚拟机(JVM)。各个平台上的JVM是不相同的,但是这些JVM都向编译器提供相同的编程接口,编译器只需要面向虚拟机,生成虚拟机能理解的代码,最后由虚拟机来解释执行。

📍Java语言为什么能一次编译到处运行?
java不同的平台有不同的JVM。源代码是一次编译成字节码文件(*.class文件),再利用不同平台的JVM进行解释,所以能在各个平台执行,这也是java跨平台的原因

JDK JRE JVM
JDK是java标准版开发包,是一套用于开发java应用程序的开发包,包括Java编译器、Java运行时环境(JRE)以及常用的Java类库等。
JRE是Java运行时环境,是运行Java程序的必须条件,它包含了类加载器、字节码校验器、JVM等
JVM是Java虚拟机,用于解释与平台无关的字节码文件,生成特定平台的机器码
包含关系:JDK>JRE>JVM
一般来说,如果只是要运行Java程序,可以只安装JRE,但如果要开发Java程序,则需要安装JDK
安装JDK需要设置的环境变量
📍PATH环境变量
我们知道,java执行过程必须经过先编译、后解释,Java程序安装了JDK之后,我们尝试在命令行窗口输入java和javac命令,发现提示“不是内部或外部命令”。这是因为:
Windows操作系统根据Path(不区分大小写)环境变量来查找命令,Path环境变量的值是一系列路径,操作系统根据这些路径依次查找当前执行的命令,若命令不存在,则提示"不是内部或外部命令...”
Linux操作系统根据PATH(区分大小写)环境变量查找命令。

用户变量和系统变量的区别:用户变量只对当前用户有效,系统变量对所有用户有效,为减少自己所做修改影响其他人,可设置用户变量。不过如果用户变量和系统变量配置的路径中包含了同一个命令,优先执行系统变量的。
📍为什么是%JAVA_HOME%?
其实就是引用变量JAVA_HOME的值,方便动态切换jdk版本
📍为什么是bin目录?
java javac命令就存在jdk的bin目录里面
第一个Java程序
1、在记事本新建一个文本文件,输入如下代码
public class HelloWorld{public static void main(String[] args){System.out.println("hello world !");}
}2、编译生成字节码.class文件
命令学习:javac -d destdir srcFile
destdir表示生成的字节码放在哪里
命令执行:C:\Users\25426>cd Desktop
C:\Users\25426\Desktop>javac -d . HelloWorld.java
3、运行Java程序
📍需要先进入.class文件所在目录
📍然后输入运行命令
C:\Users\25426\Desktop>java HelloWorld
📍此时看到命令行窗口输出语句,也就是程序要求输出的语句,代表Java程序运行成功
hello world !
Java程序的基本规则
程序的组织形式
Java解释器规定,某个类必须包含main方法才能被解释器直接解释执行,main方法必须使用public static void来修饰,参数为String[] 类型,即Java虚拟机是从main方法开始解释执行的,main方法是Java程序的入口。
Java源文件的命名规则
📍扩展名必须是.java
📍文件名必须与public类的类名相同,因此java源文件只能有一个public类(一个源文件可以有多个类的,但只能有一个public)
Java9的G1垃圾回收器
内存泄漏:程序在申请内存后,无法释放已申请的内存空间,导致系统无法及时回收内存并且分配给其他进程使用。多次内存泄漏会导致内存溢出;
内存溢出:程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;
Java语言存在着垃圾回收机制,能够及时回收无用内存,减少内存泄漏。
Java程序的内存分配与回收都是由JRE在后台自动进行的。JRE负责回收不再使用的内存,这称为垃圾回收机制(GC)。
当一个对象不再被引用时,JVM按照特定的垃圾回收算法来实现内存自动回收。
JVM无论使用哪种垃圾回收算法,一般都要做两件基本的事情:
📍跟踪有用的对象,确定无用的对象
📍回收无用对象的内存空间
垃圾回收的特点:
📍垃圾回收器只能回收内存资源,不能回收物理资源,如数据库连接、磁盘IO
📍垃圾回收的时机不可预知,可能是CPU空闲时,也可能是内存不够用时。即使调用gc()或者System.gc(),也只是建议系统进行垃圾回收,但不一定会执行。
📍垃圾回收的开销会影响程序性能
程序编写原则:不再需要的对象,不要引用它们,那么它的内存有机会被收回
后续在详细介绍......
相关文章:
Java程序运行机制
Java语言既具有编译型语言的特征,又具有解释型语言的特征,Java程序要经过先编译后解释两个阶段。高级语言的运行机制📍编译型语言使用专门的编译器,针对特定的平台(移植性差),将高级语言的源代码…...
LeetCode刷题------字符串
目录 LeetCode:344.反转字符串 LeetCode:541. 反转字符串II LeetCode:剑指Offer 05.替换空格 LeetCode:151.翻转字符串里的单词 LeetCode:剑指Offer58-II.左旋转字符串 LeetCode:28. 实现 strStr() …...
区块链技术与应用2——BTC-数据结构
文章目录比特币中的数据结构1. 区块链(block chain)2. 默克尔树(Merkle tree)3.哈希指针的问题比特币中的数据结构 1. 区块链(block chain) 哈希指针: (1)保存数值的位置…...
BiseNet v1论文及其代码详解
来源:投稿 作者:蓬蓬奇 编辑:学姐 BiSeNet v1说明: 文章链接:https://arxiv.org/abs/1808.00897 官方开源代码:https://github.com/CoinCheung/BiSeNet (本文未使用) 文章标题&am…...
(超详细)Navicat的安装和激活,亲测有效
步骤一:准备安装包 下载Navicat,我用的v15最好一致(私信可以发你安装包和注册码)步骤二:关闭杀毒软件,然后需要断掉网络(一定断网) 步骤三:一路next安装,安装…...
JDY-31蓝牙模块使用指南
前言 本来是想买个hc-05,这种非常常用的模块,但是在优信电子买的时候,说有个可以替代的,没注意看,买回来折腾半天。 这个模块是从机模块,蓝牙模块分为主机从机和主从一体的,主机与从机的区别就…...
【2023】华为OD机试真题Java-题目0211-租车骑绿道
租车骑绿道 题目描述 部门组织绿道骑行团建活动。租用公共双人自行车骑行,每辆自行车最多坐两人、最大载重 M M M。 给出部门每个人的体重,请问最多需要租用多少双人自行车。 输入描述 第一行两个数字 m m m、...
leetcode: 3Sum
leetcode: 3Sum1. 题目描述2. 思考3. 解题3. 总结1. 题目描述 Given an integer array nums, return all the triplets [nums[i], nums[j], nums[k]] such that i ! j, i ! k, and j ! k, and nums[i] nums[j] nums[k] 0. Notice that the solution set must not contain …...
【Python学习笔记】26.Python3 输入和输出(2)
前言 本章节继续介绍Python的输入输出。 文件对象的方法 本节中剩下的例子假设已经创建了一个称为 f 的文件对象。 f.read() 为了读取一个文件的内容,调用 f.read(size), 这将读取一定数目的数据, 然后作为字符串或字节对象返回。 size 是一个可选的数字类型的…...
vue项目第二天
项目中使用element-ui库中文网https://element.eleme.cn/#/zh-CN安装命令npm install element-ui安装按需加载babel插件npm install babel-plugin-component -Dnpm i //可以通过npm i 的指令让配置刷新重新配置一下项目中使用element-ui组件抽离文件中按需使用element ui &…...
Python爬虫零基础到进阶(课程说明)
Python爬虫零基础到进阶 课程介绍总结 学—练—问 跟着学、多做多练、不懂就问、坚持就是胜利! 作业 飞书布置,作业提交放到群里,老师批改。 代码量 python基础: 十一次课,学会python。环境安装(了…...
《C++ Primer Plus》第16章:string类和标准模板库(13)
复习题 考虑下面的声明: class RQ1{ private:char *st; // pointer to C-style string public:RQ1() { st new char [1];strcpy(st, "");}RQ1(const char * s) {st new char [strlen(s)1];strcpy(st, s);}RQ1(const RQ1 & rq) {st new char[strlen…...
材质笔记 - Simluate Solid Surface
光的行为 当光和物体相遇时,光会有三种行为:被物体反射、穿过物体(物体是透明或半透明的)或者被吸收。 高光反射和漫反射 高光反射(Specular Reflection)会在表面光滑且反光的物体上看到,比如镜…...
设计模式-值类型与引用类型、深拷贝与浅拷贝、原型模式详解
一. 值类型和引用类型 1. 前言 (1). 分类 值类型包括:布尔类型、浮点类型(float、double、decimal、byte)、字符类型(char)、整型(int、long、short等)、枚举(entum)、结构体(struct)。 引用类型:数组、字符串(string)、类、接口…...
ssm高校功能教室预约系统java idea maven
本网站所实现的是一个高校功能教室预约系统,该系统严格按照需求分析制作相关模块,并利用所学知识尽力完成,但是本人由于学识浅薄,无法真正做到让该程序可以投入市场使用,仅仅简单实现部分功能,希望日后还能…...
C语言学习笔记-强制类型转换
强制类型转换是通过类型转换运算来实现的。其一般形式为:(类型说明符)(表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。自动转换是在源类型和目标类型兼容以及目标类型广于源类型时发生一个类型…...
docker数据卷插件
在docker中,对接外部存储我们通常需要docker的数据卷插件。docker中简要可分为两类 docker卷插件和CSI插件,其中docker卷插件分为两个版本,旧版的传统插件(legacy plugin/non-managed plugin)和新版的托管插件(managed plugin)。下面分章节讨…...
第二章-线程(3)
线程一、线程的定义二、线程的实现一、线程的定义 线程: 线程是进程中的一个实体,是系统独立调度和分派的基本单位。 进程是资源的拥有者,线程是系统独立调度和分配的基本单位。 进程与线程的比较: 调度:线程调度快…...
C++学习记录——칠 类和对象(4)
文章目录1、const成员2、取地址及const取地址操作符重载3、构造函数续集1、初始化列表2、explicit关键字4、static成员5、匿名对象6、友元1.友元函数2、友元类7、内部类1、const成员 看一段代码 class A { public:void Print(){cout << _a << endl;} private:int…...
Python-项目实战--飞机大战-碰撞检测(8)
目标了解碰撞检测方法碰撞实现1.了解碰撞检测方法pygame提供了两个非常方便的方法可以实现碰撞检测:pygame.sprite.groupcollide()两个精灵组中所有的精灵的碰撞检测groupcollide(group1, group2, dokill1, dokill2, collided None) -> Sprite_dict如果将dokill…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
sshd代码修改banner
sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头,…...
