jvm 如果我安装了新版本的JDK,运行Java进程会发生什么?

nr7wwzry  于 6个月前  发布在  Java
关注(0)|答案(2)|浏览(74)

我想知道如果我在Debian机器上更新JDK,运行Java进程会发生什么。答案可能对其他系统也是一样的,我只是想更明确地说明我的环境。
更新意味着新的JDK将安装在现有的JDK旁边,符号链接/usr/lib/jvm/default-java将更改为新JDK的文件夹。
更新后的文件夹结构:

  • /usr/lib/jvm/default-java -> /usr/lib/jvm/jdk1.7.0_79
  • /usr/lib/jvm/jdk1.7.0_21 # old version
  • /usr/lib/jvm/jdk1.7.0_79 # new version

正在运行的进程是否会受到此更改的影响?

edqdpe6u

edqdpe6u1#

正在运行的进程是从真实的JVM可执行文件中运行的,而不是从符号链接中运行的。
因此,它们将继续运行,但在您重新启动它们之前,它们不会切换到您刚刚安装的新JVM版本。

uqdfh47h

uqdfh47h2#

我们在JDK更新后遇到了一个巨大的问题:
更新已自动安装yum-cron(CentOS)。但它已删除旧的JDK安装(1.8.0.382 -> 1.8.0.392)。服务器上有超过100个JVM在运行旧版本。更新删除了可执行文件和标准JAR。因此JVM运行,但如果它们需要从删除的JAR中创建新类,(由类加载器加载),它们将抛出异常:

java.io.FileNotFoundException: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.382.b05-1.el7_9.x86_64/jre/lib/resources.jar:java.lang.InternalError: java.io.FileNotFoundException: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.382.b05-1.el7_9.x86_64/jre/lib/resources.jar

字符串
在JVM重新启动之前,许多功能不再可用。

ls -alF /proc/*/exe | grep java | grep "1.8.0.382" 1>processIds.log


最好将Java排除在自动更新之外。

相关问题