gpt4 book ai didi

java - 动态类重新加载仅在 Debug模式下有效,为什么/如何真正起作用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:13:24 42 4
gpt4 key购买 nike

我有一个棘手的问题。

我的 java 程序在循环中做这样的事情:

循环:

  1. 将带有已编译 java 类的外部文件读取到 byte[] 数组中。

  2. 创建我自己的类加载器的新实例。

  3. setbytes 从读取的文件到这个类加载器实例。

  4. 使用创建的类加载器从外部文件创建类对象的新实例。

  5. 调用创建对象的任何方法。

问题出在哪里。

  1. 当我在 Debug模式下运行这个程序时,它的行为与我预期的一样,所以如果外部文件改变,类加载器加载新版本的类并执行新版本(如果文件没有改变,它当然也会加载旧版本) .

  2. 但是当我在非 Debug模式下运行这个程序时,它总是执行旧版本,尽管读取的文件已经更改。

也许对类加载问题和 JVM 行为有更深入了解的人可以向我解释这种行为。

最佳答案

这是发生的情况的简化版本:

  1. JVM 将类和其他资源从 CLASSPATH 环境变量中指定的目录或 Jar 加载到类路径中一次(除非在 Debug模式下运行)。
  2. 为此,它使用类加载器
  3. 一旦资源被 ClassLoader 实例加载,它就会保留在内存中,直到 ClassLoader 被垃圾回收。

Debug模式是JVM提供的一种特殊模式,类加载器更加努力地为您提供最新版本的资源。

关于java - 动态类重新加载仅在 Debug模式下有效,为什么/如何真正起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10581127/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com