我们有一个在Java6上运行多年的应用程序,没有任何问题。
这是一个GUI,它与服务器通信并接收要自动打印的未经请求的消息,而且对使用Java 8有了新的要求。
自从迁移到Java8之后
PrintSystem
类(一个单独的线程,应用程序中总共有30个线程)看起来是基于查看日志文件而挂起的。打印系统调用
win32com.dll
(其运行的Java 8 32位)发送到
LPT
和
COM
港口。
通常情况下,一切正常,但会出现间歇性故障,当我们尝试捕获日志时,应用程序似乎会停止日志记录(
java.util.logging
)在最关键的时候。
我们在其中一个工作站上添加了调试信息,并且由于90%的时间内一切正常,因此无法隔离问题。
我们在日志中唯一能看到的是
印刷系统
类线程,没有响应。以及自从日志停止记录关键信息以来发生的任何时间。
更新:阅读之后:
如果没有足够强的引用,GC可能会删除日志记录。Java 8是否有可能有一个更具攻击性的GC,并且正在删除记录器?另外,代码是为Java 8重新编译的,但是它的运行方式与为Java 6(和Java 8 JVM)编译的方式有什么不同吗?
PrintSystem类不被任何其他类持有,它被引用的方式是PrintSystem.getInstance().printMessage(message),所以Java 8可能正在继承该类?
任何建议,谢谢。