0

我知道自定义 JVM 的行为可能会有所不同,我正在尝试查看我观察到的行为是否与真正的 JVM 相同。此外,我正在寻找某种方法来始终如一地使这些东西发挥作用。

我见过的最糟糕的部分是异常被 JVM 完全吃掉了。例如:

public myMethod(String test) extends Remote {
    if(test.equals("Hey"))
        doSomething()
}

我在我的代码中看到了两个响应,即为“测试”传入 null。一是它记录“NullPointerException”。没有别的,就是那根弦。

另一个是它什么都不记录。代码执行只是停止,并且在运行此代码之后什么都没有(即使调用方法周围有一个 try/catch)

此外,在异常之后,调用线程似乎永远不会继续(使这样的错误非常难以追踪)。

如果我围绕这个方法抛出一个 try/catch 并记录错误,它工作正常。

诚然,我正在使用自定义代码开发一个较旧的 JVM,所以我不希望有太多帮助,但是有没有人看到过这样的行为?也许在旧的 JVM 中?它应该通过网络抛出异常,还是应该在远程系统上打印堆栈跟踪?

将异常包装在 RemoteException 中并重新抛出它是一个合理的解决方案吗?

有什么建议么?(除了规范一个新的 JVM——这远远超出了可能的范围,甚至都不好笑)

4

1 回答 1

0

这最终成为可重现的行为。抛出的异常没有在我无权访问的中间层被捕获/重新抛出——调用我的代码的线程正在吞噬异常。

这根本不是虚拟机问题。

只要把它放进去,我就可以接受它的答案。

于 2010-06-18T18:51:10.443 回答