12faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes/*
22faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Copyright (C) 2007 The Android Open Source Project
32faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes *
42faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Licensed under the Apache License, Version 2.0 (the "License");
52faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * you may not use this file except in compliance with the License.
62faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * You may obtain a copy of the License at
72faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes *
82faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes *      http://www.apache.org/licenses/LICENSE-2.0
92faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes *
102faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Unless required by applicable law or agreed to in writing, software
112faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
122faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * See the License for the specific language governing permissions and
142faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * limitations under the License.
152faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes */
165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
175d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao/**
185d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Test a class with a bad finalizer.
195d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao */
205d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaopublic class Main {
215d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    public static void main(String[] args) {
225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        BadFinalizer bf = new BadFinalizer();
235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
24bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom        System.out.println("About to null reference and request GC.");
255d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        bf = null;
267befd0e35bbed32b90bc0c8b6d3fa8bd612f5506Mathieu Chartier        Runtime.getRuntime().gc();
275d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
285d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        for (int i = 0; i < 8; i++) {
29bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom            snooze(4000);
307befd0e35bbed32b90bc0c8b6d3fa8bd612f5506Mathieu Chartier            Runtime.getRuntime().gc();
315d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
325d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
33bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom        System.out.println("UNREACHABLE");
345d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.exit(0);
355d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
36bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom
37bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom    public static void snooze(int ms) {
38bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom        try {
39bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom            Thread.sleep(ms);
40bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom        } catch (InterruptedException ie) {
41bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom        }
42bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom    }
43bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom
44bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom    /**
45bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom     * Class with a bad finalizer.
46bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom     */
47bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom    public static class BadFinalizer {
48bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom        protected void finalize() {
49bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom            System.out.println("Finalizer started and spinning...");
50bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom            int j = 0;
51bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom
52bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom            /* spin for a bit */
53bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom            long start, end;
54bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom            start = System.nanoTime();
55bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom            for (int i = 0; i < 1000000; i++) {
56bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom                j++;
57bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom            }
58bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom            end = System.nanoTime();
59bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom            System.out.println("Finalizer done spinning.");
60bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom
61bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom            System.out.println("Finalizer sleeping forever now.");
62bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom            while (true) {
63bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom                snooze(10000);
64bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom            }
65bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom        }
66bca77e61cf25176f8bf2d0730342e2f8e2665d01Brian Carlstrom    }
675d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao}
68