有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java什么会导致JVM锁定机器的鼠标点击和键盘输入?

我在Linux机器(RHEL 5)上运行Java 6,我的程序偶尔会锁定计算机的输入。鼠标点击或键盘敲击都不起作用。奇怪的是,鼠标光标可以移动,CTRL+ALT+F2命令也可以工作(尽管它不会显示终端)

使用topjvisualvm我看不到内存泄漏或进程中的其他问题。然而,解除计算机冻结的唯一方法是从另一台计算机上ssh并终止java进程。这种行为的原因可能是什么

我偶尔可以通过降低内存上限来复制它。似乎僵局可能就在这里:

"Java2D Disposer" daemon prio=10 tid=0xae7d6800 nid=0x4451 in Object.wait() [0xae6ad000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0xb3253070> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
    - locked <0xb3253070> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
    at sun.java2d.Disposer.run(Disposer.java:127)
    at java.lang.Thread.run(Thread.java:662)

共 (2) 个答案

  1. # 1 楼答案

    您描述的症状在我看来似乎是一个未发布的X11键盘&;抓住指针。这很容易由错误或无响应的GUI引起->;X11层。仔细检查GUI线程

  2. # 2 楼答案

    最有可能的情况是,您正在事件分派线程上执行一个长时间运行的任务,从而阻止它为用户输入事件提供服务,从而使UI没有响应

    您可以通过运行jstack或JConsole并查看“AWT EventQueue”的堆栈跟踪来验证这一点

    另一种选择是,您正在执行合法的UI任务,但底层代码效率低下。例如,您可能已经定义了一个包含1000000行的JTable,并将下划线TableModel基于一个LinkedList,从而导致每行具有O(n)访问权限