
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __gnu_java_lang_management_MemoryMXBeanImpl__
#define __gnu_java_lang_management_MemoryMXBeanImpl__

#pragma interface

#include <gnu/java/lang/management/BeanImpl.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace lang
      {
        namespace management
        {
            class MemoryMXBeanImpl;
        }
      }
    }
  }
  namespace javax
  {
    namespace management
    {
        class MBeanNotificationInfo;
        class NotificationFilter;
        class NotificationListener;
      namespace openmbean
      {
          class CompositeType;
      }
    }
  }
}

class gnu::java::lang::management::MemoryMXBeanImpl : public ::gnu::java::lang::management::BeanImpl
{

public:
  MemoryMXBeanImpl();
  void gc();
  ::java::lang::management::MemoryUsage * getHeapMemoryUsage();
  ::java::lang::management::MemoryUsage * getNonHeapMemoryUsage();
  jint getObjectPendingFinalizationCount();
  jboolean isVerbose();
  void setVerbose(jboolean);
  void addNotificationListener(::javax::management::NotificationListener *, ::javax::management::NotificationFilter *, ::java::lang::Object *);
  JArray< ::javax::management::MBeanNotificationInfo * > * getNotificationInfo();
  void removeNotificationListener(::javax::management::NotificationListener *);
  void removeNotificationListener(::javax::management::NotificationListener *, ::javax::management::NotificationFilter *, ::java::lang::Object *);
public: // actually package-private
  void fireNotification(::java::lang::String *, ::java::lang::String *, jlong, jlong, jlong, jlong, jlong);
  void fireThresholdExceededNotification(::java::lang::String *, jlong, jlong, jlong, jlong, jlong);
  void fireCollectionThresholdExceededNotification(::java::lang::String *, jlong, jlong, jlong, jlong, jlong);
private:
  ::java::util::List * __attribute__((aligned(__alignof__( ::gnu::java::lang::management::BeanImpl)))) listeners;
  jlong notificationCount;
public:
  static ::javax::management::openmbean::CompositeType * notifType;
  static ::javax::management::openmbean::CompositeType * usageType;
  static ::java::lang::Class class$;
};

#endif // __gnu_java_lang_management_MemoryMXBeanImpl__
