有点愚蠢的问题。我已经环顾四周,看到除非您编写自定义JVM,否则无法强制卸载类。然而,我一直在想,是否可以通过使用Unsafe类来手动清空类对象的地址,从而理论上“卸载”这个类。但是,我确实会预测,如果带有所述类的对象仍在内存中,则会出现问题,因此要么立即崩溃JVM,要么将对象的类默认为Object.class或为空。有没有办法通过使用sun.misc.Unsafe类强制卸载类?
0
A
回答
1
但是,我一直想知道是否可以这样做,通过使用不安全类和手动清空类对象的地址,从而理论上“卸载”类。
这是非常不可能的,你可以找到加载类的状态被引用的所有地方。如果你没有找到它们,垃圾收集器不会认为它是不可达的,卸载不会被触发。如果你(以某种方式)使用Unsafe
来粉碎(仍然)可到达的类的状态,那么最终的结果很可能是硬件JVM崩溃。
但是,我确实会预料到,当具有所述类的对象仍在内存中时会出现问题,因此要么立即崩溃JVM,要么将对象的类默认为Object.class或null。
前者很可能。
有没有办法来强制使用sun.misc.Unsafe类卸载类?
据我所知,
号总之,不要尝试这样做。它的概率“工作”是微乎其微......
显然,你的动机是......
目前我有问题试图让班正常卸载和希望强制卸载上述类的方法。
你应该要做的是弄清楚是什么阻止类卸载。根本原因很可能是您仍然在某处引用了到类加载器定义的某个对象或类。消除这些引用,并且类应该卸载。 (从概念上讲,类和它的所有实例之间有一个硬的,双向的“引用”,以及类加载器和它定义的所有类之间的硬性双向“引用”,只有一个外部链接到实例或类或类加载器)足以禁止整个网络对象的gcing/unloading。)
相关问题
- 1. 有没有办法强制VB6 IDE卸载库?
- 2. 有没有办法强制类在运行时加载
- 3. 有没有办法强制类加载器加载一个包,即使它们的类没有被加载?
- 4. 有没有办法*真的*强制pydev使用强制内建?
- 5. 有没有办法通过编程创建java类类型?
- 6. 有没有办法强制启用quicktime?
- 7. 有没有办法强制一些方法的类没有指定参数?
- 8. 有没有办法强制Socket通过HTTP加载跨域策略?
- 9. 有没有办法使用composer来卸载dev依赖项?
- 10. 有没有办法强制使用Checkstyle枚举类型命名约定?
- 11. 有没有办法强制php在当前命名空间中使用类?
- 12. 强制类加载和卸载(ROR)
- 13. 有没有办法强制cin提交?
- 14. git merge:有没有办法强制--squash?
- 15. 有没有办法强制复制?复制没有覆盖提示,使用Windows?
- 16. 有没有办法强制所有的Web请求通过代理?
- 17. 有没有办法强制GIF加载Glide是非动画
- 18. 有没有办法强制MonoDevelop构建/加载程序集?
- 19. 在Haskell中,有没有办法强制强制多态呼叫?
- 20. 有没有办法调用“New”类?
- 21. 有没有办法强制从基于类的FormView方法immidiate HttpResponse(例如get_initial)?
- 22. 有没有办法使用扩展类类型的Java集合?
- 23. 有没有办法通过使用JavaScript的类名来获取元素?
- 24. 有没有办法通过使用jQuery FastLiveFilter下拉菜单来筛选类别?
- 25. 有没有办法从卸载程序文件中禁用autouninstaller?
- 26. 有没有办法强制CoreImage使用GPU?
- 27. 有没有办法强制GLUtessellator只使用GL_TRIANGLES?
- 28. 有没有办法强制immutable.js使用字符串ID?
- 29. 有没有办法强制Show使用Datagrid?
- 30. 有没有办法强制jdbc连接使用TCP?
你有用例还是这只是一个普遍的问题? –
如果您完全控制环境,请使用单独的类加载器来加载该类或JAR,然后卸载类加载器(可能包括对System.gc();')的调用请参见http:// stackoverflow。com/questions/148681 /卸载在java中的类 –
我目前有问题试图让类正常卸载,并希望强制卸载上述类的方式。编辑:刚刚看到菲利普的答案。我有一种感觉,我将不得不使用自定义类加载器或某种类型。如果可能的话,我仍然希望回答这个问题,并说明是否显然不可能。 – Cirno