From 878a57d85448b7da32d432f2a407075db0093a2d Mon Sep 17 00:00:00 2001 From: jzhou Date: Fri, 23 Mar 2012 02:08:20 +0000 Subject: [PATCH] changes for galois --- Robust/src/ClassLibrary/MGC/System.java | 4 + .../src/ClassLibrary/MGC/gnu/Collections.java | 16 +- .../MGC/gnu/GarbageCollectorMXBean.java | 79 -- .../MGC/gnu/ManagementFactory.java | 817 ------------------ .../MGC/gnu/MemoryManagerMXBean.java | 77 -- Robust/src/Runtime/bamboo/multicoregarbage.c | 5 + Robust/src/Runtime/bamboo/multicoregc.h | 3 + Robust/src/Runtime/bamboo/multicoreruntime.c | 20 + 8 files changed, 40 insertions(+), 981 deletions(-) delete mode 100644 Robust/src/ClassLibrary/MGC/gnu/GarbageCollectorMXBean.java delete mode 100644 Robust/src/ClassLibrary/MGC/gnu/ManagementFactory.java delete mode 100644 Robust/src/ClassLibrary/MGC/gnu/MemoryManagerMXBean.java diff --git a/Robust/src/ClassLibrary/MGC/System.java b/Robust/src/ClassLibrary/MGC/System.java index 9b16885e..eacf9de4 100644 --- a/Robust/src/ClassLibrary/MGC/System.java +++ b/Robust/src/ClassLibrary/MGC/System.java @@ -27,6 +27,10 @@ public class System { public static native void gc(); + public static native long numGCs(); + + public static native long milliGcTime(); + public static void println(String s) { System.printString(s+"\n"); } diff --git a/Robust/src/ClassLibrary/MGC/gnu/Collections.java b/Robust/src/ClassLibrary/MGC/gnu/Collections.java index 52c91b4c..14b26743 100644 --- a/Robust/src/ClassLibrary/MGC/gnu/Collections.java +++ b/Robust/src/ClassLibrary/MGC/gnu/Collections.java @@ -84,8 +84,8 @@ public class Collections * some element that is null. * @see Arrays#sort(Object[]) */ - public static void sort(Vector l) - { + //public static void sort(Vector l) + //{ /*T[] a = (T[]) l.toArray(); Arrays.sort(a, c); ListIterator i = l.listIterator(); @@ -95,11 +95,11 @@ public class Collections i.set(a[pos]); }*/ //TODO - System.println("Unimplemented Collections.sort() invoked"); - } + //System.println("Unimplemented Collections.sort() invoked"); + //} - public static void sort(List l, Comparator c) - { + //public static void sort(List l, Comparator c) + //{ /*Object[] a = l.toArray(); Arrays.sort(a, c); ListIterator i = l.listIterator(); @@ -109,8 +109,8 @@ public class Collections i.set(a[pos]); }*/ // TODO - System.println("Unimplemented Collections.sort(l, c) invoked"); - } + // System.println("Unimplemented Collections.sort(l, c) invoked"); + // } static final /**/ int compare(Object/*T*/ o1, Object/*T*/ o2, Comparator/**/ c) diff --git a/Robust/src/ClassLibrary/MGC/gnu/GarbageCollectorMXBean.java b/Robust/src/ClassLibrary/MGC/gnu/GarbageCollectorMXBean.java deleted file mode 100644 index 5bb0a18d..00000000 --- a/Robust/src/ClassLibrary/MGC/gnu/GarbageCollectorMXBean.java +++ /dev/null @@ -1,79 +0,0 @@ -/* GarbageCollectorMXBean.java - Interface for a garbage collector bean - Copyright (C) 2006 Free Software Foundation - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath 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 for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 USA. - -Linking this library statically or dynamically with other modules is -making a combined work based on this library. Thus, the terms and -conditions of the GNU General Public License cover the whole -combination. - -As a special exception, the copyright holders of this library give you -permission to link this library with independent modules to produce an -executable, regardless of the license terms of these independent -modules, and to copy and distribute the resulting executable under -terms of your choice, provided that you also meet, for each linked -independent module, the terms and conditions of the license of that -module. An independent module is a module which is not derived from -or based on this library. If you modify this library, you may extend -this exception to your version of the library, but you are not -obligated to do so. If you do not wish to do so, delete this -exception statement from your version. */ - -package java.lang.management; - -/** - * Provides access to information about the garbage collectors - * of the virtual machine. Garbage collectors are responsible - * for removing unreferenced objects from memory. A garbage - * collector is a type of memory manager, so this interface - * is combined with that of generic memory managers. An instance - * of this bean for each garbage collector is obtained by calling - * {@link ManagementFactory#getGarbageCollectorMXBeans()}. - * - * @author Andrew John Hughes (gnu_andrew@member.fsf.org) - * @since 1.5 - */ -public interface GarbageCollectorMXBean - extends MemoryManagerMXBean -{ - - /** - * Returns the number of collections the garbage collector - * represented by this bean has made. -1 is returned if the - * collection count is undefined. - * - * @return the number of collections made, or -1 if this is - * undefined. - */ - long getCollectionCount(); - - /** - * Returns the accumulated number of milliseconds this garbage - * collector has spent freeing the memory used by unreferenced - * objects. -1 is returned if the collection time is undefined. - * Note that the accumulated time may not change, even when the - * collection count increases, if the time taken is sufficiently - * short; this depends on the resolution of the timer used. - * - * @return the accumulated number of milliseconds spent collecting, - * or -1 if this is undefined. - */ - long getCollectionTime(); - -} diff --git a/Robust/src/ClassLibrary/MGC/gnu/ManagementFactory.java b/Robust/src/ClassLibrary/MGC/gnu/ManagementFactory.java deleted file mode 100644 index 3226cd05..00000000 --- a/Robust/src/ClassLibrary/MGC/gnu/ManagementFactory.java +++ /dev/null @@ -1,817 +0,0 @@ -/* ManagementFactory.java - Factory for obtaining system beans. - Copyright (C) 2006 Free Software Foundation - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath 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 for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 USA. - -Linking this library statically or dynamically with other modules is -making a combined work based on this library. Thus, the terms and -conditions of the GNU General Public License cover the whole -combination. - -As a special exception, the copyright holders of this library give you -permission to link this library with independent modules to produce an -executable, regardless of the license terms of these independent -modules, and to copy and distribute the resulting executable under -terms of your choice, provided that you also meet, for each linked -independent module, the terms and conditions of the license of that -module. An independent module is a module which is not derived from -or based on this library. If you modify this library, you may extend -this exception to your version of the library, but you are not -obligated to do so. If you do not wish to do so, delete this -exception statement from your version. */ - -package java.lang.management; - -/*import gnu.classpath.SystemProperties; - -import gnu.java.lang.management.ClassLoadingMXBeanImpl; -import gnu.java.lang.management.CompilationMXBeanImpl; -import gnu.java.lang.management.GarbageCollectorMXBeanImpl; -import gnu.java.lang.management.OperatingSystemMXBeanImpl; -import gnu.java.lang.management.MemoryMXBeanImpl; -import gnu.java.lang.management.MemoryManagerMXBeanImpl; -import gnu.java.lang.management.MemoryPoolMXBeanImpl; -import gnu.java.lang.management.RuntimeMXBeanImpl; -import gnu.java.lang.management.ThreadMXBeanImpl; - -import java.io.IOException; - -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import java.util.logging.LogManager; - -import javax.management.Attribute; -import javax.management.InstanceAlreadyExistsException; -import javax.management.MBeanRegistrationException; -import javax.management.MBeanServer; -import javax.management.MBeanServerConnection; -import javax.management.MBeanServerFactory; -import javax.management.MalformedObjectNameException; -import javax.management.NotCompliantMBeanException; -import javax.management.NotificationEmitter; -import javax.management.NotificationFilter; -import javax.management.NotificationListener; -import javax.management.ObjectName; - -import javax.management.openmbean.CompositeData; -import javax.management.openmbean.TabularData;*/ - -/** - *

- * Provides access to the system's management beans via a series - * of static methods. - *

- *

- * An instance of a system management bean can be obtained by - * using one of the following methods: - *

- *
    - *
  1. Calling the appropriate static method of this factory. - *
  2. - *
  3. Using the platform {@link javax.management.MBeanServer} - * to access the beans locally, or an - * {@link javax.management.MBeanServerConnection} for remote - * access. The attributes and operations use the limited - * range of data types specified below.
  4. - *
- *

Open Data Types

- *

- * The data types used by the management beans are restricted - * to open data types to aid interoperability. This - * allows the beans to be accessed remotely, including from non-Java - * clients. Below is a table which lists the types used by the beans - * on the left, and the types they are converted to when returned via - * a bean server on the right. Type information is provided for each - * bean by obtaining its instance of {@link javax.management.MBeanInfo}. - *

- * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
Data Type UsedData Type Returned
Primitive types (int, char, etc.)Same
Wrapper classes ({@link{java.lang.Integer}, - * @link{java.lang.Character}, etc.)Same
An {@link java.lang.Enum}The name of the enumeration constant
An array of type EAn array of the same dimensions with this mapping applied - * to E.
A class with `getter' methods and a - * from({@link javax.management.openmbean.CompositeData}) - * method.The equivalent {@link javax.management.openmbean.CompositeData} - * instance, specified by the from method.
A map with keys of type K and values of - * type V.A {@link javax.management.openmbean.TabularData} instance, - * with the row type containing two items, "key" and - * "value" with the types K and V - * respectively (with translation applied).
A list of type E.An array with this mapping applied to E.
- * - * @author Andrew John Hughes (gnu_andrew@member.fsf.org) - * @since 1.5 - */ -public class ManagementFactory -{ - - /** - * The object name for the class loading bean. - */ - public static final String CLASS_LOADING_MXBEAN_NAME = - "java.lang:type=ClassLoading"; - - /** - * The object name for the compilation bean. - */ - public static final String COMPILATION_MXBEAN_NAME = - "java.lang:type=Compilation"; - - /** - * The domain for the garbage collecting beans. - */ - public static final String GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE = - "java.lang:type=GarbageCollector"; - - /** - * The domain for the memory manager beans. - */ - public static final String MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE = - "java.lang:type=MemoryManager"; - - /** - * The object name for the memory bean. - */ - public static final String MEMORY_MXBEAN_NAME = - "java.lang:type=Memory"; - - /** - * The domain for the memory pool beans. - */ - public static final String MEMORY_POOL_MXBEAN_DOMAIN_TYPE = - "java.lang:type=MemoryPool"; - - /** - * The object name for the operating system bean. - */ - public static final String OPERATING_SYSTEM_MXBEAN_NAME = - "java.lang:type=OperatingSystem"; - - /** - * The object name for the runtime bean. - */ - public static final String RUNTIME_MXBEAN_NAME = - "java.lang:type=Runtime"; - - /** - * The object name for the threading bean. - */ - public static final String THREAD_MXBEAN_NAME = - "java.lang:type=Threading"; - - /** - * The operating system management bean. - */ - //private static OperatingSystemMXBean osBean; - - /** - * The runtime management bean. - */ - //private static RuntimeMXBean runtimeBean; - - /** - * The class loading management bean. - */ - //private static ClassLoadingMXBean classLoadingBean; - - /** - * The thread bean. - */ - //private static ThreadMXBean threadBean; - - /** - * The memory bean. - */ - //private static MemoryMXBean memoryBean; - - /** - * The compilation bean (may remain null). - */ - //private static CompilationMXBean compilationBean; - - /** - * The platform server. - */ - //private static MBeanServer platformServer; - - /** - * Private constructor to prevent instance creation. - */ - private ManagementFactory() {} - - /** - * Returns the operating system management bean for the - * operating system on which the virtual machine is running. - * - * @return an instance of {@link OperatingSystemMXBean} for - * the underlying operating system. - */ - /*public static OperatingSystemMXBean getOperatingSystemMXBean() - { - if (osBean == null) - try - { - osBean = new OperatingSystemMXBeanImpl(); - } - catch (NotCompliantMBeanException e) - { - throw new InternalError("The GNU implementation of the " + - "operating system bean is not a " + - "compliant management bean."); - } - return osBean; - }*/ - - /** - * Returns the runtime management bean for the - * running virtual machine. - * - * @return an instance of {@link RuntimeMXBean} for - * this virtual machine. - */ - /*public static RuntimeMXBean getRuntimeMXBean() - { - if (runtimeBean == null) - try - { - runtimeBean = new RuntimeMXBeanImpl(); - } - catch (NotCompliantMBeanException e) - { - throw new InternalError("The GNU implementation of the " + - "runtime bean is not a compliant " + - "management bean."); - } - return runtimeBean; - }*/ - - /** - * Returns the class loading management bean for the - * running virtual machine. - * - * @return an instance of {@link ClassLoadingMXBean} for - * this virtual machine. - */ - /*public static ClassLoadingMXBean getClassLoadingMXBean() - { - if (classLoadingBean == null) - try - { - classLoadingBean = new ClassLoadingMXBeanImpl(); - } - catch (NotCompliantMBeanException e) - { - throw new InternalError("The GNU implementation of the " + - "class loading bean is not a " + - "compliant management bean."); - } - return classLoadingBean; - }*/ - - /** - * Returns the thread management bean for the running - * virtual machine. - * - * @return an instance of {@link ThreadMXBean} for - * this virtual machine. - */ - /*public static ThreadMXBean getThreadMXBean() - { - if (threadBean == null) - try - { - threadBean = new ThreadMXBeanImpl(); - } - catch (NotCompliantMBeanException e) - { - throw new InternalError("The GNU implementation of the " + - "thread bean is not a compliant " + - "management bean."); - } - return threadBean; - }*/ - - /** - * Returns the memory management bean for the running - * virtual machine. - * - * @return an instance of {@link MemoryMXBean} for - * this virtual machine. - */ - /*public static MemoryMXBean getMemoryMXBean() - { - if (memoryBean == null) - try - { - memoryBean = new MemoryMXBeanImpl(); - } - catch (NotCompliantMBeanException e) - { - throw new InternalError("The GNU implementation of the " + - "memory bean is not a compliant " + - "management bean."); - } - return memoryBean; - }*/ - - /** - * Returns the compilation bean for the running - * virtual machine, if supported. Otherwise, - * it returns null. - * - * @return an instance of {@link CompilationMXBean} for - * this virtual machine, or null - * if the virtual machine doesn't include - * a Just-In-Time (JIT) compiler. - */ - /*public static CompilationMXBean getCompilationMXBean() - { - if (compilationBean == null && - SystemProperties.getProperty("gnu.java.compiler.name") != null) - try - { - compilationBean = new CompilationMXBeanImpl(); - } - catch (NotCompliantMBeanException e) - { - throw new InternalError("The GNU implementation of the " + - "compilation bean is not a compliant " + - "management bean."); - } - return compilationBean; - }*/ - - /** - * Returns the memory pool beans for the running - * virtual machine. These may change during the course - * of execution. - * - * @return a list of memory pool beans, one for each pool. - */ - /*public static List getMemoryPoolMXBeans() - { - List poolBeans = - new ArrayList(); - String[] names = VMManagementFactory.getMemoryPoolNames(); - for (int a = 0; a < names.length; ++a) - try - { - poolBeans.add(new MemoryPoolMXBeanImpl(names[a])); - } - catch (NotCompliantMBeanException e) - { - throw new InternalError("The GNU implementation of the " + - "memory pool bean, " + a + ", is " + - "not a compliant management bean."); - } - return poolBeans; - }*/ - - /** - * Returns the memory manager beans for the running - * virtual machine. These may change during the course - * of execution. - * - * @return a list of memory manager beans, one for each manager. - */ - /*public static List getMemoryManagerMXBeans() - { - List managerBeans = - new ArrayList(); - String[] names = VMManagementFactory.getMemoryManagerNames(); - for (int a = 0; a < names.length; ++a) - try - { - managerBeans.add(new MemoryManagerMXBeanImpl(names[a])); - } - catch (NotCompliantMBeanException e) - { - throw new InternalError("The GNU implementation of the " + - "memory manager bean, " + a + ", is " + - "not a compliant management bean."); - } - managerBeans.addAll(getGarbageCollectorMXBeans()); - return managerBeans; - }*/ - - /** - * Returns the garbage collector beans for the running - * virtual machine. These may change during the course - * of execution. - * - * @return a list of garbage collector beans, one for each pool. - */ - public static List/**/ getGarbageCollectorMXBeans() - { - List/**/ gcBeans = - new ArrayList/**/(); - /*String[] names = VMManagementFactory.getGarbageCollectorNames(); - for (int a = 0; a < names.length; ++a) - try - { - gcBeans.add(new GarbageCollectorMXBeanImpl(names[a])); - } - catch (NotCompliantMBeanException e) - { - throw new InternalError("The GNU implementation of the " + - "garbage collector bean, " + a + - ", is not a compliant management " + - "bean."); - }*/ - return gcBeans; - } - - /** - *

- * Returns the platform {@link javax.management.MBeanServer}. On the - * first call to this method, a server instance is retrieved from - * the {@link javax.management.MBeanServerFactory} and each of the - * beans are registered with it. Subsequent calls return the existing - * instance. If the property javax.management.builder.initial - * is set, its value will be used as the name of the class which is used - * to provide the server instance. - *

- *

- * It is recommended that the platform server is used for other beans as - * well, in order to simplify their discovery and publication. Name conflicts - * should be avoided. - *

- * - * @return the platform {@link javax.management.MBeanServer} - * @throws SecurityException if a security manager exists and the - * caller's permissions don't imply {@link - * MBeanServerPermission(String)}("createMBeanServer") - * @see javax.management.MBeanServerFactory - * @see javax.management.MBeanServerFactory#createMBeanServer() - */ - /*public static MBeanServer getPlatformMBeanServer() - { - if (platformServer == null) - { - platformServer = MBeanServerFactory.createMBeanServer(); - try - { - platformServer.registerMBean(getOperatingSystemMXBean(), - new ObjectName(OPERATING_SYSTEM_MXBEAN_NAME)); - platformServer.registerMBean(getRuntimeMXBean(), - new ObjectName(RUNTIME_MXBEAN_NAME)); - platformServer.registerMBean(getClassLoadingMXBean(), - new ObjectName(CLASS_LOADING_MXBEAN_NAME)); - platformServer.registerMBean(getThreadMXBean(), - new ObjectName(THREAD_MXBEAN_NAME)); - platformServer.registerMBean(getMemoryMXBean(), - new ObjectName(MEMORY_MXBEAN_NAME)); - CompilationMXBean compBean = getCompilationMXBean(); - if (compBean != null) - platformServer.registerMBean(compBean, - new ObjectName(COMPILATION_MXBEAN_NAME)); - Iterator beans = getMemoryPoolMXBeans().iterator(); - while (beans.hasNext()) - { - MemoryPoolMXBean bean = (MemoryPoolMXBean) beans.next(); - platformServer.registerMBean(bean, - new ObjectName(MEMORY_POOL_MXBEAN_DOMAIN_TYPE + - ",name=" + - bean.getName())); - } - beans = getMemoryManagerMXBeans().iterator(); - while (beans.hasNext()) - { - MemoryManagerMXBean bean = (MemoryManagerMXBean) beans.next(); - platformServer.registerMBean(bean, - new ObjectName(MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE + - ",name=" + - bean.getName())); - } - beans = getGarbageCollectorMXBeans().iterator(); - while (beans.hasNext()) - { - GarbageCollectorMXBean bean = (GarbageCollectorMXBean) beans.next(); - platformServer.registerMBean(bean, - new ObjectName(GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE + - ",name=" + - bean.getName())); - } - platformServer.registerMBean(LogManager.getLoggingMXBean(), - new ObjectName(LogManager.LOGGING_MXBEAN_NAME)); - } - catch (InstanceAlreadyExistsException e) - { - throw (Error) - (new InternalError("One of the management beans is " + - "already registered.").initCause(e)); - } - catch (MBeanRegistrationException e) - { - throw (Error) - (new InternalError("One of the management beans' preRegister " + - "methods threw an exception.").initCause(e)); - } - catch (NotCompliantMBeanException e) - { - throw (Error) - (new InternalError("One of the management beans is " + - "not compliant.").initCause(e)); - } - catch (MalformedObjectNameException e) - { - throw (Error) - (new InternalError("The object name of a management bean is " + - "not compliant.").initCause(e)); - } - } - return platformServer; - }*/ - - /** - *

- * Returns a proxy for the specified platform bean. A proxy object is created - * using Proxy.newProxyInstance(mxbeanInterface.getClassLoader(), - * new Class[] { mxbeanInterface }, handler). The - * {@link javax.management.NotificationEmitter} class is also added to the - * array if the bean provides notifications. handler refers - * to the invocation handler which forwards calls to the connection, and - * also provides translation between the Java data types used in the - * bean interfaces and the open data types, as specified in the description - * of this class. It is this translation that makes the - * usual {@link javax.management.MBeanServerInvocationHandler} inappropriate - * for providing such a proxy. - *

- *

- * Note: use of the proxy may result in - * {@link java.io.IOException}s from the underlying {@link MBeanServerConnection} - * and a {@link java.io.InvalidObjectException} if enum constants - * used on the client and the server don't match. - *

- * - * @param connection the server connection to use to access the bean. - * @param mxbeanName the {@link javax.management.ObjectName} of the - * bean to provide a proxy for. - * @param mxbeanInterface the interface for the bean being proxied. - * @return a proxy for the specified bean. - * @throws IllegalArgumentException if mxbeanName is not a valid - * {@link javax.management.ObjectName}, - * the interface and name do not match the - * same bean, the name does not refer to a - * platform bean or the bean is not registered - * with the server accessed by connection. - * @throws IOException if the connection throws one. - */ - /*public static T newPlatformMXBeanProxy(MBeanServerConnection connection, - String mxbeanName, - Class mxbeanInterface) - throws IOException - { - if (!(mxbeanName.equals(CLASS_LOADING_MXBEAN_NAME) || - mxbeanName.equals(COMPILATION_MXBEAN_NAME) || - mxbeanName.startsWith(GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE) || - mxbeanName.startsWith(MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE) || - mxbeanName.equals(MEMORY_MXBEAN_NAME) || - mxbeanName.startsWith(MEMORY_POOL_MXBEAN_DOMAIN_TYPE) || - mxbeanName.equals(OPERATING_SYSTEM_MXBEAN_NAME) || - mxbeanName.equals(RUNTIME_MXBEAN_NAME) || - mxbeanName.equals(THREAD_MXBEAN_NAME))) - { - throw new IllegalArgumentException("The named bean, " + mxbeanName + - ", is not a platform name."); - } - if ((mxbeanName.equals(CLASS_LOADING_MXBEAN_NAME) && - mxbeanInterface != ClassLoadingMXBean.class) || - (mxbeanName.equals(COMPILATION_MXBEAN_NAME) && - mxbeanInterface != CompilationMXBean.class) || - (mxbeanName.startsWith(GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE) && - mxbeanInterface != GarbageCollectorMXBean.class) || - (mxbeanName.startsWith(MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE) && - mxbeanInterface != MemoryManagerMXBean.class) || - (mxbeanName.equals(MEMORY_MXBEAN_NAME) && - mxbeanInterface != MemoryMXBean.class) || - (mxbeanName.startsWith(MEMORY_POOL_MXBEAN_DOMAIN_TYPE) && - mxbeanInterface != MemoryPoolMXBean.class) || - (mxbeanName.equals(OPERATING_SYSTEM_MXBEAN_NAME) && - mxbeanInterface != OperatingSystemMXBean.class) || - (mxbeanName.equals(RUNTIME_MXBEAN_NAME) && - mxbeanInterface != RuntimeMXBean.class) || - (mxbeanName.equals(THREAD_MXBEAN_NAME) && - mxbeanInterface != ThreadMXBean.class)) - throw new IllegalArgumentException("The interface, " + mxbeanInterface + - ", does not match the bean, " + mxbeanName); - ObjectName bean; - try - { - bean = new ObjectName(mxbeanName); - } - catch (MalformedObjectNameException e) - { - throw new IllegalArgumentException("The named bean is invalid."); - } - if (!(connection.isRegistered(bean))) - throw new IllegalArgumentException("The bean is not registered on this connection."); - Class[] interfaces; - if (mxbeanName.equals(MEMORY_MXBEAN_NAME)) - interfaces = new Class[] { mxbeanInterface, NotificationEmitter.class }; - else - interfaces = new Class[] { mxbeanInterface }; - return (T) Proxy.newProxyInstance(mxbeanInterface.getClassLoader(), - interfaces, - new ManagementInvocationHandler(connection, bean)); - }*/ - - /** - * This invocation handler provides method calls for a platform bean - * by forwarding them to a {@link MBeanServerConnection}. Translation from - * Java data types to open data types is performed as specified above. - * - * @author Andrew John Hughes (gnu_andrew@member.fsf.org) - * @since 1.5 - */ - /*private static class ManagementInvocationHandler - implements InvocationHandler - { - - /** - * The encapsulated connection. - */ - /*private MBeanServerConnection conn; - - /** - * The bean being proxied. - */ - /*private ObjectName bean; - - /** - * Constructs a new {@link InvocationHandler} which proxies - * for the specified bean using the supplied connection. - * - * @param conn the connection on which to forward method calls. - * @param bean the bean to proxy. - */ - /*public ManagementInvocationHandler(MBeanServerConnection conn, - ObjectName bean) - throws IOException - { - this.conn = conn; - this.bean = bean; - } - - /** - * Called by the proxy class whenever a method is called. The method - * is emulated by retrieving an attribute from, setting an attribute on - * or invoking a method on the server connection as required. Translation - * between the Java data types supplied as arguments to the open types used - * by the bean is provided, as well as translation of the return value back - * in to the appropriate Java type. - * - * @param proxy the proxy on which the method was called. - * @param method the method which was called. - * @param args the arguments supplied to the method. - * @return the return value from the method. - * @throws Throwable if an exception is thrown in performing the - * method emulation. - */ - /*public Object invoke(Object proxy, Method method, Object[] args) - throws Throwable - { - String name = method.getName(); - if (name.equals("toString")) - return "Proxy for " + bean + " using " + conn; - if (name.equals("addNotificationListener")) - { - conn.addNotificationListener(bean, - (NotificationListener) args[0], - (NotificationFilter) args[1], - args[2]); - return null; - } - if (name.equals("getNotificationInfo")) - return conn.getMBeanInfo(bean).getNotifications(); - if (name.equals("removeNotificationListener")) - { - if (args.length == 1) - conn.removeNotificationListener(bean, - (NotificationListener) - args[0]); - else - conn.removeNotificationListener(bean, - (NotificationListener) - args[0], - (NotificationFilter) - args[1], args[2]); - return null; - } - String attrib = null; - if (name.startsWith("get")) - attrib = name.substring(3); - else if (name.startsWith("is")) - attrib = name.substring(2); - if (attrib != null) - return translate(conn.getAttribute(bean, attrib), method); - else if (name.startsWith("set")) - { - conn.setAttribute(bean, new Attribute(name.substring(3), - args[0])); - return null; - } - else - return translate(conn.invoke(bean, name, args, null), method); - } - - /** - * Translates the returned open data type to the value - * required by the interface. - * - * @param otype the open type returned by the method call. - * @param method the method that was called. - * @return the equivalent return type required by the interface. - * @throws Throwable if an exception is thrown in performing the - * conversion. - */ - /*private final Object translate(Object otype, Method method) - throws Throwable - { - Class returnType = method.getReturnType(); - if (returnType.isEnum()) - { - String ename = (String) otype; - Enum[] constants = (Enum[]) returnType.getEnumConstants(); - for (Enum c : constants) - if (c.name().equals(ename)) - return c; - } - if (List.class.isAssignableFrom(returnType)) - { - Object[] elems = (Object[]) otype; - List l = new ArrayList(elems.length); - for (Object elem : elems) - l.add(elem); - return l; - } - if (Map.class.isAssignableFrom(returnType)) - { - TabularData data = (TabularData) otype; - Map m = new HashMap(data.size()); - for (Object val : data.values()) - { - CompositeData vals = (CompositeData) val; - m.put(vals.get("key"), vals.get("value")); - } - return m; - } - try - { - Method m = returnType.getMethod("from", - new Class[] - { CompositeData.class }); - return m.invoke(null, (CompositeData) otype); - } - catch (NoSuchMethodException e) - { - /* Ignored; we expect this if this - isn't a from(CompositeData) class */ - /*} - return otype; - } - - }*/ -} diff --git a/Robust/src/ClassLibrary/MGC/gnu/MemoryManagerMXBean.java b/Robust/src/ClassLibrary/MGC/gnu/MemoryManagerMXBean.java deleted file mode 100644 index 92107053..00000000 --- a/Robust/src/ClassLibrary/MGC/gnu/MemoryManagerMXBean.java +++ /dev/null @@ -1,77 +0,0 @@ -/* MemoryManagerMXBean.java - Interface for a memory manager bean - Copyright (C) 2006 Free Software Foundation - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath 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 for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 USA. - -Linking this library statically or dynamically with other modules is -making a combined work based on this library. Thus, the terms and -conditions of the GNU General Public License cover the whole -combination. - -As a special exception, the copyright holders of this library give you -permission to link this library with independent modules to produce an -executable, regardless of the license terms of these independent -modules, and to copy and distribute the resulting executable under -terms of your choice, provided that you also meet, for each linked -independent module, the terms and conditions of the license of that -module. An independent module is a module which is not derived from -or based on this library. If you modify this library, you may extend -this exception to your version of the library, but you are not -obligated to do so. If you do not wish to do so, delete this -exception statement from your version. */ - -package java.lang.management; - -/** - * Provides access to information about the memory managers - * of the virtual machine. An instance of this bean for each - * memory manager is obtained by calling - * {@link ManagementFactory#getMemoryManagerMXBeans()}. - * - * @author Andrew John Hughes (gnu_andrew@member.fsf.org) - * @since 1.5 - */ -public interface MemoryManagerMXBean -{ - - /** - * Returns an array containing the names of the memory pools - * this memory manager manages. - * - * @return an array containing the name of each memory pool - * this manager is responsible for. - */ - String[] getMemoryPoolNames(); - - /** - * Returns the name of the memory manager. - * - * @return the memory manager name. - */ - String getName(); - - /** - * Returns true if this memory manager is still valid. A memory - * manager becomes invalid when it is removed by the virtual machine - * and no longer used. - * - * @return true if this memory manager is valid. - */ - boolean isValid(); - -} diff --git a/Robust/src/Runtime/bamboo/multicoregarbage.c b/Robust/src/Runtime/bamboo/multicoregarbage.c index 9664ce5a..6e694b54 100644 --- a/Robust/src/Runtime/bamboo/multicoregarbage.c +++ b/Robust/src/Runtime/bamboo/multicoregarbage.c @@ -107,6 +107,8 @@ void gc_resetCoreStatus() { void initmulticoregcdata() { + numGCs = 0; + GCtime = 0; bamboo_smem_zero_top = NULL; gcflag = false; gc_status_info.gcprocessing = false; @@ -541,6 +543,7 @@ bool gc(struct garbagelist * stackptr) { if(0 == BAMBOO_NUM_OF_CORE) { GC_PRINTF("start gc! \n"); GCPROFILE_START_MASTER(); + unsigned long long thisgctime = BAMBOO_GET_EXE_TIME(); GC_PRINTF("Check if we can do gc or not\n"); gccorestatus[BAMBOO_NUM_OF_CORE] = 0; @@ -552,6 +555,8 @@ bool gc(struct garbagelist * stackptr) { //pregccheck(); gc_master(stackptr); + GCtime = BAMBOO_GET_EXE_TIME() - thisgctime; + numGCs++; } else if(BAMBOO_NUM_OF_CORE < NUMCORES4GC) { GC_PRINTF("Core reporting for gc.\n"); pregcprocessing(); diff --git a/Robust/src/Runtime/bamboo/multicoregc.h b/Robust/src/Runtime/bamboo/multicoregc.h index c59a3641..8a637da7 100644 --- a/Robust/src/Runtime/bamboo/multicoregc.h +++ b/Robust/src/Runtime/bamboo/multicoregc.h @@ -11,4 +11,7 @@ void * gctopva; // top va for shared memory without reserved sblocks void * gcbaseva; // base va for shared memory without reserved sblocks void * incoherentbaseva; +unsigned long numGCs; +unsigned long long GCtime; + #endif // BAMBOO_MULTICORE_GC_H diff --git a/Robust/src/Runtime/bamboo/multicoreruntime.c b/Robust/src/Runtime/bamboo/multicoreruntime.c index f02d36dc..71f50c7a 100644 --- a/Robust/src/Runtime/bamboo/multicoreruntime.c +++ b/Robust/src/Runtime/bamboo/multicoreruntime.c @@ -338,6 +338,26 @@ long long CALL00(___System______currentTimeMillis____) { } #endif +#ifdef D___System______numGCs____ +long long ___System______numGCs____(struct ___System______numGCs_____params * ___params___) { +#ifdef MULTICORE_GC + return numGCs; +#else + return 0; +#endif +} +#endif + +#ifdef D___System______milliGcTime____ +long long ___System______milliGcTime____(struct ___System______milliGcTime_____params * ___params___) { +#ifdef MULTICORE_GC + return GCtime/700000; +#else + return 0; +#endif +} +#endif + #ifdef D___System______nanoTime____ long long CALL00(___System______nanoTime____) { //TilePro64 is 700mHz -- 2.34.1