private static void printMemoryUsage(final String phaseName, final FunctionNode functionNode) { LOG.info(phaseName + " finished. Doing IR size calculation..."); final ObjectSizeCalculator osc = new ObjectSizeCalculator(ObjectSizeCalculator.getEffectiveMemoryLayoutSpecification()); osc.calculateObjectSize(functionNode); final List<ClassHistogramElement> list = osc.getClassHistogram(); final StringBuilder sb = new StringBuilder(); final long totalSize = osc.calculateObjectSize(functionNode); sb.append(phaseName).append(" Total size = ").append(totalSize / 1024 / 1024).append("MB"); LOG.info(sb); Collections.sort(list, new Comparator<ClassHistogramElement>() { @Override public int compare(ClassHistogramElement o1, ClassHistogramElement o2) { final long diff = o1.getBytes() - o2.getBytes(); if (diff < 0) { return 1; } else if (diff > 0) { return -1; } else { return 0; } } }); for (final ClassHistogramElement e : list) { final String line = String.format(" %-48s %10d bytes (%8d instances)", e.getClazz(), e.getBytes(), e.getInstances()); LOG.info(line); if (e.getBytes() < totalSize / 200) { LOG.info(" ..."); break; // never mind, so little memory anyway } } }
private void printMemoryUsage(final FunctionNode functionNode, final String phaseName) { if (!log.isEnabled()) { return; } log.info(phaseName, "finished. Doing IR size calculation..."); final ObjectSizeCalculator osc = new ObjectSizeCalculator(ObjectSizeCalculator.getEffectiveMemoryLayoutSpecification()); osc.calculateObjectSize(functionNode); final List<ClassHistogramElement> list = osc.getClassHistogram(); final StringBuilder sb = new StringBuilder(); final long totalSize = osc.calculateObjectSize(functionNode); sb.append(phaseName). append(" Total size = "). append(totalSize / 1024 / 1024). append("MB"); log.info(sb); Collections.sort(list, new Comparator<ClassHistogramElement>() { @Override public int compare(final ClassHistogramElement o1, final ClassHistogramElement o2) { final long diff = o1.getBytes() - o2.getBytes(); if (diff < 0) { return 1; } else if (diff > 0) { return -1; } else { return 0; } } }); for (final ClassHistogramElement e : list) { final String line = String.format(" %-48s %10d bytes (%8d instances)", e.getClazz(), e.getBytes(), e.getInstances()); log.info(line); if (e.getBytes() < totalSize / 200) { log.info(" ..."); break; // never mind, so little memory anyway } } }