public void run() { while (true) { try { if (thread.isInterrupted() && !started) { break; } Thread.sleep(measureInterval); } catch (InterruptedException ignore) { if (!started) { break; } } long maxMemory = runtime.maxMemory(); long totalMemory = runtime.totalMemory(); long freeMemory = runtime.freeMemory(); long availableMemory = freeMemory + maxMemory - totalMemory; double availableMemoryPercent = 100.0 * availableMemory / maxMemory; StringBuilder info = new StringBuilder(); info.append(String.format("free memory: %s%n", SizeFormatterUtil.sizeof(freeMemory))); info.append(String.format("max memory: %s%n", SizeFormatterUtil.sizeof(maxMemory))); info.append(String.format("total memory: %s%n", SizeFormatterUtil.sizeof(totalMemory))); info.append(String.format("available memory: %.2f%%%n", availableMemoryPercent)); if (HornetQLogger.LOGGER.isDebugEnabled()) { HornetQLogger.LOGGER.debug(info); } if (availableMemoryPercent <= memoryWarningThreshold) { HornetQLogger.LOGGER.memoryError(memoryWarningThreshold, info.toString()); low = true; } else { low = false; } } }