我需要Java Swing Free Memory组件(类似于Eclipse IDE中的组件)。优选地是免费的(和开源的)。提前谢谢。
答案 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”:
注意:一个更全面的解决方案是日食MAT (Memory Analyzer)?
一个好的基于swing的Java替代方案是:
VisualVM ,也可以是used to browse head dump。
答案 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);
}
}