BZ #169: garbage collector broken on ARM build?

Status fields:

creation_ts:2012-04-27 23:34
component:vm
version:unspecified
rep_platform:All
op_sys:Linux
bug_status:RESOLVED
resolution:WONTFIX
reporter:werner-schmidt@schmidt-bachgau.de
I am currently running some evalution tests for openjdk6 on ARM embedded boards (using a
beaglebone for evaluation).
For checking the garbage collector I ran the 'GCTest', which can be found at:
http://www.herongyang.com/JVM/GC-Garbage-Collection-Test-Program.html with the command
line:
java -<jvm> -Xms2m -Xmx8m GCTest 16 1

using jamvm or zero does not show any pecularities but when I used cacao I always get
output as follows:

java -cacao -Xms2m -Xmx8m GCTest 16 1

Time   Total   Free   Free   Total   Act.   Dead   Over
sec.    Mem.   Mem.   Per.    Obj.   Obj.   Obj.   Head
0   2048   1572   76%   0   0   0   476
0   2048   1436   70%   128   128   0   484
1   2048   1304   63%   256   256   0   488
1   2048   1172   57%   384   384   0   492
2   2048   1040   50%   512   512   0   496
2   2048   908   44%   640   640   0   500
3   2048   776   37%   768   768   0   504
3   2048   644   31%   896   896   0   508
4   2048   512   25%   1024   1024   0   512
4   2048   380   18%   1152   1152   0   516
5   2048   248   12%   1280   1280   0   520
5   2048   116   5%   1408   1408   0   524
6   2860   892   31%   1536   1536   0   432
6   2860   760   26%   1664   1664   0   436
7   2860   628   21%   1792   1792   0   440
7   2860   496   17%   1920   1920   0   444
8   2860   364   12%   2048   2048   0   448
8   3944   1316   33%   2176   2176   0   452
9   3944   1316   33%   2176   2048   128   452
9   3944   1184   30%   2304   2176   128   456
10   3944   1184   30%   2304   2048   256   456
10   3944   1052   26%   2432   2176   256   460
11   3944   1052   26%   2432   2048   384   460
11   3944   920   23%   2560   2176   384   464
12   3944   920   23%   2560   2048   512   464
12   3944   788   19%   2688   2176   512   468
13   3944   788   19%   2688   2048   640   468
13   3944   656   16%   2816   2176   640   472
14   3944   656   16%   2816   2048   768   472
14   3944   524   13%   2944   2176   768   476
15   3944   524   13%   2944   2048   896   476
15   3944   388   9%   3072   2176   896   484
16   3944   388   9%   3072   2048   1024   484
16   3944   256   6%   3200   2176   1024   488
17   3944   256   6%   3200   2048   1152   488
17   5388   1568   29%   3328   2176   1152   492
18   5388   1568   29%   2176   2048   128   1644
18   5388   1436   26%   2304   2176   128   1648
19   5388   1436   26%   2304   2048   256   1648
19   5388   1304   24%   2432   2176   256   1652
20   5388   1304   24%   2432   2048   384   1652
20   5388   1172   21%   2560   2176   384   1656
21   5388   1172   21%   2560   2048   512   1656
21   5388   1040   19%   2688   2176   512   1660
22   5388   1040   19%   2688   2048   640   1660
23   5388   908   16%   2816   2176   640   1664
23   5388   908   16%   2816   2048   768   1664
24   5388   776   14%   2944   2176   768   1668
24   5388   776   14%   2944   2048   896   1668
25   5388   644   11%   3072   2176   896   1672
25   5388   644   11%   3072   2048   1024   1672
26   5388   512   9%   3200   2176   1024   1676
26   5388   512   9%   3200   2048   1152   1676
27   5388   380   7%   3328   2176   1152   1680
27   5388   380   7%   3328   2048   1280   1680
28   5388   248   4%   3456   2176   1280   1684
28   5388   248   4%   3456   2048   1408   1684
29   5388   512   9%   3584   2176   1408   1292
29   5388   512   9%   3584   2048   1536   1292
30   5388   380   7%   3712   2176   1536   1296
30   5388   380   7%   3712   2048   1664   1296
31   5388   248   4%   3840   2176   1664   1300
31   5388   248   4%   3840   2048   1792   1300
32   7316   2044   27%   3968   2176   1792   1304
33   7316   1912   26%   4096   2176   1920   1308
33   7316   1912   26%   4096   2048   2048   1308
34   7316   1780   24%   4224   2176   2048   1312
34   7316   1780   24%   4224   2048   2176   1312
35   7316   1648   22%   4352   2176   2176   1316
35   7316   1648   22%   4352   2048   2304   1316
36   7316   1516   20%   4480   2176   2304   1320
36   7316   1516   20%   4480   2048   2432   1320
37   7316   1384   18%   4608   2176   2432   1324
37   7316   1384   18%   4608   2048   2560   1324
38   7316   1252   17%   4736   2176   2560   1328
38   7316   1252   17%   4736   2048   2688   1328
39   7316   1120   15%   4864   2176   2688   1332
39   7316   1120   15%   4864   2048   2816   1332
40   7316   988   13%   4992   2176   2816   1336
40   7316   988   13%   4992   2048   2944   1336
41   7316   856   11%   5120   2176   2944   1340
41   7316   856   11%   5120   2048   3072   1340
42   7316   720   9%   5248   2176   3072   1348
42   7316   720   9%   5248   2048   3200   1348
43   7316   588   8%   5376   2176   3200   1352
43   7316   588   8%   5376   2048   3328   1352
44   7316   456   6%   5504   2176   3328   1356
44   7316   456   6%   5504   2048   3456   1356
45   7580   588   7%   5632   2176   3456   1360
45   7580   588   7%   5632   2048   3584   1360
46   7712   588   7%   5760   2176   3584   1364
46   7712   588   7%   5760   2048   3712   1364
47   7844   588   7%   5888   2176   3712   1368
47   7844   588   7%   5888   2048   3840   1368
48   7976   588   7%   6016   2176   3840   1372
48   7976   588   7%   6016   2048   3968   1372
49   8108   588   7%   6144   2176   3968   1376
49   8108   588   7%   6144   2048   4096   1376

