需要Java Swing Free Memory组件

时间:2009-08-28 10:13:41

标签: java swing components

我需要Java Swing Free Memory组件(类似于Eclipse IDE中的组件)。优选地是免费的(和开源的)。提前谢谢。

3 个答案:

答案 0 :(得分:5)

mynameisfred改进了它的问题:

  

不,我不是指MAT   我的意思是一个简单的记忆指示器,您可以在状态栏中的MAT屏幕截图上看到。

您可以使用以下方式显示它:

Preferences - General - Show Heap Status checkbox

(自eclipse3.2起,默认情况下不再显示)

来自博客条目“Eclipse Tweaks: Monitor and run garbage collection on your Eclipse memory heap”:

alt text http://www.iheartair.com/samples/images/ShowHeapStatus.png

注意:一个更全面的解决方案是日食MAT (Memory Analyzer)

alt text

一个好的基于swing的Java替代方案是:

VisualVM ,也可以是used to browse head dump

alt text

答案 1 :(得分:2)

如果您只需要查看应用程序的内存使用情况(堆,永久生成等),但没有分析器的详细信息,请查看JConsole。它与JDK 1.5及更高版本捆绑在一起。

答案 2 :(得分:1)

当我在网上搜索显示JVM内存状态的现成Swing组件时,我发现了这个尚未解决的问题(现有的两个答案根本没有提供OP要求的内容),OP也是什么需要的。

我没有找到任何东西,所以我基于JProgressBar敲了一个非常简单的Swing组件。包括革命性的双击 - 垃圾收集功能。和Eclipse组件使用的文本相同。但是使用正确的SI单位。

使用适当的i18n等使其更灵活,留给读者练习。

以下是代码:

/*
 * (c) hubersn Software
 * www.hubersn.com
 * 
 * Use wherever you like, change whatever you want. It's free!
 */
package com.hubersn.playground.swing;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class MemoryPanelProgressBar extends JPanel {

  private final JProgressBar progressBar = new JProgressBar();

  public MemoryPanelProgressBar() {
    super(new FlowLayout());
    this.progressBar.setStringPainted(true);
    this.progressBar.setString("");
    this.progressBar.setMinimum(0);
    this.progressBar.setMaximum(100);
    this.progressBar.addMouseListener(new MouseAdapter() {
      @Override
      public void mouseClicked(final MouseEvent ev) {
        if (ev.getClickCount() == 2) {
          System.gc();
          update();
        }
      }
    });
    add(this.progressBar);
    Timer t = new Timer(1000, new ActionListener() {
      @Override
      public void actionPerformed(final ActionEvent e) {
        update();
      }
    });
    t.start();
    update();
  }

  private void update() {
    Runtime jvmRuntime = Runtime.getRuntime();
    long totalMemory = jvmRuntime.totalMemory();
    long maxMemory = jvmRuntime.maxMemory();
    long usedMemory = totalMemory - jvmRuntime.freeMemory();
    long totalMemoryInMebibytes = totalMemory / (1024 * 1024);
    long maxMemoryInMebibytes = maxMemory / (1024 * 1024);
    long usedMemoryInMebibytes = usedMemory / (1024 * 1024);
    int usedPct = (int) ((100 * usedMemory) / totalMemory);
    String textToShow = usedMemoryInMebibytes + "MiB of " + totalMemoryInMebibytes + "MiB";
    String toolTipToShow = "Heap size: " + usedMemoryInMebibytes + "MiB of total: " + totalMemoryInMebibytes + "MiB max: "
        + maxMemoryInMebibytes + "MiB";
    this.progressBar.setValue(usedPct);
    this.progressBar.setString(textToShow);
    this.progressBar.setToolTipText(toolTipToShow);
  }
}