private void insertSubLCommandInfo(final SubLCommandInfo subLCommandInfo) {
    //// Preconditions 
    assert subLCommandInfo != null : "subLCommandInfo must not be null";
    assert mostTimeConsumingSubLCommandInfos != null : "mostTimeConsumingSubLCommandInfos must not be null";
    assert MOST_TIME_CONSUMING_API_REQUEST_INFOS_LIST_MAX_SIZE > 0 : "MOST_TIME_CONSUMING_API_REQUEST_INFOS_LIST_MAX_SIZE must be positive";
    
    synchronized (mostTimeConsumingSubLCommandInfos_lock) {
      if (mostTimeConsumingSubLCommandInfos.size() == MOST_TIME_CONSUMING_API_REQUEST_INFOS_LIST_MAX_SIZE) {
        final SubLCommandInfo firstSubLCommandInfo = (SubLCommandInfo) mostTimeConsumingSubLCommandInfos.getFirst();
        if (subLCommandInfo.compareTo(firstSubLCommandInfo) == -1)
          // do not insert if the list is maxed out and this info is less than the first one
          return;
      }
      final int searchIndex = Collections.binarySearch(mostTimeConsumingSubLCommandInfos, subLCommandInfo);
      final int insertIndex = (searchIndex >= 0) ? searchIndex : - searchIndex - 1;
      mostTimeConsumingSubLCommandInfos.add(insertIndex, subLCommandInfo);
      if (mostTimeConsumingSubLCommandInfos.size() > MOST_TIME_CONSUMING_API_REQUEST_INFOS_LIST_MAX_SIZE)
        mostTimeConsumingSubLCommandInfos.removeFirst();
    }
  }