Java应用程序在win32上工作正常但在win64上没有

时间:2013-12-09 12:10:41

标签: java multithreading windows-server-2008 32bit-64bit

我是Java的新手,我有这个由别人开发的应用程序,它有一些问题。 这个Java应用程序在windows xp 32位上运行良好,但在64位Windows 2008 R2服务器上运行时有一个延迟。我已要求客户确保他们正在运行32位版本的JRE。我已经检查了应用程序的跟踪,并且应用程序在调用synchronized块时始终存在问题。此同步块将数据添加到队列中,然后由其他进程拾取该队列。我已经检查了跟踪,如果其他进程正在使用该块,但事实并非如此。唯一令人困惑的部分是同一个应用程序在Windows XP 32位上运行完美。

在谷歌上搜索后,我发现win64中存在线程问题

帮助我。

1 个答案:

答案 0 :(得分:0)

这不是一个答案,但它可能会有所帮助,而不仅仅是评论:

你的64位机器很可能拥有比32机器更多的内核,这使得两个或更多线程更有可能同时运行,并且32上永远或很少出现的任何同步问题都会很快出现此外,较新的机器往往比旧机器执行更多的指令。这两种类型都会对它们进行重新排序。 (此外,编译器经常对代码进行重新排序。)因此64开始时会更糟糕,当你投入更广泛,真实的多线程时,问题就会成倍增加。

(这可以用另一种方式工作:多核机器倾向于以可预测的顺序运行线程,其中单个核心机器可以等待很多分钟来运行您预期会立即执行的内容。)

我经常发现修复bug的最好方法是盯着代码并确保一切正确。 (如果您知道 时,这种情况会更好。)如果不这样做,您需要记录仅在有用时打印出来的消息(很难排序)其中十亿)。你似乎可以轻松地复制你的问题(这几乎让我觉得它可能根本不是一个多线程问题),这应该让它更容易理解。