Skip to content

Commit

Permalink
IDEMPIERE-6130 Move garbage collection to a button in About Window (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
CarlosRuiz-globalqss committed Apr 27, 2024
1 parent ff19f11 commit 0676356
Showing 1 changed file with 44 additions and 14 deletions.
Expand Up @@ -85,9 +85,9 @@
*/
public class AboutWindow extends Window implements EventListener<Event> {
/**
* generated serial id
*
*/
private static final long serialVersionUID = -4235323239552159150L;
private static final long serialVersionUID = -5590393631865037228L;

/** Logger */
private static final CLogger log = CLogger.getCLogger(AboutWindow.class);
Expand All @@ -104,6 +104,7 @@ public class AboutWindow extends Window implements EventListener<Event> {

protected Button btnAdempiereLog;
protected Button btnReloadLogProps;
protected Button btnGC;

private Listbox levelListBox;

Expand All @@ -120,15 +121,6 @@ public AboutWindow() {
*/
private void init() {

Runtime runtime = Runtime.getRuntime();
long usedMemoryBefore = runtime.totalMemory() - runtime.freeMemory();
System.runFinalization();
System.gc();
try {Thread.sleep(100);} catch (InterruptedException e) {} // Give some time for GC to complete
long usedMemoryAfter = runtime.totalMemory() - runtime.freeMemory();
long freedMemory = usedMemoryAfter - usedMemoryBefore;
log.warning(String.format("Memory: total %,d, before gc: %,d, after gc %,d, freed by gc %,d bytes%n", runtime.totalMemory(), usedMemoryBefore, usedMemoryAfter, freedMemory));

this.setPosition("center");
this.setTitle(ThemeManager.getBrowserTitle());
this.setSclass("popup-dialog about-window");
Expand Down Expand Up @@ -257,11 +249,11 @@ protected Tabpanel createTrace() {
}
}

MUser user = MUser.get(Env.getCtx());
levelListBox.setEnabled(false);
if (Env.getAD_Client_ID(Env.getCtx()) == 0)
if (user.isAdministrator())
{
MUser user = MUser.get(Env.getCtx());
if (user.isAdministrator())
if (Env.getAD_Client_ID(Env.getCtx()) == 0)
{
levelListBox.setEnabled(true);
levelListBox.setTooltiptext("Set trace level. Warning: this will effect all session not just the current session");
Expand All @@ -274,13 +266,26 @@ protected Tabpanel createTrace() {
hbox.appendChild(new Space());
hbox.appendChild(btnAdempiereLog);

ZKUpdateUtil.setHflex(hbox, "1");
ZKUpdateUtil.setVflex(hbox, "0");
vbox.appendChild(hbox);
hbox = new Hbox();
hbox.setAlign("center");
hbox.setPack("start");

btnReloadLogProps = new Button("Reload Log Props");
btnReloadLogProps.setTooltiptext("Reload the configuration of log levels from idempiere.properties file");
LayoutUtils.addSclass("txt-btn", btnReloadLogProps);
btnReloadLogProps.addEventListener(Events.ON_CLICK, this);
hbox.appendChild(new Space());
hbox.appendChild(btnReloadLogProps);
}
btnGC = new Button("Garbage Collect");
btnGC.setTooltiptext("Perform a Garbage Collection on the JVM");
LayoutUtils.addSclass("txt-btn", btnGC);
btnGC.addEventListener(Events.ON_CLICK, this);
hbox.appendChild(new Space());
hbox.appendChild(btnGC);
}

ZKUpdateUtil.setHflex(hbox, "1");
Expand Down Expand Up @@ -506,6 +511,8 @@ else if (event.getTarget() == btnAdempiereLog)
downloadAdempiereLogFile();
else if (event.getTarget() == btnReloadLogProps)
reloadLogProps();
else if (event.getTarget() == btnGC)
garbageCollection();
else if (event.getTarget() == levelListBox)
setTraceLevel();
else if (Events.ON_CLICK.equals(event.getName()))
Expand Down Expand Up @@ -562,6 +569,29 @@ private void reloadLogProps() {
}
}

/**
* Call JVM GC
*/
private void garbageCollection() {
Runtime runtime = Runtime.getRuntime();
long usedMemoryBefore = runtime.totalMemory() - runtime.freeMemory();
System.runFinalization();
System.gc();
try {Thread.sleep(1000);} catch (InterruptedException e) {} // Wait 1 second for GC to complete
long usedMemoryAfter = runtime.totalMemory() - runtime.freeMemory();
long freedMemory = usedMemoryAfter - usedMemoryBefore;
String msg = String.format("Memory: total %,d, before gc: %,d, after gc %,d, freed by gc %,d bytes%n", runtime.totalMemory(), usedMemoryBefore, usedMemoryAfter, freedMemory);
log.warning(msg);
msg = String.format("Memory in bytes:<ul>"
+ "<li>Total = %,d</li>"
+ "<li>Used before gc = %,d</li>"
+ "<li>Used after gc = %,d</li>"
+ "<li>Freed by gc = %,d</li>"
+ "</ul>",
runtime.totalMemory(), usedMemoryBefore, usedMemoryAfter, freedMemory);
Dialog.info(0, "", msg, "JVM Garbage Collection");
}

/**
* Change trace/log level
*/
Expand Down

0 comments on commit 0676356

Please sign in to comment.