Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Native Interface Required for JLM Implementation ------------------------------------------------------------ The Java code contained in this implementation of the java.lang.management package for Java SE 5.0 relies on a number of methods being available from native libraries. The majority of these are for the getting and setting of VM properties and map to public API methods. For example, the operation getLoadedClassCount() declared in the interface java.lang.management.ClassLoadingMXBean has a Java implementation in the class org.apache.harmony.lang.management.ClassLoadingMXBeanImpl that just calls a private native method getLoadedClassCountImpl() that returns the requested information from the monitored VM. A basic pattern has been adopted where the name of the native method is the same as the public API method (as exposed in the java.lang.management interface) with the addition of the suffix "Impl". Below is a list of all such getter/setter native calls grouped by implementation class. This list is smaller than the list of all public methods available in the java.lang.management *MXBean API as a number of methods could be realised in pure Java. org.apache.harmony.lang.management.ClassLoadingMXBeanImpl ---------------------------------------------------------------- int getLoadedClassCountImpl() long getTotalLoadedClassCountImpl() long getUnloadedClassCountImpl() boolean isVerboseImpl void setVerboseImpl(boolean value) org.apache.harmony.lang.management.CompilationMXBeanImpl -------------------------------------------------------------- long getTotalCompilationTimeImpl() boolean isCompilationTimeMonitoringSupportedImpl() org.apache.harmony.lang.management.GarbageCollectorMXBeanImpl -------------------------------------------------------------------- long getCollectionCountImpl() long getCollectionTimeImpl() org.apache.harmony.lang.management.MemoryManagerMXBeanImpl -------------------------------------------------------------------- boolean isValidImpl() org.apache.harmony.lang.management.MemoryMXBeanImpl ---------------------------------------------------------- MemoryUsage getHeapMemoryUsageImpl() MemoryUsage getNonHeapMemoryUsageImpl() int getObjectPendingFinalizationCountImpl() boolean isVerboseImpl() void setVerboseImpl(boolean value) org.apache.harmony.lang.management.MemoryPoolMXBeanImpl -------------------------------------------------------------- MemoryUsage getCollectionUsageImpl() long getCollectionUsageThresholdImpl() long getCollectionUsageThresholdCountImpl() MemoryUsage getPeakUsageImpl() MemoryUsage getUsageImpl() long getUsageThresholdImpl() long getUsageThresholdCountImpl() boolean isCollectionUsageThresholdExceededImpl() boolean isCollectionUsageThresholdSupportedImpl() boolean isUsageThresholdExceededImpl() boolean isUsageThresholdSupportedImpl() boolean isValidImpl() void resetPeakUsageImpl() void setCollectionUsageThresholdImpl(long threshold) void setUsageThresholdImpl(long threshold) org.apache.harmony.lang.management.RuntimeMXBeanImpl ---------------------------------------------------------- String getNameImpl() long getStartTimeImpl() long getUptimeImpl() boolean isBootClassPathSupportedImpl() org.apache.harmony.lang.management.ThreadMXBeanImpl --------------------------------------------------------- long[] findMonitorDeadlockedThreadsImpl() long[] getAllThreadIdsImpl() int getDaemonThreadCountImpl() int getPeakThreadCountImpl() int getThreadCountImpl() long getThreadCpuTimeImpl(long id) long getThreadUserTimeImpl(long id) long getTotalStartedThreadCountImpl() boolean isCurrentThreadCpuTimeSupportedImpl() boolean isThreadContentionMonitoringEnabledImpl() boolean isThreadContentionMonitoringSupportedImpl() boolean isThreadCpuTimeEnabledImpl() boolean isThreadCpuTimeSupportedImpl() void resetPeakThreadCountImpl() void setThreadContentionMonitoringEnabledImpl(boolean enable) void setThreadCpuTimeEnabledImpl(boolean enable) ---------------------------------------------------------- Below is a list of native calls used for internal support purposes; they do not have any basis in the public API. Calls are grouped by implementation class. org.apache.harmony.lang.management.CompilationMXBeanImpl -------------------------------------------------------------- /** * Query whether the VM is running with a JIT compiler enabled. * * @return true if a JIT is enabled, false otherwise */ private static native boolean isJITEnabled(); org.apache.harmony.lang.management.MemoryManagerMXBeanImpl -------------------------------------------------------------------- /** * IMPORTANT : VM is the sole caller of this method. * * Instantiate the MemoryPoolMXBeans representing the memory managed by * this manager, and store them in the managedPoolList. * * @param managerID * @param memBean */ private native void createMemoryPools(int managerID, MemoryMXBeanImpl memBean); org.apache.harmony.lang.management.MemoryMXBeanImpl ---------------------------------------------------------- /** * IMPORTANT : VM is the sole caller of this method. * * Instantiates MemoryManagerMXBean and GarbageCollectorMXBean * instance(s) for the current VM configuration and stores them in * memoryManagerList. */ private native void createMemoryManagers(); org.apache.harmony.lang.management.MemoryNotificationThread ----------------------------------------------------------------- /** * Process notifications on an internal VM queue until a shutdown request is * received. * * @param internalID * The internal ID of the queue to service */ private native void processNotificationLoop(int internalID); org.apache.harmony.lang.management.MemoryNotificationThreadShutdown ----------------------------------------------------------------------------- /** * Wipes any pending notifications and puts a shutdown request notification * on an internal notification queue. * * @param id * The internal id of the queue to shut down */ private native void sendShutdownNotification(int id); org.apache.harmony.lang.management.ThreadMXBeanImpl --------------------------------------------------------- All of the support native methods below are called from within the getThreadInfoImpl(long, int) method. If the implementation of this method changes from its current Java form to a native form then all of these methods can be removed from this class. /** * Returns the corresponding Thread instance for a given thread id * * @param id * id of the thread (must be > 0) * @return null if thread with the id specified does not exist */ private native Thread getThreadByIdImpl(long id); /** * Returns the object the thread is either blocked or waiting on * * @param thread * thread * @return null if thread not blocked on an object */ private native Object getObjectThreadIsBlockedOnImpl(Thread thread); /** * Returns the thread owning an object * * @param obj * object * @return null if object not owned, else Thread owner */ private native Thread getThreadOwningObjectImpl(Object obj); /** * Returns whether the thread is suspended or not * * @param thread * thread * @return true if Thread.suspend() has been called on the thread, otherwise * false */ private native boolean isSuspendedImpl(Thread thread); /** * Returns the amount of time the thread has waited (in milliseconds) * * @param thread * thread * @return time (in milliseconds) the thread has waited, or -1 if this * feature is not supported * */ private native long getThreadWaitedTimeImpl(Thread thread); /** * Returns the amount of time the thread has blocked (in milliseconds) * * @param thread * thread * @return time (in milliseconds) the thread has blocked, or -1 if this * feature is not supported * */ private native long getThreadBlockedTimeImpl(Thread thread); /** * Returns the number of times the thread has blocked on a monitor * * @param thread * thread * @return number of times the thread has blocked * */ private native long getThreadBlockedCountImpl(Thread thread); /** * Create an instance of the ThreadInfo class * * @param threadId * @param threadName * @param threadState * @param suspended * @param inNative * @param blockedCount * @param blockedTime * @param waitedCount * @param waitedTime * @param lockName * @param lockOwnerId * @param lockOwnerName * @param stackTrace * @return */ private native ThreadInfo createThreadInfoImpl(long threadId, String threadName, Thread.State threadState, boolean suspended, boolean inNative, long blockedCount, long blockedTime, long waitedCount, long waitedTime, String lockName, long lockOwnerId, String lockOwnerName, StackTraceElement[] stackTrace); ---------------------------------------------------------- Java Fields Used by Native Code --------------------------------------- The following private instance field is included in the Java source for use by the native code layer. Care must be taken not to remove this field. org.apache.harmony.lang.management.MemoryPoolMXBeanImpl -------------------------------------------------------------- /** * IMPORTANT: bean identifier for use by VM */ @SuppressWarnings("unused") private final int id; ---------------------------------------------------------- Java Calls Used by Native Code -------------------------------------- The following private methods are included in the Java source for use by the native layer. Care must be taken not to remove these methods. org.apache.harmony.lang.management.MemoryNotificationThread ----------------------------------------------------------------- /** * A helper method called from within the native * {@link #processNotificationLoop(int)} method to construct and dispatch * notification objects. * * @param min * the initial amount in bytes of memory that can be allocated by * this virtual machine * @param used * the number of bytes currently used for memory * @param committed * the number of bytes of committed memory * @param max * the maximum number of bytes that can be used for memory * management purposes * @param count * the number of times that the memory usage of the memory pool * in question has met or exceeded the relevant threshold * @param sequenceNumber * the sequence identifier of the current notification * @param isCollectionUsageNotification * a boolean indication of whether or not the new * notification is as a result of the collection threshold being * exceeded. If this value is false then the * implication is that a memory threshold has been exceeded. */ @SuppressWarnings("unused") // IMPORTANT: for use by VM private void dispatchNotificationHelper(long min, long used, long committed, long max, long count, long sequenceNumber, boolean isCollectionUsageNotification) org.apache.harmony.lang.management.MemoryManagerMXBeanImpl -------------------------------------------------------------------- /** * A helper method called from within the native * {@link #createMemoryPools(int, MemoryMXBeanImpl)} method to construct * new MemoryPoolMXBeans representing memory managed by this manager * and add them to the {@link #managedPoolList}. * * @param name * the name of the corresponding memory pool * @param isHeap * boolean indication of the memory pool type. true * indicates that the memory is heap memory while * false indicates non-heap memory * @param internalID * numerical identifier associated with the memory pool for the * benefit of the VM * @param memBean * the {@link MemoryMXBeanImpl} that will send event * notifications related to this memory pool */ @SuppressWarnings("unused") // IMPORTANT: for use by VM private void createMemoryPoolHelper(String name, boolean isHeap, int internalID, MemoryMXBeanImpl memBean) org.apache.harmony.lang.management.MemoryMXBeanImpl ---------------------------------------------------------- /** * A helper method called from within the native * {@link #createMemoryManagers()} method to construct new instances of * MemoryManagerMXBean and GarbageCollectorMXBean and add them to the * {@link #memoryManagerList}. * * @param name * the name of the corresponding memory manager * @param internalID * numerical identifier associated with the memory manager for * the benefit of the VM * @param isGC * boolean indication of the memory manager type. * true indicates that the runtime type of the * object to be created is * GarbageCollectorMXBeanImpl while * false indicates a * MemoryManagerMXBeanImpl */ @SuppressWarnings("unused") // IMPORTANT: for use by VM private void createMemoryManagerHelper(String name, int internalID, boolean isGC)