classloader相关内容
我经常遇到这样一个问题,即我必须在多次调用活动之间保留状态(即经历几个 onCreate()/onDelete() 循环).不幸的是,Android 对这样做的支持真的很差. 作为保存状态的一种简单方法,我认为由于类仅由类加载器加载一次,因此在静态 Bundle 字段中存储在多个活动实例之间共享的临时数据是安全的. 然而,偶尔,当实例 A 创建静态包并在其中存储数据,然后被销毁,并且实
..
好吧,假设我有一个看起来像这样的类: public class SignupServlet extends HttpServlet {私有静态最终记录器SERVLET_LOGGER=COMPANYLog.open(SignupServlet.class);私有静态最终 ExceptionMessageHandler 处理程序 = 新 ExceptionMessageHandler();私有静态最
..
我试图在运行时编译和加载一个类,但不知道该类的包.我确实知道该类应该遵守接口和源的位置(以及类名).我正在尝试以下操作: /* 编译源 */File root = new File("scripts");File sourceFile = new File(root, "Test.java");JavaCompiler 编译器 = ToolProvider.getSystemJavaCompil
..
可能的重复: “eval”在 Scala 中 我知道 scala 是一种编译语言,但我也知道我可以将类动态加载到 jvm 中,并且我可以在运行时调用 scala 编译器,最后但并非最不重要的是,我也有一个很棒的 repl,所以有scala 作为脚本语言应该是可能的. 所以我需要运行一些任务: 简单解释: val src = """ println("Hello World")
..
为什么 use-context-classloader 默认设置为 true? 为什么 Clojure 不使用当前的类加载器? 解决方案 您可以通过将 clojure.lang.Compiler.LOADER 设置为类加载器来覆盖其行为即. final ClassLoader ccl= ClojurePlugin.class.getClassLoader();clojure.lan
..
我一直在阅读代码和文档,试图了解 clojure 中的类重新加载是如何工作的.根据许多网站,例如 http://tutorials.jenkov.com/java-reflection/dynamic-class-loading-reloading.html ,每当您加载一个类时,您基本上都会获得字节码(通过任何数据机制),将字节码转换为类 Class 的实例(通过defineClass),然后通
..
我想在运行时替换一些方法的内容. 我知道我可以使用 javassist 来做这件事,但它不起作用,因为我想增强的类已经被系统 classLoader 加载了. 如何在运行时替换方法的内容?我应该尝试卸载课程吗?我怎样才能做到这一点 ?我看到这是可能的,但我不知道如何去做. 如果可能,我想避免为此使用外部库,我想自己编写代码. 更多信息:- 我想增强的类包含在一个框架中(在一
..
当我的 Web 应用程序依赖的其中一个 jar 尝试从 jar 中加载属性文件时,我遇到了问题.这是jar中的代码. 静态{Properties props = new Properties();尝试{props.load(ClassLoader.getSystemResourceAsStream("someProps.properties"));} catch (IOException e){
..
我想动态加载 JAR,直接用于内存. 比如说,我有一个包含 JAR 的缓冲区,我想加载 JAR 中的所有类,或者至少列出 JAR 中存在的所有文件.(类、图像等...). 例如,如果我加载的第一个类依赖于第二个类,我该怎么办?java知道如何处理吗?还是我自己来处理? 解决方案 既然你说“至少列出 JAR 中存在的所有文件",让我们从这个相当简单的任务开始. 假设,你的 JarF
..
我刚刚解决了另一个 *I-though-I-was-using-this-version-of-a-library-but-apparently-my-app-server-has-already-loaded-an-older-version-of-this-library-*issue(叹气). 有人知道验证(或监控)您的应用程序是否可以访问所有适当的 jar 文件或加载的类版本的好方法
..
我在其他地方找不到这个问题的明确答案,所以我会在这里试试: 是否有某种方式(程序化的或其他的)可以获取应用程序类加载器按照加载顺序加载的 JAR/类的列表?应用程序类加载器是指在应用程序服务器(WLS、WAS、JBoss...)中加载 EAR 应用程序的类加载器,但显然,它适用于任何类加载器. 所以,概括地说,我想知道的是指定类加载器加载的 JAR 的列表和顺序.不是单个类,通过调用
..
是否有可用于从 InputStream 加载类的 ClassLoader 实现? 我正在尝试将具有 InputStream 的 JAR 加载到新的 ClassLoader 中. 解决方案 这不太可能,因为如果您尝试自己动手,就会发现.您将无法随机访问 InputStream 来查找请求的类,因此您必须将内容缓存在内存或文件系统中. 如果缓存在磁盘上,只需使用 URLClassL
..
我对 Java 还比较陌生,所以请耐心等待. 我的问题是我的 Java 应用程序依赖于两个库.我们称它们为库 1 和库 2.这两个库共享库 3 的相互依赖关系.但是: 库 1 需要库 3 的版本 1. 库 2 需要库 3 的第 2 版. 这正是 JAR 地狱(或至少其变体之一)的定义.如链接中所述,我无法在同一个类加载器中加载第三个库的两个版本.因此,我一直试图弄清楚是否可以在
..
有没有办法确定在运行时从哪些 JAR 加载哪些类? 我敢肯定我们以前都经历过 JAR 地狱.我在解决项目中的 ClassNotFoundExceptions 和 NoClassDefFoundErrors 问题时遇到了很多问题.我想避免在 JAR 中查找类的所有实例,并避免对代码使用消除过程,从而导致 CNFE 找到罪魁祸首. 任何分析或管理工具都会为您提供此类信息吗? 这个问题
..
我的 Java 应用程序有一个插件系统.我使用 URL 类加载器调用外部类.当我的应用程序作为类文件运行时,以及当我的应用程序以 JAR 形式运行时,这部分都运行良好.我遇到的问题是,插件文件可以很好地运行自己的独立代码,但是它们创建了一个 JPanel.当我尝试将该 JPanel 添加到主应用程序类中的 JPanel 时,我得到一个引用主类的空指针异常.(com.cpcookieman.app.
..
这是一个常见的问题.我使用了 2 个库 A.jar 和 B.jar,它们依赖于同一个 jar 的不同版本. 假设在运行时我需要 THIS.x.x.x.jar MY.jar->A.jar ->这个.1.0.0.jar->B.jar ->C.jar ->这个.5.0.0.jar 我可以根据其依赖项编译特定的 jar (A.jar/B.jar),但在运行时我只需要加载 1 个版本.哪一个? 仅加
..
到目前为止,我看到的自定义类加载器示例涉及对 URLClassLoader 进行子类化,并使用该特定实例加载资源中的类. 我曾尝试寻找替代方法来替换 SystemClassLoader,但徒劳无功,以便我的 ClassLoader 可以查询不在类路径中的类. 我尝试了 Thread.currentThread().setContextClassLoader,但它似乎不起作用. 有
..
似乎不可能按照 Ant 或 Webstart 的要求从自定义类加载器使用 javax.tools.ToolProvider:http://bugs.sun.com/view_bug.do?bug_id=6548428 javax.tools.ToolProvider.getSystemJavaCompiler() 将 javax.tools.JavaCompiler 加载到 URLClass
..
我在 Glassfish 上部署了一个应用程序.随着时间的推移,加载的类数量攀升至数百万,而我的 permgen 似乎也在增加. 为了帮助排除故障,我在 jvm 参数中添加了以下内容.-XX:+PrintGC详细信息-XX:+TraceClassUnloading-XX:+TraceClassLoading 现在在查看输出时,我看到一遍又一遍地加载相同的类.基本上每次调用 Web 服务
..
我们正在创建多个子类加载器,以将多个子应用程序加载到 Java 应用程序“容器"中,从而对热部署进行原型设计.当特定类加载器的类路径发生变化(即添加、删除、更新 jar)时,旧的类加载器将被丢弃(未引用),并为新的 jar 类路径创建一个新的类加载器. 更新类路径后,触发热部署,我们进行了堆转储.堆转储(使用内存分析器)表明旧的类加载器没有被垃圾收集.父类加载器中的某些类正在缓存旧的类加载器
..