then the app crashes with:

Exception in thread "main" java.lang.OutOfMemoryError
        at GCTest$MyObject.<init>(GCTest.java:54)
        at GCTest.myTest(GCTest.java:31)
        at GCTest.main(GCTest.java:21)

This behaviour happens both on the Angstrom build and  the Ubuntu 11.10 build of the
beaglebone

java -cacao -version indicates (on Angstrom):

java version "1.6.0_24"
IcedTea Runtime Environment (IcedTea6 1.12pre)
(6b24-1.11.1+1.11.2-devel+hg1+54ceda20a02c)
CACAO (build 1.1.0pre2, compiled mode)

This crash does not happen on the x86  version (Ubuntu 11.10) of cacao

Comment #1 by stefan@complang.tuwien.ac.at on 2012-04-28 15:57:01

Hmm, it seems to leak, but it behaves exactly the same as on x86_64. Thanks for the test
program!

Comment #2 by stefan@complang.tuwien.ac.at on 2012-10-28 11:29:02

For some reason, the GC stops invoking finalizers after a few iterations. Then it runs
out of memory.

Comment #3 by stefan@complang.tuwien.ac.at on 2012-10-29 09:48:45

That's almost exactly what is described in
http://www.hpl.hp.com/personal/Hans_Boehm/gc/bounds.html as "an embarrassing failure
scenario". I don't exactly understand what happens in this case, because to me it looks
like a GC-internal variable (GC_mark_stack_top) keeps one of the list nodes alive, which
is not how it's supposed to work.

But apart from that, it's a fundamental problem, and CACAO cannot really do anything
about that.