From: Sean C. <m94...@ma...> - 2008-03-28 08:17:04
|
Eliot Moss wrote: > > Sean -- I'm not sure if you're asking "In the built-in refcount collector, > when > does it trigger GC?" or "If I build my own refcount collector, when > *should* it > trigger GC?", but the answer is probably not all that different. > Yes, I want to ask about the "build-in refcount collector" in MMTK of JikesRVM-2.9.1. When I use FastAdaptiveRefcount configuration to run "_201_compress" of SPECjvm98, there is always a problem about "out-of-memory" error. For example: I am using 100MB, 128MB, and 150MB. [root@sepc08 cdrom]# rvm -Xmx100M -Xms100M -X:gc:verbose=1 SpecApplication _201_compress [Forced GC][GC 1 Start 0.16 s 11076KB -> 10436KB 52.42 ms] Caching Off Speed = 100 ======= _201_compress Starting ======= Run 0 start. Total memory=104857600 free memory=94158848 Loop count = 5 3153920 931067 2856960 1132510 962560 688827 1280000 591635 1157120 368657 3153920 931067 2856960 1132510 962560 688827 1280000 591635 1157120 368657 3153920 931067 2856960 1132510 962560 688827 1280000 591635 1157120 368657 3153920 931067 2856960 1132510 962560 [GC 2 Start 4.97 s 102504KB (CD 120.57 ms)-> 99936KB 242.53 ms] 688827 [GC 3 Start 5.36 s 102652KB (CD 42.41 ms)-> 95156KB 62.14 ms] 1280000 591635 1157120 [GC 4 Start 5.58 s 98312KB 269.09 ms)-> 98264KB 64.16 ms] [GC 5 Start 5.65 s 98264KB (CD 48.23 ms)-> 98260KB 66.42 ms] >>>> spec.benchmarks._201_compress.Main exited with exception: >>>> java.lang.OutOfMemoryError <<<< java.lang.OutOfMemoryError at spec.benchmarks._201_compress.Compressor$Hash_Table.<init>(Compress.java:0) at spec.benchmarks._201_compress.Compressor.<init>(Compress.java:0) at spec.benchmarks._201_compress.Compress.spec_select_action(Compress.java:0) at spec.benchmarks._201_compress.Harness.run_compress(Harness.java:0) at spec.benchmarks._201_compress.Harness.inst_main(Harness.java:0) at spec.benchmarks._201_compress.Main.runBenchmark(Main.java:0) at spec.benchmarks._201_compress.Main.harnessMain(Main.java:0) at spec.harness.ProgramRunner.runOnce(ProgramRunner.java:382) at spec.harness.ProgramRunner.runBenchmark2(ProgramRunner.java:306) at spec.harness.ProgramRunner.runBenchmark(ProgramRunner.java:238) at spec.harness.ProgramRunner.run(ProgramRunner.java:206) at spec.harness.RunProgram.run(RunProgram.java:60) at SpecApplication.runBenchmark(SpecApplication.java:255) at SpecApplication.main(SpecApplication.java:171) Exception in thread "main": java.lang.NullPointerException at SpecApplicationRunner.benchmarkDone(SpecApplication.java:281) at spec.harness.ProgramRunner.runBenchmark(ProgramRunner.java:244) at spec.harness.ProgramRunner.run(ProgramRunner.java:206) at spec.harness.RunProgram.run(RunProgram.java:60) at SpecApplication.runBenchmark(SpecApplication.java:255) at SpecApplication.main(SpecApplication.java:171) [End 5.71 s] ******************************************************* [root@sepc08 cdrom]# rvm -Xmx128M -Xms128M -X:gc:verbose=1 SpecApplication _201_compress [Forced GC][GC 1 Start 0.16 s 11076KB -> 10436KB 52.27 ms] Caching Off Speed = 100 ======= _201_compress Starting ======= Run 0 start. Total memory=134217728 free memory=123518976 Loop count = 5 3153920 931067 2856960 ... 2856960 1280000 591635 1157120 [GC 2 Start 5.33 s 107644KB -> 105984KB 104.45 ms] [GC 3 Start 5.44 s 105984KB -> 104472KB 17.50 ms] >>>> spec.benchmarks._201_compress.Main exited with exception: >>>> java.lang.OutOfMemoryError <<<< java.lang.OutOfMemoryError at spec.benchmarks._201_compress.Compressor$Hash_Table.<init>(Compress.java:0) at spec.benchmarks._201_compress.Compressor.<init>(Compress.java:0) at spec.benchmarks._201_compress.Compress.spec_select_action(Compress.java:0) ... ************************************************** [root@sepc08 cdrom]# rvm -Xmx150M -Xms150M -X:gc:verbose=1 SpecApplication _201_compress [Forced GC][GC 1 Start 0.15 s 11076KB -> 10436KB 52.73 ms] Caching Off Speed = 100 ======= _201_compress Starting ======= Run 0 start. Total memory=157286400 free memory=146587648 Loop count = 5 3153920 931067 2856960 1132510 962560 688827 ... 1280000 591635 1157120 [GC 2 Start 5.27 s 108668KB -> 106860KB 112.74 ms] [GC 3 Start 5.39 s 106860KB -> 105100KB 17.53 ms] >>>> spec.benchmarks._201_compress.Main exited with exception: >>>> java.lang.OutOfMemoryError <<<< java.lang.OutOfMemoryError at spec.benchmarks._201_compress.Compressor$Hash_Table.<init>(Compress.java:0) at spec.benchmarks._201_compress.Compressor.<init>(Compress.java:0) at spec.benchmarks._201_compress.Compress.spec_select_action(Compress.java:0) at spec.benchmarks._201_compress.Harness.run_compress(Harness.java:0) at spec.benchmarks._201_compress.Harness.inst_main(Harness.java:0) ... Exception in thread "main": java.lang.NullPointerException at SpecApplicationRunner.benchmarkDone(SpecApplication.java:281) at spec.harness.ProgramRunner.runBenchmark(ProgramRunner.java:244) at spec.harness.ProgramRunner.run(ProgramRunner.java:206) at spec.harness.RunProgram.run(RunProgram.java:60) at SpecApplication.runBenchmark(SpecApplication.java:255) at SpecApplication.main(SpecApplication.java:171) [End 5.41 s] *************************************************************************** They all stop at 106MB, whatever the specification heap size is. There are enough memory for the system, but the system trigger GC continually instead of increasing memory usage. And finally caused 'out-of-memory'. So I want to know the reasons why will GC be triggered. To my knowledge, if the heap is close to full, then GC will be triggered. Is there any other reason that will trigger GC? Are the fullness of decBuffer or "purple buffer" related to triggering GC? Eliot Moss wrote: > > > > > But these are basic principles of GC. I'm wondering why you're asking. Are > you > new to GC or are you getting at something more subtle? What is it that you > expected or desired to happen? > > -- Eliot > > -- View this message in context: http://www.nabble.com/When-to-trigger-GC-in-RVM--tp1348621p16347601.html Sent from the jikesrvm-researchers mailing list archive at Nabble.com. |