跨平台、JVM、垃圾回收、API等——认识 Java

Java基础知识

1.Java 语言的核心特性与设计理念

Java 语言是一种面向对象语言,它继承了 C++ 语言面向对象的技术核 心,但是拋弃了 C++ 的一些缺点,比如说容易引起错误的指针以及多继承等, 同时也增加了垃圾回收机制,释放掉不被使用的内存空间,解决了管理内存空间的烦恼,让程序员的工作变得更加简单,可以专注于业务开发。 Java 语言是一种分布式的面向对象语言,具有面向对象、平台无关性、简单性、解释执行、多线程、安全性等很多特点,具体如下:

更纯粹的面向对象编程,加速开发的过程

一次编写,到处运行(Write Once,Run any Where) ,跨平台

程序员写好 Java 程序,再将其编译成字节码文件,最后由 JVM 解释执行

开源及强大的生态环境,社区活跃,第三方类库选择丰富

简单性,学习起来更简单,用起来更方便

强大的 API ,使得编程变得更加容易快捷,大大降低了程序的开发成本

安全性,Java 的存储分配模型可以有效防御恶意代码攻击

支持多线程和多任务,强类型、异常处理、垃圾回收机制等技术,保证了 Java 的健壮性


2.Java 程序的执行

我们说Java是可以跨平台的,在这写了在那用,一次编写,到处运行(Write Once,Run any Where),是因为它腿长吗╮( •́ω•̀ )╭?那JDK中的JVM可能就是他的腿。

Java属于高级编程语言,高级语言的开发流程有3个步骤:编写程序,编译程序,运行程序。

编写:指程序员编写源代码,比如 HelloWorld.java

编译:指将源代码文件转化成机器认识的机器语言的过程

运行:指通过编译后,让计算机执行编译后指令的过程

所以实际操作是这样的:程序员写好 Java 程序,再将其编译成字节码文件,最后由 JVM 解释执行

我相信大家都是身经百战、久经考验的代码写手,无论是自学还是科班出身,大家写代码肯定手到擒来,而且应该大部分都用IDEA,少部分用VScode,用vscode的应该也在写Java时跟着右下角弹出来的下载Java扩展包下载了插件,这样点击软件上方的菜单栏中运行字样或者使用快捷键就可以直接运行代码。

这样确实很cool😎,但是Java难道就是这样运作的吗?诚然它只是一个工具,我们基础的学习不知道为什么也能继续使用,但是我认为,只有理解或者说最起码知道它的原理才能深刻记住它。//_(:з」∠)_别急

如果你和我一样用的是没下载插件的vs code,那么你写完你的代码在菜单上找到运行>启动调试时,它肯定会告诉你:没有用于调试Java的扩展。我们是否应在市场中找到Java扩展?

而无扩展的操作应该是这样:

或者你也可以试着直接记事本写一个测试代码,然后保存为   .java,后面在当前文件夹的终端内操作如上步骤:

这样将更直观的看到,我们在写完Java代码之后是要javac编译一次的


Java 程序的执行流程(从源码到运行)

1.源码编写:开发者编写.java源文件(需遵循语法规范,如类名与文件名一致)。

2.编译阶段:javac编译器将.java文件转换为字节码(.class文件),字节码是 JVM 可识别的中间代码(非机器码,确保跨平台)。编译过程会进行语法检查、语义分析、生成字节码指令(如invokevirtual调用实例方法)。

3.类加载阶段:JVM 的类加载器(ClassLoader)将.class文件加载到内存,经历 “加载→验证→准备→解析→初始化”5 个阶段,最终生成 JVM 可直接使用的 Class 对象。

4.运行阶段:JVM 执行引擎(解释器 + JIT 即时编译器)将字节码转换为机器码并执行:

解释器:逐行翻译字节码(启动快,适合短程序)。JIT 编译器:将热点代码(频繁执行的部分)编译为本地机器码(执行快,适合长程序)。


使用Java语言编写一份源代码,不管在什么操作系统下编译,得到的都是相同的字节码文件,在不同的操作系统下使用不同的JVM解释执行这份字节码文件,程序成功运行,将会有相同的运行效果,这就是跨平台的原理。


高级语言的编译方式分为三种:编译型、解释型、混合型。

1)编译型:使用专门的编译器,针对特定平台(操作系统)将某种高级语言源代码一次性"翻译" 成可以被该平台硬件执行的机器码 ,并包装成为该平台所能识别的可执行程序的格式(生成新文件),这个转换过程就是"编译" 。C、C++都属于编译型语言

2)解释型:使用专门的解释器,将源程序逐行解释成特定平台的机器码,并立即执行(不会生成新文件),可以理解为,解释型语言相当于把编译型语言里面的编译和执行合并到了一起同时进行。 优点是跨平台,缺点是效率低。 Python、Shell、Ruby都属于解释型语言

3)混合型:Java语言是混合型(编译+解释)的代表。首先它的源代码需要编译,生成与平台无关的字节码(.class)文件,字节码文件不能直接执行,需要交给操作系统下的Java虚拟机(JVM)解释执行。而Java为不同的操作系统提供了不同的JVM虚拟机。

 

生活中类似案例ʕ ᵔᴥᵔ ʔ:


3.JVM虚拟机

说了这么久JVM,那它到底是何方神圣•᷄ࡇ•᷅

JVM是Java Virtual Machine(Java虚拟机)的缩写,它是一个虚构出来的计算机规范结构,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

JVM是Java中最核心的一个东西,它在计算机的内存中,虚拟并提供了Java代码可以在其中运行的基础环境。

