java – 垃圾收集器是否会删除静态最终对象?

前端之家收集整理的这篇文章主要介绍了java – 垃圾收集器是否会删除静态最终对象?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我以前在 Java中的服务中使用了自定义对象,它总是在后端运行,我有时会收到带有跟踪的Bug报告,这些跟踪显示NULL_POINTER_EXCEPTION,因为垃圾收集器已经破坏了对象.由于我拥有所有高端设备,我无法测试这是否会导致静态最终对象被垃圾收集器破坏?

解决方法

Does a static final Object ever get deleted by Garbage Collector?

我可以想到三种可能发生这种情况的情况:

>使用静态加载类的类加载器变得无法访问.但这只能在你的代码达到一个没有任何东西可能注意到该对象是GC的点之后发生!
>有些东西使用了“讨厌的反射技巧”来为静态最终赋予null. (是的,可以做到……)
>有些东西巧妙地破坏了堆;例如一些有害的JNI / JNA代码.

请注意,由于您(显然)正在观察GC’d对象的效果,因此它不能是类加载器为GC的直接结果.必须要做的其他事情才能使类加载器和最终静态成为GC’…如果这就是实际发生的事情.

实际上,我怀疑你的问题与GC无关.相反,我怀疑由于未记录的未经检查的异常,您的服务正在死亡.除“main”之外的线程上未捕获的异常的默认行为是静默忽略它们.

我建议您检查您的服务线程是否正在记录所有异常,可以使用run()方法中的catch,也可以使用“未捕获的异常处理程序”.

原文链接:https://www.f2er.com/java/128611.html

猜你在找的Java相关文章