import java.awt.GridLayout; import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; import java.lang.management.MemoryUsage; import java.io.IOException; import java.util.Formatter; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutionException; import javax.management.MBeanServerConnection; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingWorker; public class HeapUsageIndicator extends JPanel { private JLabel usedValue; private MemoryMXBean memorymxbean; public HeapUsageIndicator() { JPanel panel = new JPanel(); JLabel label = new JLabel("Heap Used (byte)"); panel.add(label); usedValue = new JLabel("0"); panel.add(usedValue); add(panel); } public void setMBeanServerConnection(MBeanServerConnection connection) { try { memorymxbean = ManagementFactory.newPlatformMXBeanProxy( connection, ManagementFactory.MEMORY_MXBEAN_NAME, MemoryMXBean.class); } catch (IOException e) { e.printStackTrace(); } } class Worker extends SwingWorker { @Override public MemoryUsage doInBackground() { return memorymxbean.getHeapMemoryUsage(); } @Override protected void done() { try { // doInBackgroundで取得したMemoryUsageを取得 MemoryUsage usage = get(); usedValue.setText(String.format("%d", usage.getUsed())); } catch (InterruptedException ex) { ex.printStackTrace(); } catch (ExecutionException ex) { ex.printStackTrace(); } } } public SwingWorker newSwingWorker() { return new Worker(); } }