JVM内存管理结构如下:

  • 方法区(Method Area):存储类信息、常量、静态变量等(JDK 8 后由元空间 Metaspace 实现,使用本地内存)。
  • 堆(Heap):存储对象实例和数组,是垃圾回收的主要区域(所有线程共享)。
  • 虚拟机栈(VM Stack):每个线程私有,存储方法调用的栈帧(包含局部变量表、操作数栈等),方法执行完毕栈帧出栈。
  • 本地方法栈(Native Method Stack):类似虚拟机栈,为 Native 方法(如调用 C 语言实现的方法)服务。
  • 程序计数器(Program Counter Register):记录当前线程执行的字节码指令地址,线程私有(唯一不会 OOM 的区域)。

和我们程序中关系比较紧密的是堆区、栈区还有方法区,后面我们会经常提及这个几个内存区域

JVM就是Java代码和计算机之间的一个桥梁,Java代码编译后,计算机并不能直接运行,必须需要经过JVM进行解释后,再进行运行。

JVM本质上是一个规范,每个公司都可以按照这个规范实现自己的JVM虚拟机,我们现在默认使用的JVM就是oracle公司提供的一个实现,这个JVM叫做 HotSpot。


4.垃圾回收器

在Java语言中,编程人员不需要在代码中主动的对内存进行申请与释放(C、C++语言中,程序员需要自己控制)

Java代码中,开辟要使用的内存空间,使用new关键字即可完成。 使用完之后,对内存的释放,在JVM中,由垃圾回收器(Garbage Collection, GC)来完成。 不同类型的GC,在JVM中,会根据不同的算法,对不同的内存区域内标记为垃圾的空间,进行回收释放。在这个过程中,是不需要编程人员干预的,它自己会主动的完成。

在代码中,我们也可以调用JavaSE-API提供的方法,通知GC现在去进行垃圾回收的工作: java.lang.System.gc();

java.lang.Runtime.gc();

虽然可以主动通知,但是最后GC并不一定会立刻执行,因为这个垃圾回收的过程什么时候执行,最终还是要根据GC的具体算法和当前内存的使用情况来确定。


5.Java 的核心类与 API

Java自带的标准库(JDK API)是开发者的 “第一工具箱”,最大的特性就是“开箱即用”,且覆盖了基础功能到复杂场景,无需依赖第三方即可完成大部分开发任务。

将来在我们编写的代码中,要使用/调用JavaSE-API中所提供的代码,它的源代码存放在src.zip中,编译后的字节码存放在rt.jar中,这些类、接口的 介绍和使用说明,都在JavaSE-API说明文档中,它就像是一本说明书,来指导我们该如何调用这些别人提供给我们的基本代码。

JDK8在线API

大家也可以在网上找到各种汉语翻译后的或直接用网页工具翻译,但是要注意的是,我们只需要知道其意思即可,不要去抠字眼而是要在实际使用中理解,因为如何翻译都有可能不够准确,自己觉得好理解才是王道U•ェ•*U

一些常用的如java.lang包、java.util包等,这些 API 的设计遵循 “简单易用” 原则,是Java的好用的灵魂之一


6.异常处理机制和多线程与并发基础

异常处理机制是 Java 保障程序健壮性的核心手段,其核心功能是识别、捕获并处理程序运行时的意外情况,避免程序因错误直接崩溃,同时提供清晰的错误信息便于调试。

其优秀的错误识别与异常抛出,使得即使发生异常,通过合理的处理逻辑(如降级策略、默认值返回),程序可继续执行或优雅退出,而非直接崩溃。例如,文件读取失败时,程序可捕获IOException并提示 “读取失败”,同时继续执行其他功能。

多线程与并发机制是 Java 实现 “同时执行多个任务” 的核心能力,其功能聚焦于提高程序效率、优化资源利用,并解决多任务协同的问题

它允许程序在一个进程内创建多个线程,每个线程独立执行不同任务,实现 “并行” 效果(如同时下载文件、解析数据、更新 UI)。这避免了单线程程序中 “一个任务阻塞导致整体卡顿” 的问题,显著提升程序响应速度和资源利用率(如充分利用多核 CPU)。当多个线程同时操作共享资源(如全局变量、数据库连接)时,并发机制也会通过 “同步” 手段解决这一问题。

综上,异常处理机制保障程序 “出错后不崩溃”,多线程与并发机制实现 “多任务高效协同”,二者共同支撑 Java 程序在复杂场景下的稳定运行与高效执行。

#其实这部分我也只是掌握理论,但是等我之后学深之后会给大家进一步总结✌︎( ᐛ )✌︎


总结 

    本文梳理了 Java 基础知识的核心框架:从面向对象、跨平台、垃圾回收等核心特性,到 “源码→字节码→JVM 执行” 的运行流程,解析了 JVM 内存结构与垃圾回收的底层逻辑,同时介绍了 Java 丰富的 API、开源生态,以及异常处理、多线程等保障程序健壮性与效率的关键机制。这些内容是理解 Java 运行原理的基础,为后续学习语法细节奠定了认知框架。


这些基础知识虽不直接体现为 “写代码的技巧”,却是理解 Java 运行原理、写出高效可靠代码的前提。后续将深入学习标识符、变量、类型转换等语法细节,逐步从 “认识 Java” 走向 “使用 Java”。

这次的文章大家觉得有帮到你的地方的话,那我不胜荣幸,如果有错误、观感不足或者一些小建议欢迎在评论区指出。感谢点赞,感谢收藏,感谢关注,我会持续更新的٩(๑•̀ω•́๑)۶

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值