我想使用 java.lang.management
API 获取 Java 程序中某个时刻之前分配的总内存。到目前为止,这就是我所拥有的:
ManagementFactory.getMemoryPoolMXBeans()
.stream()
.map(MemoryPoolMXBean::getPeakUsage)
.filter(usage -> usage != null)
.mapToLong(MemoryUsage::getUsed)
.sum();
我想知道这段代码是否能达到我想要的效果,或者结果是否会产生误导和/或不正确。
您将通过此代码获得有关当前内存使用情况的准确结果。
以下是示例代码供您引用:
long heapSize = Runtime.getRuntime().totalMemory();
long max = Runtime.getRuntime().maxMemory();
StringBuilder message = new StringBuilder();
message.append("Heap Size = ").append(formatSize(heapSize)).append("\n");
message.append("Max Heap Size = ").append(formatSize(max)).append("\n");
for (MemoryPoolMXBean pool : ManagementFactory.getMemoryPoolMXBeans()) {
String name = pool.getName();
MemoryType type = pool.getType();
MemoryUsage usage = pool.getUsage();
MemoryUsage peak = pool.getPeakUsage();
message.append("Heap named '").append(name);
message.append("' (").append(type.toString()).append(") ");
message.append("uses ").append(usage.getUsed());
message.append(" of ").append(usage.getMax());
message.append(". The max memory used so far is ");
message.append(peak.getUsed()).append(".\n");
}
System.out.println(message.toString());
希望这对您有帮助。
我是一名优秀的程序员,十分优秀!