code: package org.gridkit.jvmtools.gcmon;
  
  import java.lang.management.ManagementFactory;
  import java.util.ArrayList;
  import java.util.List;
  
  import org.gridkit.jvmtool.gcmon.MemoryPoolEventConsumer;
  import org.gridkit.jvmtool.gcmon.MemoryPoolInfoEvent;
  import org.gridkit.jvmtool.gcmon.MemoryPoolPoller;
  import org.junit.Test;
  
  public class MemPoolEventTest {
  
      @Test
      public void pollerSmoke() {
          MemoryPoolPoller poller = new MemoryPoolPoller(ManagementFactory.getPlatformMBeanServer(), new Consumer());
  
          poller.poll();
  
          List<Object> buf = new ArrayList<Object>();
          for(int i = 0; i != 10000; ++i) {
              if (i < 100) {
                  buf.add(new byte[1024]);
              }
              buf.set(i % 100, new byte[1024]);
          }
  
          poller.poll();
  
          for(int i = 0; i != 10000; ++i) {
              buf.set(i % 100, new byte[1024]);
          }
  
          poller.poll();
      }
  
      public class Consumer implements MemoryPoolEventConsumer {
  
          @Override
          public void consumeUsageEvent(MemoryPoolInfoEvent event) {
              System.out.println(event.timestamp() + " consumeUsageEvent: " + event.tags() + " " + event.counters());
          }
  
          @Override
          public void consumePeakEvent(MemoryPoolInfoEvent event) {
              System.out.println(event.timestamp() + " consumePeakEvent: " + event.tags() + " " + event.counters());
          }
  
          @Override
          public void consumeCollectionUsageEvent(MemoryPoolInfoEvent event) {
              System.out.println(event.timestamp() +  " consumeCollectionUsageEvent: " + event.tags() + " " + event.counters());
          }
      }
  }
  