/* * Copyright (c) 2013-2016 Chris Newland. * Licensed under https://github.com/AdoptOpenJDK/jitwatch/blob/master/LICENSE-BSD * Instructions: https://github.com/AdoptOpenJDK/jitwatch/wiki */ package org.adoptopenjdk.jitwatch.jarscan.invokecount; import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.C_COMMA; import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.C_DOUBLE_QUOTE; import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.S_NEWLINE; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.TreeMap; import org.adoptopenjdk.jitwatch.model.bytecode.Opcode; public class MethodCountMap { private Map<String, Integer> methodCountMap = new TreeMap<>(); public void count(String method) { Integer count = methodCountMap.get(method); if (count == null) { count = new Integer(1); } else { count++; } methodCountMap.put(method, count); } public String toString(Opcode prefix, int limitPerInvoke) { StringBuilder builder = new StringBuilder(); List<Map.Entry<String, Integer>> sortedList = new ArrayList<>(methodCountMap.entrySet()); Collections.sort(sortedList, new Comparator<Map.Entry<String, Integer>>() { @Override public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { return o2.getValue().compareTo(o1.getValue()); } }); int outputCount = 0; for (Map.Entry<String, Integer> entry : sortedList) { String methodName = entry.getKey(); Integer count = entry.getValue(); builder.append(C_DOUBLE_QUOTE).append(prefix.getMnemonic()).append(C_DOUBLE_QUOTE).append(C_COMMA); builder.append(C_DOUBLE_QUOTE).append(methodName).append(C_DOUBLE_QUOTE).append(C_COMMA); builder.append(count).append(S_NEWLINE); outputCount++; if (limitPerInvoke != 0 && outputCount == limitPerInvoke) { break; } } return builder.toString(); } }