我以前在
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,也可以使用“未捕获的异常处理程序”.