Home | History | Annotate | Download | only in loadclass
      1 /*
      2  * Copyright (C) 2008 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 import android.util.Log;
     18 import android.os.Debug;
     19 
     20 /**
     21  * Loads a class, runs the garbage collector, and prints showmap output.
     22  *
     23  * <p>Usage: dalvikvm LoadClass [class name]
     24  */
     25 class LoadClass {
     26 
     27     public static void main(String[] args) {
     28         System.loadLibrary("android_runtime");
     29 
     30         if (registerNatives() < 0) {
     31             throw new RuntimeException("Error registering natives.");
     32         }
     33 
     34         Debug.startAllocCounting();
     35 
     36         if (args.length > 0) {
     37             try {
     38                 long start = System.currentTimeMillis();
     39                 Class.forName(args[0]);
     40                 long elapsed = System.currentTimeMillis() - start;
     41                 Log.i("LoadClass", "Loaded " + args[0] + " in " + elapsed
     42                         + "ms.");
     43             } catch (ClassNotFoundException e) {
     44                 Log.w("LoadClass", e);
     45                 return;
     46             }
     47         }
     48 
     49         System.gc();
     50 
     51         int allocCount = Debug.getGlobalAllocCount();
     52         int allocSize = Debug.getGlobalAllocSize();
     53         int freedCount = Debug.getGlobalFreedCount();
     54         int freedSize = Debug.getGlobalFreedSize();
     55         long nativeHeapSize = Debug.getNativeHeapSize();
     56 
     57         Debug.stopAllocCounting();
     58 
     59         StringBuilder response = new StringBuilder("DECAFBAD");
     60 
     61         int[] pages = new int[6];
     62         Debug.MemoryInfo memoryInfo = new Debug.MemoryInfo();
     63         Debug.getMemoryInfo(memoryInfo);
     64         response.append(',').append(memoryInfo.nativeSharedDirty);
     65         response.append(',').append(memoryInfo.dalvikSharedDirty);
     66         response.append(',').append(memoryInfo.otherSharedDirty);
     67         response.append(',').append(memoryInfo.nativePrivateDirty);
     68         response.append(',').append(memoryInfo.dalvikPrivateDirty);
     69         response.append(',').append(memoryInfo.otherPrivateDirty);
     70 
     71         response.append(',').append(allocCount);
     72         response.append(',').append(allocSize);
     73         response.append(',').append(freedCount);
     74         response.append(',').append(freedSize);
     75         response.append(',').append(nativeHeapSize);
     76 
     77         System.out.println(response.toString());
     78     }
     79 
     80     /**
     81      * Registers native functions. See AndroidRuntime.cpp.
     82      */
     83     static native int registerNatives();
     84 }
     85