私は、誰かがサーバー スケジューリング タスクを実行するためにスイング タイマー スレッドを使用していたレガシー プロジェクトに取り組んでいます。このコードはスイング アプリではなく、サーバー側の Java です。私はこれが良い考えではないことを知っており、同じことを行うための受け入れ可能な方法を知っています. 問題は、負荷のない状態で数分ごとに長い VM の一時停止が発生することです。verbose gc を有効にして、ガベージ コレクションではないと判断しました。これらの一時停止中にスレッド ダンプを実行すると、以下のダンプが得られます。この AWTAutoShutdown がこの一時停止を引き起こしている可能性があるかどうか、または以下に示す activateBlockerThread を実行するときに何をしているのか、何か考えはありますか?
"AWT-Shutdown" prio=10 tid=0x00007fed5802d000 nid=0x2ef1 in Object.wait() [0x00007fed53e5d000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x000000031e910b90> (a java.lang.Object)
at java.lang.Object.wait(Object.java:485)
at sun.awt.AWTAutoShutdown.run(Unknown Source)
- locked <0x000000031e910b90> (a java.lang.Object)
at java.lang.Thread.run(Unknown Source)
"TimerQueue" daemon prio=10 tid=0x00007fed58597000 nid=0x2a56 in Object.wait() [0x00007fed54737000]
java.lang.Thread.State: BLOCKED (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x000000031e910b90> (a java.lang.Object)
at java.lang.Object.wait(Object.java:485)
at sun.awt.AWTAutoShutdown.activateBlockerThread(Unknown Source)
at sun.awt.AWTAutoShutdown.notifyThreadBusy(Unknown Source)
- locked <0x000000031e910b90> (a java.lang.Object)
- locked <0x000000031e9a60c8> (a java.lang.Object)
at java.awt.EventQueue.postEvent(Unknown Source)
at java.awt.EventQueue.postEventPrivate(Unknown Source)
- locked <0x000000031e90eb90> (a java.awt.EventQueue)
at java.awt.EventQueue.postEvent(Unknown Source)
at java.awt.EventQueue.invokeLater(Unknown Source)
at javax.swing.SwingUtilities.invokeLater(Unknown Source)
at javax.swing.Timer$1.run(Unknown Source)
at javax.swing.Timer$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at javax.swing.Timer.post(Unknown Source)
- locked <0x000000031e9af7e0> (a javax.swing.Timer)
at javax.swing.TimerQueue.postExpiredTimers(Unknown Source)
- locked <0x000000031e90ce60> (a javax.swing.TimerQueue)
at javax.swing.TimerQueue.run(Unknown Source)
- locked <0x000000031e90ce60> (a javax.swing.TimerQueue)
at java.lang.Thread.run(Unknown Source)