Java不重启加载新的class文件

场景定时任务目录增加新的定时任务,定时任务通过反射调用,验证是否需要重启java进程,经验证可行,总结如下:

Java 类加载行为

1. Classpath 固定

  • JVM 启动时确定 ClassLoader 的加载路径(目录或 jar),运行中不会自动变化。
  • 新增的目录需要在 classpath 中才能被加载。

2. 懒加载

  • 类只在第一次使用(Class.forName 或实际引用)时才加载。
  • 启动时不会把目录里所有 class 全部加载到内存。

3. 加载失败

  • 第一次找不到类(ClassNotFoundException)不会被永久锁定。
  • 下一次尝试加载时,如果 classpath 中已有文件,ClassLoader 会重新尝试并可以成功。

4. 加载成功

  • 一旦成功加载,Class 对象会常驻内存。
  • 同一个 ClassLoader 下,同名类永远使用内存中的 Class 对象,不会再去读取磁盘。
  • 除非重启 JVM 或换 ClassLoader,否则无法重新加载或更新类。

5. 动态新增任务结论

  • 未加载过的 class → 可以直接被加载,无需重启(前提:目录在 classpath 中)。
  • 已加载过的 class → 无法重新加载,修改文件无效。

6. 核心一句话总结

类加载是懒加载的,未加载类可以动态加载,已加载类永久驻内存;JVM 不会监听目录变化,想热更新已加载类必须换 ClassLoader 或重启 JVM。

相关推荐
code2cat32 分钟前
Java工具篇之Maven:从pom.xml到测试通过的JAR
xml·java·maven
wuminyu7 小时前
JVM规范学习总结:解释器与JIT编译器如何处理JVM字节码
java·linux·c语言·jvm·c++
txxzjmzlh7 小时前
SpringBoot 配置⽂件
java·spring boot·spring
小徐不徐说7 小时前
序列化与反序列化:把 C++ 对象可靠地保存下来
开发语言·数据库·c++·php
ragnwang8 小时前
Notes: Python pybind11 import C++ module
开发语言·c++·python
Wang's Blog8 小时前
Java 项目实战: 交友项目 - 搜索附近的功能概述和分析
java·开发语言·交友
骑着蜗牛撵大象3278 小时前
大模型 Agent 的沙箱护栏:gVisor 隔离、出口白名单与审计闭环
java·开发语言·jvm·安全·agent沙箱·gvisor·microvm
独泪了无痕8 小时前
Hutool之LocalDateTimeUtil:让时间间隔操作如虎添翼
java
Dxy12393102169 小时前
JS DES 加密详解
开发语言·javascript·arcgis
充值内卷9 小时前
我给桌面加了个鱼缸:C++ 写后端,WebView2 里养一座 Three.js 小岛
开发语言·javascript·c++