From: Mathieu Chartier Date: Thu, 4 Sep 2014 21:15:35 +0000 (-0700) Subject: Add test case for runFinalization. X-Git-Tag: android-x86-7.1-r1~889^2~3165^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=3a5fa5ed91bf76c32913fe8149a83ba4205aa0bf;p=android-x86%2Fart.git Add test case for runFinalization. There was a bug causing runFinalization to return before recently freed objects were finalized. This is a regression test for this bug. Bug: 17381967 Change-Id: Ide6e2037685324423e83965fae3935f3e7f0aba6 --- diff --git a/test/036-finalizer/expected.txt b/test/036-finalizer/expected.txt index a2a74fcbf..36fa5f8e7 100644 --- a/test/036-finalizer/expected.txt +++ b/test/036-finalizer/expected.txt @@ -11,3 +11,4 @@ gc + finalize sleep reborn: [FinalizerTest message=nothing, finalized=false] wimp: null +Finalized 1024 / 1024 diff --git a/test/036-finalizer/src/Main.java b/test/036-finalizer/src/Main.java index 328425f84..390472df4 100644 --- a/test/036-finalizer/src/Main.java +++ b/test/036-finalizer/src/Main.java @@ -120,6 +120,39 @@ public class Main { System.out.println("reborn: " + FinalizerTest.mReborn); System.out.println("wimp: " + wimpString(wimp)); + // Test runFinalization with multiple objects. + runFinalizationTest(); + } + + static class FinalizeCounter { + private static Object finalizeLock = new Object(); + private static volatile int finalizeCount = 0; + private int index; + static int getCount() { + return finalizeCount; + } + FinalizeCounter(int index) { + this.index = index; + } + protected void finalize() { + synchronized(finalizeLock) { + ++finalizeCount; + } + } + } + + private static void runFinalizationTest() { + int count = 1024; + Object[] objs = new Object[count]; + for (int i = 0; i < count; ++i) { + objs[i] = new FinalizeCounter(i); + } + for (int i = 0; i < count; ++i) { + objs[i] = null; + } + System.gc(); + System.runFinalization(); + System.out.println("Finalized " + FinalizeCounter.getCount() + " / " + count); } public static class FinalizerTest {