我想在每次调用我的方法时创建一个新的ClassLoader。所以我可以在不退出程序的情况下重新加载class。如何更新由ClassLoader加载的class的方法也是一种解决方案。我怎样才能做到这一点? 最佳答案 我在这里找到了一个很好的解释性答案:http://www.exampledepot.com/egs/java.lang/reloadclass.html重要的是有两个二进制文件夹,在我的例子中:一个用于测试用例,一个用于程序源。引用:URL[]urls=null;try{//Convertthefileobjecttoa
这个问题在这里已经有了答案:HowtoloadJARfilesdynamicallyatRuntime?(20个回答)关闭7年前。我被要求构建一个能够在运行时加载新代码(扩展)的java系统。如何在我的代码运行时重新加载jar文件?或者如何加载新的jar?显然,由于持续的正常运行时间很重要,我想添加在现有类的同时重新加载现有类的功能(如果它不会使事情变得太复杂的话)。我应该注意什么?(将其视为两个不同的问题-一个关于在运行时重新加载类,另一个关于添加新类)。 最佳答案 使用现有数据重新加载现有类可能会破坏事情。您可以相对轻松地将新代
这个问题在这里已经有了答案:HowtoloadJARfilesdynamicallyatRuntime?(20个回答)关闭7年前。我被要求构建一个能够在运行时加载新代码(扩展)的java系统。如何在我的代码运行时重新加载jar文件?或者如何加载新的jar?显然,由于持续的正常运行时间很重要,我想添加在现有类的同时重新加载现有类的功能(如果它不会使事情变得太复杂的话)。我应该注意什么?(将其视为两个不同的问题-一个关于在运行时重新加载类,另一个关于添加新类)。 最佳答案 使用现有数据重新加载现有类可能会破坏事情。您可以相对轻松地将新代
我知道这对于有经验的编码人员来说可能是一个愚蠢的问题。但是我有一个库(一个http客户端),我的项目中使用的一些其他框架/jar需要它。但它们都需要不同的主要版本,例如:httpclient-v1.jar=>Requiredbycralwer.jarhttpclient-v2.jar=>Requiredbyrestapi.jarhttpclient-v3.jar=>requiredbyfoobar.jar类加载器是否足够智能以某种方式将它们分开?很可能不是?类加载器如何处理这个问题,以防三个jar中的类都相同。加载了哪一个,为什么?Classloader是只拾取一个jar还是任意混合类
我知道这对于有经验的编码人员来说可能是一个愚蠢的问题。但是我有一个库(一个http客户端),我的项目中使用的一些其他框架/jar需要它。但它们都需要不同的主要版本,例如:httpclient-v1.jar=>Requiredbycralwer.jarhttpclient-v2.jar=>Requiredbyrestapi.jarhttpclient-v3.jar=>requiredbyfoobar.jar类加载器是否足够智能以某种方式将它们分开?很可能不是?类加载器如何处理这个问题,以防三个jar中的类都相同。加载了哪一个,为什么?Classloader是只拾取一个jar还是任意混合类
我现在不在IDE面前,只是查看API规范。CodeSourcesrc=MyClass.class.getProtectionDomain().getCodeSource();if(src!=null){URLjar=src.getLocation();}我想确定一个类来自哪个JAR文件。是这样的吗? 最佳答案 是的。它适用于除引导类加载器加载的类之外的所有类。另一种判断方法是:Classklass=String.class;URLlocation=klass.getResource('/'+klass.getName().repla
我现在不在IDE面前,只是查看API规范。CodeSourcesrc=MyClass.class.getProtectionDomain().getCodeSource();if(src!=null){URLjar=src.getLocation();}我想确定一个类来自哪个JAR文件。是这样的吗? 最佳答案 是的。它适用于除引导类加载器加载的类之外的所有类。另一种判断方法是:Classklass=String.class;URLlocation=klass.getResource('/'+klass.getName().repla
除了一些非常模糊的高级定义,例如“摆脱你的PermGen问题”(whichitdoesn't,顺便说一句)。我看过Sun/Oracle的网站,甚至是theoptionslist实际上并没有说明它的作用。根据标志的名称,我猜测CMS垃圾收集器默认情况下不会卸载类,并且此标志将其打开-但我不能确定。 最佳答案 更新此答案与Java5-7相关,Java8已修复此问题:https://blogs.oracle.com/poonam/about-g1-garbage-collector,-permanent-generation-and-me
除了一些非常模糊的高级定义,例如“摆脱你的PermGen问题”(whichitdoesn't,顺便说一句)。我看过Sun/Oracle的网站,甚至是theoptionslist实际上并没有说明它的作用。根据标志的名称,我猜测CMS垃圾收集器默认情况下不会卸载类,并且此标志将其打开-但我不能确定。 最佳答案 更新此答案与Java5-7相关,Java8已修复此问题:https://blogs.oracle.com/poonam/about-g1-garbage-collector,-permanent-generation-and-me
为什么在Java中做到这一点如此困难?如果您想拥有任何类型的模块系统,您需要能够动态加载JAR文件。有人告诉我有一种方法可以通过编写自己的ClassLoader来做到这一点,但是对于应该(至少在我看来)像使用JAR调用方法一样简单的事情,这需要做很多工作文件作为它的参数。对执行此操作的简单代码有什么建议吗? 最佳答案 难的原因是安全性。类加载器是不可变的;您不应该在运行时随意添加类。实际上,我对使用系统类加载器感到非常惊讶。以下是制作自己的子类加载器的方法:URLClassLoaderchild=newURLClassLoader(