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。

相关推荐
程序员黑豆7 小时前
Java 注释详解:单行、多行与文档注释的完整指南
java·前端·ai编程
wuyk5558 小时前
第2章:六步换相原理全解+STM32工程实战
c语言·开发语言·stm32·单片机·嵌入式硬件
hey_sml8 小时前
JAVA每日一学---CompletableFuture中thenApply与thenCompose区别详解
java·开发语言
Doraemomo8 小时前
数据结构-环形链表
java·数据结构·链表
萧瑟余晖9 小时前
Java深入解析篇十七之SpringCloud
java·开发语言
是未才10 小时前
从输入 URL 到页面返回:DNS、路由、TLS 与 HTTP 完整链路
java·后端·计算机网络
ttod_qzstudio10 小时前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
萧瑟余晖11 小时前
Java深入解析篇十七之Spring Security
java·开发语言·spring
不老刘12 小时前
【Java入门】Java服务部署方式全景对比:从java -jar到K8s
java·kubernetes·jar
离陌在学C#14 小时前
C# 重载与重写:深入理解面向对象编程的核心概念
java·c#