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