Hi, Krishna.

The current timeout for this test is 1000 seconds, which is 16 minutes.
I guess such timeout should be enough for everything which is done in this test.

BTW there is no Disposer thread in the stack, it is also strange that most of 
the threads in the stack thread are blocked.

See some comments inline.

On 31/10/2018 07:58, Krishna Addepalli wrote:
Hi All,

Please review a fix for JDK-8198003: 
https://bugs.openjdk.java.net/browse/JDK-8198003

Webrev: http://cr.openjdk.java.net/~kaddepalli/8198003/webrev00

This test tries to create a huge(20000) files and show them in JFileChooser, which 
inturn creates 20000 instances of File class. This internally has a reference to 
native file handle through COM object (IShellFolder), which is added to 
java2d.Disposer, to be disposed after use. The test then tries to fill the memory 
and thereby tries to check if the File records are deleted by GC. It repeats this 
test about 20 times for each of the installed L&Fs. So the problem essentially 
boils down to how fast the Disposer thread can clean up the objects, which may not 
always obey the time limit constraints.

The test uses java2d.Disposer as a way to delay next iteration and to not 
overload the system, the test assumes that if its own disposerRecord is 
executed then it is likely all previous objects are collected. Instead of this 
mechanics we can use simple sleep(), but I think that the root cause is an 
absent of Disposer thread, which means that our disposerRecord will not be 
executed, and our test will hang forever.

It is also strange that the "Swing-Shell" thread which should dispose the 
native IShellFolder is also blocked and do nothing.


On Mac, the test always throws OOME – while running for Aqua L&F. Now the difference 
between the other L&Fs and Aqua is that, it in Aqua L&F, each File instance is 
wrapped inside SortableFile class, which are then presented in the JFileChooser, to provide 
quick sorting of the files. So, this makes it a tad bit slower in Mac to release the File 
objects.

The solution is three fold:

1.After each run, make sure System.gc() is called to make sure that some memory 
is available for subsequent run. Also, a Global Exception Handler is registered 
which does another round of GC calls to make sure that the memory is not run 
out of.

2.Reduce the number of times the test runs (down from 20 to 10), since running 
additional number of times only increases the test case runtime without any 
additional information.

3.Create and Delete files parallelly – although this doesn’t have a big impact, 
it does help to provide more time for the actual test to run.

Even with these changes, the test fails sometimes on Mac while running Aqua L&F, so 
this L&F can be skipped.

Thanks,

Krishna



--
Best regards, Sergey.

Reply via email to