【发布时间】:2010-12-16 20:32:54
【问题描述】:
几周前我问过这个问题,但我仍然遇到问题并且我有一些新的提示。原来的问题在这里:
Java Random Slowdowns on Mac OS
基本上,我有一个 Java 应用程序,它可以将作业拆分为独立的部分并在单独的线程中运行它们。线程没有同步或共享内存项。它们共享的唯一资源是硬盘上的数据文件,每个线程都有一个打开的文件通道。
大多数时候它运行得非常快,但偶尔它会无缘无故地运行得很慢。如果我将 CPU 分析器附加到它,那么它将再次开始快速运行。如果我拍摄 CPU 快照,它会说它大部分时间都花在“自我时间”中,该函数除了检查一些(非共享非同步)布尔值之外什么都不做。我不知道这怎么可能是准确的,因为 1,它没有任何意义,以及 2,附加分析器似乎可以将线程从它们所处的任何模式中剔除并解决问题。此外,无论它运行快还是慢,它总是完成并提供相同的输出,并且它永远不会降低总 cpu 使用率(在这种情况下约为 1500%),这意味着线程没有被阻塞。
我尝试了不同的垃圾收集器,不同的内存空间大小,将数据输出写入非 RAID 驱动器,并将所有数据输出放在线程中,将主工作线程分开。
有人知道这可能是什么问题吗?会不会是操作系统(OS X 10.6.2)?我无法在 Windows 机器上复制它,但我没有具有类似硬件配置的机器。
【问题讨论】:
-
你能在缓慢的时间测量页面错误吗?也许是磁盘。
-
我不认为这是分页。活动监视器显示没有页面活动,并且进程被分配了足够的内存。在这种情况下,我的机器有 32G 的内存,我分配了 16G 的最大堆大小,它最多使用大约 10G。
标签: java multithreading macos random operating-system