【发布时间】:2018-07-18 23:16:18
【问题描述】:
我修补了java.lang.ref.Reference 类以在调用get() 时调用自定义本机方法。修补的类被添加到引导类路径中。
当我启动一个示例程序时,我看到很多打印输出来自我的本机方法(如预期的那样),因为 JDK 内部使用了很多 References。
奇怪的行为始于我的main 方法。我所做的只是为一个对象创建一个WeakReference,删除强对象并调用get()。无论出于何种原因,我添加的本机方法似乎都没有在运行模式下被调用,并且我没有得到任何打印输出或本机内部发生的其他事件。
如果我在调试模式下启动程序,一切都会按预期工作,即调用本机方法。
如果我将WeakReference 更改为SoftReference,它总是可以工作,在正常运行模式下也是如此。
我什至尝试添加其他代码(例如将System.out.println 添加到get()),但这也没有用。在非调试模式下运行时,我的WeakReference 的打印以某种方式停止。在调试中它总是有效的。
有时我什至会在我的主服务器关闭期间从Finalizers 收到很多事件/打印输出。所以看起来Reference 类的行为确实有所不同。
【问题讨论】:
-
如果您包含一些代码示例,它可能会很有用。
标签: java debugging reference jvm