在日常开发中,我们经常需要将本地的Java项目部署到线上服务器。面对环境配置,很多人都会纠结:到底应该安装完整的JDK,还是只安装JRE就足够了?其实很多面试都会问这个问题,这篇文章就来解答这个问题。

基础概念

在深入讨论之前,我们先简单了解一下JDK和JRE的基本概念。

JRE(Java Runtime Environment)是Java运行时环境。它包含了Java虚拟机(JVM)和Java核心类库,提供了运行Java程序所需的最基本环境。如果你只是需要运行Java程序,而不进行开发,那么JRE就足够了。

JDK(Java Development Kit)是Java开发工具包。它包含了JRE的一切,并额外添加了开发工具,比如编译器(javac)、调试工具、打包工具等。JDK是为Java开发者准备的完整工具集。

简单来说,它们的关系是:JDK > JRE > JVM。JDK包含JRE,JRE又包含JVM,就像俄罗斯套娃一样。

历史演变

如果你之前使用过Java 8或更早版本,可能会记得当时安装JDK时会自动附带安装JRE。那个时候,我们确实可以选择只安装JRE来运行Java程序。

但是从Java 9开始,Oracle改变了Java的发行方式,不再单独提供JRE。这一变化随着模块化系统的引入而实施,使得JDK本身变得更加轻量级和模块化。

这意味着,对于Java 9及更高版本(包括目前广泛使用的JDK 11、JDK 17、JDK 21等),你只能安装JDK,因为官方已经不再提供独立的JRE包了。

实践答案

线上环境部署该如何选择?

基于上述变化,我们得出以下明确建议:

  1. 如果你使用的是Java 8或更早版本,理论上可以只安装JRE来运行jar包,这样可以节省一些磁盘空间。但对于生产环境,仍推荐使用JDK,原因下面会详述。

  2. 如果你使用的是Java 9或更高版本,那么必须安装JDK,因为官方已经不提供独立的JRE了。

  3. 对于所有生产环境,强烈推荐直接安装JDK,这已经成为行业标准做法。

为何推荐JDK?

即使对于只需要运行Java应用程序的生产环境,使用JDK也有诸多优势:

1. 故障排查和调试能力

JDK自带的工具(如jstack、jmap、jinfo等)在应用出现问题时非常有用。当需要分析内存泄漏、线程阻塞或性能问题时,这些工具是不可或缺的

想象一下,在深夜被叫醒处理线上故障,却发现没有必要的诊断工具,这将是多么令人沮丧的场景!

2. 更好的兼容性和一致性

使用JDK可以确保运行环境与开发环境完全一致,避免了因环境差异导致的不可预见问题。

3. 模块化系统的优势

从Java 9开始,你可以利用JDK的模块化特性,创建只包含必要模块的自定义运行时镜像,从而减小部署包的大小。

写在最后

回到最初的问题:Java项目线上环境部署,到底需要JDK还是JRE?

明确答案是:对于现代Java版本(9及以上),直接安装JDK,因为Oracle已不再提供独立的JRE。对于早期版本,虽然可以只安装JRE,但出于故障排查和兼容性考虑,仍推荐使用JDK

JDK不仅提供了运行环境,还带来了强大的诊断工具,这些工具在生产环境出现问题时的价值不可估量。虽然JDK比JRE占用稍多空间,但这与它带来的好处相比微不足道