2007-12-01 00:00:00 +00:00
|
|
|
/*
|
6964458: Reimplement class meta-data storage to use native memory
Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes
Co-authored-by: Stefan Karlsson <stefan.karlsson@oracle.com>
Co-authored-by: Mikael Gerdin <mikael.gerdin@oracle.com>
Co-authored-by: Tom Rodriguez <tom.rodriguez@oracle.com>
Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland
2012-09-01 13:25:18 -04:00
|
|
|
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
|
2007-12-01 00:00:00 +00:00
|
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
|
|
*
|
|
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
|
|
* published by the Free Software Foundation.
|
|
|
|
*
|
|
|
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
|
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
|
|
* accompanied this code).
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License version
|
|
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
*
|
2010-05-27 19:08:38 -07:00
|
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
|
|
* questions.
|
2007-12-01 00:00:00 +00:00
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2010-11-23 13:22:55 -08:00
|
|
|
#ifndef SHARE_VM_SERVICES_MANAGEMENT_HPP
|
|
|
|
#define SHARE_VM_SERVICES_MANAGEMENT_HPP
|
|
|
|
|
|
|
|
#include "memory/allocation.hpp"
|
|
|
|
#include "runtime/handles.hpp"
|
|
|
|
#include "runtime/timer.hpp"
|
|
|
|
#include "services/jmm.h"
|
|
|
|
|
2007-12-01 00:00:00 +00:00
|
|
|
class OopClosure;
|
|
|
|
class ThreadSnapshot;
|
|
|
|
|
|
|
|
class Management : public AllStatic {
|
|
|
|
private:
|
|
|
|
static PerfVariable* _begin_vm_creation_time;
|
|
|
|
static PerfVariable* _end_vm_creation_time;
|
|
|
|
static PerfVariable* _vm_init_done_time;
|
|
|
|
static jmmOptionalSupport _optional_support;
|
|
|
|
static TimeStamp _stamp; // Timestamp since vm init done time
|
|
|
|
|
|
|
|
// Management klasses
|
6964458: Reimplement class meta-data storage to use native memory
Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes
Co-authored-by: Stefan Karlsson <stefan.karlsson@oracle.com>
Co-authored-by: Mikael Gerdin <mikael.gerdin@oracle.com>
Co-authored-by: Tom Rodriguez <tom.rodriguez@oracle.com>
Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland
2012-09-01 13:25:18 -04:00
|
|
|
static Klass* _sensor_klass;
|
|
|
|
static Klass* _threadInfo_klass;
|
|
|
|
static Klass* _memoryUsage_klass;
|
|
|
|
static Klass* _memoryPoolMXBean_klass;
|
|
|
|
static Klass* _memoryManagerMXBean_klass;
|
|
|
|
static Klass* _garbageCollectorMXBean_klass;
|
|
|
|
static Klass* _managementFactory_klass;
|
|
|
|
static Klass* _garbageCollectorImpl_klass;
|
|
|
|
static Klass* _gcInfo_klass;
|
|
|
|
|
|
|
|
static Klass* load_and_initialize_klass(Symbol* sh, TRAPS);
|
2007-12-01 00:00:00 +00:00
|
|
|
|
|
|
|
public:
|
|
|
|
static void init();
|
|
|
|
static void initialize(TRAPS);
|
|
|
|
|
2012-10-10 14:35:58 -04:00
|
|
|
static jlong ticks_to_ms(jlong ticks) NOT_MANAGEMENT_RETURN_(0L);
|
|
|
|
static jlong timestamp() NOT_MANAGEMENT_RETURN_(0L);
|
2007-12-01 00:00:00 +00:00
|
|
|
|
2012-10-10 14:35:58 -04:00
|
|
|
static void oops_do(OopClosure* f) NOT_MANAGEMENT_RETURN;
|
2007-12-01 00:00:00 +00:00
|
|
|
static void* get_jmm_interface(int version);
|
|
|
|
static void get_optional_support(jmmOptionalSupport* support);
|
|
|
|
|
|
|
|
static void get_loaded_classes(JavaThread* cur_thread, GrowableArray<KlassHandle>* klass_handle_array);
|
|
|
|
|
2012-10-10 14:35:58 -04:00
|
|
|
static void record_vm_startup_time(jlong begin, jlong duration)
|
|
|
|
NOT_MANAGEMENT_RETURN;
|
2007-12-01 00:00:00 +00:00
|
|
|
static void record_vm_init_completed() {
|
|
|
|
// Initialize the timestamp to get the current time
|
|
|
|
_vm_init_done_time->set_value(os::javaTimeMillis());
|
|
|
|
|
|
|
|
// Update the timestamp to the vm init done time
|
|
|
|
_stamp.update();
|
|
|
|
}
|
|
|
|
|
2012-01-05 17:14:52 -05:00
|
|
|
static jlong begin_vm_creation_time() {
|
|
|
|
return _begin_vm_creation_time->get_value();
|
|
|
|
}
|
2007-12-01 00:00:00 +00:00
|
|
|
static jlong vm_init_done_time() {
|
|
|
|
return _vm_init_done_time->get_value();
|
|
|
|
}
|
|
|
|
|
6964458: Reimplement class meta-data storage to use native memory
Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes
Co-authored-by: Stefan Karlsson <stefan.karlsson@oracle.com>
Co-authored-by: Mikael Gerdin <mikael.gerdin@oracle.com>
Co-authored-by: Tom Rodriguez <tom.rodriguez@oracle.com>
Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland
2012-09-01 13:25:18 -04:00
|
|
|
// methods to return a Klass*.
|
|
|
|
static Klass* java_lang_management_ThreadInfo_klass(TRAPS);
|
2012-10-10 14:35:58 -04:00
|
|
|
static Klass* java_lang_management_MemoryUsage_klass(TRAPS)
|
|
|
|
NOT_MANAGEMENT_RETURN_(NULL);
|
6964458: Reimplement class meta-data storage to use native memory
Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes
Co-authored-by: Stefan Karlsson <stefan.karlsson@oracle.com>
Co-authored-by: Mikael Gerdin <mikael.gerdin@oracle.com>
Co-authored-by: Tom Rodriguez <tom.rodriguez@oracle.com>
Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland
2012-09-01 13:25:18 -04:00
|
|
|
static Klass* java_lang_management_MemoryPoolMXBean_klass(TRAPS);
|
|
|
|
static Klass* java_lang_management_MemoryManagerMXBean_klass(TRAPS);
|
|
|
|
static Klass* java_lang_management_GarbageCollectorMXBean_klass(TRAPS);
|
2012-10-10 14:35:58 -04:00
|
|
|
static Klass* sun_management_Sensor_klass(TRAPS)
|
|
|
|
NOT_MANAGEMENT_RETURN_(NULL);
|
|
|
|
static Klass* sun_management_ManagementFactory_klass(TRAPS)
|
|
|
|
NOT_MANAGEMENT_RETURN_(NULL);
|
|
|
|
static Klass* sun_management_GarbageCollectorImpl_klass(TRAPS)
|
|
|
|
NOT_MANAGEMENT_RETURN_(NULL);
|
|
|
|
static Klass* com_sun_management_GcInfo_klass(TRAPS)
|
|
|
|
NOT_MANAGEMENT_RETURN_(NULL);
|
2007-12-01 00:00:00 +00:00
|
|
|
|
|
|
|
static instanceOop create_thread_info_instance(ThreadSnapshot* snapshot, TRAPS);
|
|
|
|
static instanceOop create_thread_info_instance(ThreadSnapshot* snapshot, objArrayHandle monitors_array, typeArrayHandle depths_array, objArrayHandle synchronizers_array, TRAPS);
|
|
|
|
};
|
|
|
|
|
|
|
|
class TraceVmCreationTime : public StackObj {
|
|
|
|
private:
|
|
|
|
TimeStamp _timer;
|
|
|
|
jlong _begin_time;
|
|
|
|
|
|
|
|
public:
|
|
|
|
TraceVmCreationTime() {}
|
|
|
|
~TraceVmCreationTime() {}
|
|
|
|
|
|
|
|
void start()
|
|
|
|
{ _timer.update_to(0); _begin_time = os::javaTimeMillis(); }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Only call this if initialization completes successfully; it will
|
|
|
|
* crash if PerfMemory_exit() has already been called (usually by
|
|
|
|
* os::shutdown() when there was an initialization failure).
|
|
|
|
*/
|
|
|
|
void end()
|
|
|
|
{ Management::record_vm_startup_time(_begin_time, _timer.milliseconds()); }
|
|
|
|
|
|
|
|
};
|
2010-11-23 13:22:55 -08:00
|
|
|
|
|
|
|
#endif // SHARE_VM_SERVICES_MANAGEMENT_HPP
|