我在带有 sun 热点 java 6 的 Ubuntu 12.04 上使用 Eclipse Indigo (3.7.x)。
Eclipse 经常冻结(没有特定的模式,只是随机的)。
Ubuntu 系统分析器将进程状态显示为 100% cpu(1 个核心完全占用 - 有时显示为 96% 或 104%)并以 futex_wait_queue_me 作为等待通道休眠。我可以从中推断出某种循环,使 1 个核心忙但什么也不做。
每次 Eclipse 冻结时,我都会使用 Visualvm 进行线程转储。每次,处于可运行状态的线程都会在堆栈顶部显示以下类/方法
"main" prio=10 tid=0x00007f490c008000 nid=0xe4b runnable [0x00007f4913aea000]
java.lang.Thread.State: RUNNABLE at
org.eclipse.swt.internal.gtk.OS._gtk_tree_store_set(Native Method) at
org.eclipse.swt.internal.gtk.OS.gtk_tree_store_set(OS.java:11841) at
org.eclipse.swt.widgets.TreeItem.setImage(TreeItem.java:1613)
OS.java:11841 处的行如下(从 grepcode.com 浏览)
_gtk_tree_view_column_set_cell_data_func(tree_column, cell_renderer, func, func_data, destroy);