On Tue, 21 Apr 2026 04:01:30 GMT, SendaoYan <[email protected]> wrote:
> Hi all, > > Test com/sun/jdi/FinalizerTest.java intermittent fails. This is because > arraylist holdAlot do not clear or set as null before recliam heap memory by > invoke System.gc. This PR add arraylist.clear() before call System.gc() to > avoid OOME in the senond System.runFinalization(). > > The first System.runFinalization() has a synchronize bug. > System.runFinalization() run in another low priority Finalizer thread. In the > main thread maybe read variable finalizerRun before Finalizer thread change > it. So waitForAFinalizer will run into whille(true) allocation loop > sometimes. This PR add a countdownlatch synchronize to make sure main thread > read the finalizerRun value after Finalizer thread write it. > > This PR also remove the unused variable and optimize the imports, and add > -Xmx256M to debuggee jvm process, this will make debuggee throw OOME steady > in large physical memory machine. > > Before this PR, test failure probability about 1/30. After this PR test run > 3k times and all passed. > > --------- > - [x] I confirm that I make this contribution in accordance with the [OpenJDK > Interim AI Policy](https://openjdk.org/legal/ai). test/jdk/com/sun/jdi/FinalizerTest.java line 99: > 97: } > 98: try { > 99: while(true) { Would `while (!finalizerRun) {` work here? It could save some execution time if the BigObject finalized earlier. test/jdk/com/sun/jdi/FinalizerTest.java line 108: > 106: System.gc(); > 107: } > 108: holdAlot.clear(); Probably, the both `holdAlot.clear(); System.gc();` can be put into `finally {...}` section (unless you intentionally call it twice in case of OOME). ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/30829#discussion_r3115069583 PR Review Comment: https://git.openjdk.org/jdk/pull/30829#discussion_r3115060782
