相关疑难解决方法(0)

如何在执行GroovyShell后撤消元类更改?

例如,如果我执行修改String元类的Groovy脚本,则添加方法foo()

GroovyShell shell1 = new GroovyShell();
shell1.evaluate("String.metaClass.foo = {-> delegate.toUpperCase()}");
Run Code Online (Sandbox Code Playgroud)

当我在那之后创建一个新的shell并执行它时,更改仍然存在

GroovyShell shell2 = new GroovyShell();
Object result = shell2.evaluate("'a'.foo()");
Run Code Online (Sandbox Code Playgroud)

有没有办法在执行GroovyShell后撤消所有元类更改?我试过了

shell1.getClassLoader().clearCache();
Run Code Online (Sandbox Code Playgroud)

shell1.resetLoadedClasses();
Run Code Online (Sandbox Code Playgroud)

但这没有改变.

groovy metaprogramming

10
推荐指数
1
解决办法
2837
查看次数

沙盒用于记忆

Java应该没有内存泄漏,但它仍然可能.当我的程序有内存泄漏时,我可以修复它(我希望).但是当一些第三方包装有它时我该怎么办?几乎没有什么,除了不使用这个包.

还有其他解决方案吗?我喜欢沙箱的想法.你被允许在某个区域内做任何你想做的事情而你"身体上"没有能力打扰你的盒子之外的其他人.有没有办法在Java中为内存使用创建这样的沙箱?想象一下=为内存使用创建沙箱,允许一些包做它做的任何事情,取结果并删除这个沙箱,里面留下任何垃圾!没有GC的并发症,没有清洁或处理内存.只需删除并忘记它.

有办法吗?

java memory memory-leaks

5
推荐指数
1
解决办法
355
查看次数

标签 统计

groovy ×1

java ×1

memory ×1

memory-leaks ×1

metaprogramming ×1