JDK、JRE、JVM 的区别与联系
今天的主题,是Java世界里的三座大山:JDK、JRE 和 JVM。它们是Java开发的基础,但很多人刚开始学时总是搞不清楚谁是谁,谁干了啥。咱们今天就把这三个东西好好掰扯清楚,顺便聊聊它们的联系。
JVM:Java虚拟机,大佬中的大佬
先说JVM,Java虚拟机。它是Java的心脏,Java程序的执行就靠它了。简单点说,JVM的工作就是:把咱们写的Java代码翻译成机器能看懂的东西,然后跑起来。
JVM的主要任务
加载字节码:你写的Java代码会被编译成字节码(.class文件),JVM就负责把这些字节码读进来。 字节码翻译:JVM会把字节码翻译成机器码,不然计算机压根看不懂。 运行环境:JVM自带垃圾回收功能,能帮你回收没用的内存,算是打杂又专业的“清洁工”。
JVM运行的过程
假设你写了个简单的HelloWorld
程序,代码编译完生成一个HelloWorld.class
文件。JVM会:
把 HelloWorld.class
文件加载进内存。翻译字节码成机器码。 执行机器码,让屏幕上输出“Hello, World!”。
温馨提示:JVM是平台相关的!Windows、Mac、Linux的JVM都不一样,所以Java才有“写一次,跑多处”的优势——你只需要写代码,JVM负责在各平台“翻译”。
JRE:Java运行时环境,JVM的好搭档
接下来是JRE,Java Runtime Environment,翻译成中文就是“Java运行时环境”。它是个“大礼包”,里面包含了JVM和一些必备的库文件,目的是为了保证你的Java程序能正常跑起来。
JRE的构成
JVM:JRE里最重要的一部分,没JVM,JRE啥都干不了。 类库:各种工具类、API、运行Java程序需要的资源,比如处理文件、网络连接啥的,统统打包在JRE里。
JRE适合谁用?
如果你只是想跑别人写好的Java程序,比如玩个Java写的游戏、用个Java写的软件,只需要安装JRE就够了。JRE不会提供开发工具,也就是你不能用它来写代码。
JDK:Java开发工具包,程序员的必备神器
最后是JDK,Java Development Kit,开发者工具包。可以把JDK看成是JRE的升级版,里面包含了JRE,还有一堆写代码用的工具。
JDK里都有啥?
JRE:JDK自带JRE,跑代码的事不在话下。 开发工具:包括编译器 javac
、打包工具jar
、调试器jdb
等等。这些工具是你写Java程序时离不开的。
JDK的工作流程
比如你写了个.java
文件(Java源代码),想把它变成可以运行的程序:
编译:用 javac
把.java
文件编译成.class
文件。运行:用 java
命令启动JVM,加载并执行.class
文件。
不同版本的JDK
市面上JDK版本有很多,比如Oracle JDK、OpenJDK、亚马逊的Corretto等等。它们其实差不多,主要区别在于许可证和性能优化。一般来说,OpenJDK是免费的选择。
温馨提示:开发环境一定要选对JDK版本!比如JDK 8写的代码可能不完全兼容JDK 11,升级前最好查查坑。
三者的关系:谁离了谁都不行
简单点总结:
JVM:专注执行字节码,它只负责“跑”程序。 JRE:带着JVM和类库,确保程序能跑起来。 JDK:除了跑,还能让你“写”程序,开发者的全家桶。
关系图可以这么理解:
JDK > JRE > JVM
JDK包含了JRE,JRE包含了JVM。这仨是递进关系,一个比一个功能更全。
常见问题和小坑
为什么装了JDK还需要配置环境变量?JDK安装后,开发工具和JRE所在路径需要告诉系统,不然你运行
javac
、java
这些命令时会报“找不到”的错。JRE和JDK必须同时安装吗?不用。JDK里自带JRE,单独安装JRE反而是多此一举。
JVM和操作系统的关系是什么?JVM是和操作系统直接打交道的中间层,操作系统的资源调度、文件操作这些事都交给JVM处理。
这三个家伙,搞清楚了其实也没啥难的,它们各司其职,却又紧密合作。记住它们的关系和职责,写Java代码就能更顺手了。