场景定时任务目录增加新的定时任务,定时任务通过反射调用,验证是否需要重启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。