hprof.h revision 4378
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * Redistribution and use in source and binary forms, with or without
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * modification, are permitted provided that the following conditions
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * are met:
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * - Redistributions of source code must retain the above copyright
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * notice, this list of conditions and the following disclaimer.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * - Redistributions in binary form must reproduce the above copyright
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * notice, this list of conditions and the following disclaimer in the
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * documentation and/or other materials provided with the distribution.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * - Neither the name of Oracle nor the names of its
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * contributors may be used to endorse or promote products derived
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * from this software without specific prior written permission.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * This source code is provided to illustrate the usage of a given feature
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * or technique and has been deliberately simplified. Additional steps
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * required for a production-quality application, such as security checks,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * input validation and proper error handling, might not be present in
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * this sample code.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Primary hprof #include file, should be included by most if not
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * all hprof source files. Gives access to the global data structure
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * and all global macros, and everything declared in the #include
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * files of each of the source files.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Standard C functions used throughout. */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* General JVM/Java functions, types and macros. */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "npt.h" /* To get NptEnv for doing character conversions */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Macros to extract the upper and lower 32 bits of a jlong */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#define jlong_add(a, b) ((a) + (b))
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* The type used to contain a generic 32bit "serial number". */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef unsigned SerialNumber;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* How the options get to OnLoad: */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Name of prelude file, found at runtime relative to java binary location */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* File I/O buffer size to be used with any file i/o operation */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Machine dependent functions. */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Table index types */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef unsigned TableIndex;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Index for method tables in classes */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* The different kinds of class status bits. */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* The different kind of objects we track with heap=dump */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef unsigned char ObjectKind;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Used by site_write() when writing out the heap=sites data. */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Used to hold information about a field, and potentially a value too. */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef struct FieldInfo {
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab unsigned short modifiers;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab unsigned char primType;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab unsigned char primSize;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Used to hold information about a constant pool entry value for a class. */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef struct ConstantPoolValue {
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* All machine independent functions */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Global data structure */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef struct {
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Option settings */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean old_timing_format; /* cpu=old (old) output format */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean socket; /* True if fd is a socket (net=addr). */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean obj_watch; /* True if bci and watching allocs */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab volatile jboolean jvm_initializing; /* VMInit happening */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean vm_death_callback_active; /* VMDeath happening */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Stack of objects freed during GC */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Lock for debug_malloc() */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Count of classes that JVMTI thinks are active */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Used to track callbacks for VM_DEATH */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Running totals on all bytes allocated */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Running total on all time spent in GC (very rough estimate) */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Global Data access Lock */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Global Dump lock */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Milli-second clock when hprof onload started */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Thread class (for starting agent threads) */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Agent threads started information */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean gc_finish_stop_request; /* True if we want it to stop */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean pause_cpu_sampling; /* temp pause in cpu sampling */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Output buffer, position, size, and position in dump if reading */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Serial number counters for tables (see hprof_table.c), classes,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * tls (thread local storage), and traces.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* The methodID for the Object <init> method. */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Keeping track of the tracker class and it's methods */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab } tracker_methods[12]; /* MAX 12 Tracker class methods */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Index to some common items */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Tables for strings, classes, sites, etc. */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Handles to java_crw_demo library */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Indication that the agent has been loaded */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* This should be the only 'extern' in the library (not exported). */