docs: public Map<String, Object> getThreadCpuUsages(CpuUsageComparator cmp) {
      final CpuUsage overall = getOverallCpuUsage();
      final List<CpuUsage> usages = getThreadCpuUsages();
      final Map<String, Object> result = new HashMap<>();
  
      Collections.sort(usages, cmp);
  
      final Date now = new Date();
      result.put(CURRENT_TIME, now.getTime());
  
      final long uptimeMillis = ManagementFactory.getRuntimeMXBean().getUptime();
      final long uptimeNanos = TimeUnit.NANOSECONDS.convert(uptimeMillis, TimeUnit.MILLISECONDS);
      result.put(UPTIME_MS, uptimeMillis);
  
      final Map<String, Long> jvmUsageTime = new HashMap<>();
      jvmUsageTime.put(ONE_MIN, overall.getOneMinute());
      jvmUsageTime.put(FIVE_MIN, overall.getFiveMinute());
      jvmUsageTime.put(FIFTEEN_MIN, overall.getFifteenMinute());
      jvmUsageTime.put(OVERALL, overall.getOverall());
      result.put(JVM_USAGE_TIME, jvmUsageTime);
  
      final Map<String, Double> jvmUsagePercent = new HashMap<>();
      final int numProcs = Runtime.getRuntime().availableProcessors();
      jvmUsagePercent.put(ONE_MIN, toPercent(overall.getOneMinute(),
          ONE_MINUTE_NANOS * numProcs));
      jvmUsagePercent.put(FIVE_MIN, toPercent(overall.getFiveMinute(),
          FIVE_MINUTE_NANOS * numProcs));
      jvmUsagePercent.put(FIFTEEN_MIN, toPercent(overall.getFifteenMinute(),
          FIFTEEN_MINUTE_NANOS * numProcs));
      jvmUsagePercent.put(OVERALL, toPercent(overall.getOverall(), uptimeNanos * numProcs));
      result.put(JVM_USAGE_PERCENT, jvmUsagePercent);
  
      List<Map<String, Object>> threads = new ArrayList<>();
      for (CpuUsage usage : usages) {
        Map<String, Object> threadInfo = new HashMap<>();
        threadInfo.put(ONE_MIN, toPercent(usage.getOneMinute(), overall.getOneMinute()));
        threadInfo.put(FIVE_MIN, toPercent(usage.getFiveMinute(), overall.getFiveMinute()));
        threadInfo.put(FIFTEEN_MIN, toPercent(usage.getFifteenMinute(),
            overall.getFifteenMinute()));
        threadInfo.put(OVERALL, toPercent(usage.getOverall(), overall.getOverall()));
        threadInfo.put(ID, usage.getThreadId());
        threadInfo.put(NAME, usage.getName());
        threads.add(threadInfo);
      }
      result.put(THREADS, threads);
      return result;
    }