/* (c) 2014 LinkedIn Corp. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of the * License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. */ package com.linkedin.cubert.utils; import java.lang.management.GarbageCollectorMXBean; import java.lang.management.ManagementFactory; public class MemoryStats { public static void print(String msg) { final int mb = 1024 * 1024; Runtime runtime = Runtime.getRuntime(); System.out.println(String.format("### %s %.2fMB used, %.2fMB free, %.2fMB total, %.2fMB max", msg, 1.0 * (runtime.totalMemory() - runtime.freeMemory()) / mb, 1.0 * runtime.freeMemory() / mb, 1.0 * runtime.totalMemory() / mb, 1.0 * runtime.maxMemory() / mb)); } public static void printGCStats() { long totalGarbageCollections = 0; long garbageCollectionTime = 0; for(GarbageCollectorMXBean gc : ManagementFactory.getGarbageCollectorMXBeans()) { long count = gc.getCollectionCount(); if(count >= 0) { totalGarbageCollections += count; } long time = gc.getCollectionTime(); if(time >= 0) { garbageCollectionTime += time; } } print.f("MemoryStats: #GC calls: %d Total GC Time: %d ms", totalGarbageCollections, garbageCollectionTime); } }