javacommons/utils/tsrc/javasrc/com/nokia/mj/impl/rt/support/FinalizerStatistics.java
author hgs
Fri, 15 Oct 2010 12:29:39 +0300
changeset 80 d6dafc5d983f
permissions -rw-r--r--
v2.2.19_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     1
/*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     3
* All rights reserved.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     8
*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     9
* Initial Contributors:
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    11
*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    12
* Contributors:
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    13
*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    14
* Description:
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    15
*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    16
*/
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    17
package com.nokia.mj.impl.rt.support;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    18
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    19
import java.util.Hashtable;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    20
import java.util.Enumeration;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    21
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    22
class FinalizerStatistics
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    23
{
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    24
    private static Hashtable mReferences = new Hashtable();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    25
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    26
    private static final boolean mTrace = false;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    27
    private static class Refcount
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    28
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    29
        int    mCount;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    30
        String mClassName;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    31
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    32
        private Refcount(String className)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    33
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    34
            mCount = 1;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    35
            mClassName = className;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    36
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    37
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    38
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    39
    public static void finalizableCreated(String className)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    40
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    41
        synchronized (mReferences)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    42
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    43
            Refcount r = (Refcount)mReferences.get(className);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    44
            int count = 1;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    45
            if (r != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    46
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    47
                r.mCount++;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    48
                count = r.mCount;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    49
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    50
            else
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    51
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    52
                mReferences.put(className, new Refcount(className));
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    53
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    54
            if (mTrace) System.out.println("Finalizable created. name: " +
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    55
                                               className + ", count: " + count);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    56
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    57
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    58
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    59
    public static void classFinalized(String className)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    60
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    61
        synchronized (mReferences)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    62
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    63
            Refcount r = (Refcount)mReferences.get(className);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    64
            r.mCount--;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    65
            if (mTrace) System.out.println("Finalizable destroyed. name: " +
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    66
                                               className + ", count: " + r.mCount);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    67
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    68
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    69
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    70
    public static boolean getNonfinalizedObjects(StringBuffer sb)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    71
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    72
        synchronized (mReferences)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    73
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    74
            sb.append("Finalizable objects\n");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    75
            Enumeration e = mReferences.elements();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    76
            boolean allFinalized = true;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    77
            while (e.hasMoreElements())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    78
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    79
                Refcount r = (Refcount)e.nextElement();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    81
                if (r != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    82
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    83
                    if (r.mCount != 0)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    84
                    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    85
                        allFinalized = false;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    86
                    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    87
                    sb.append("  class=" + r.mClassName +
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    88
                              " count="  + r.mCount + "\n");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    89
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    90
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    91
            sb.append("\nStatus ");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    92
            if (allFinalized)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    93
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    94
                sb.append("ALL FINALIZED");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    95
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    96
            else
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    97
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    98
                sb.append("OBJECTS WAITING FOR FINALIZATION");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    99
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   100
            if (mTrace) System.out.println(sb.toString());
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   101
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   102
            return allFinalized;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   103
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   104
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   105
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   106
    public static void reset()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   107
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   108
        mReferences.clear();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   109
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   110
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   111
}