瀏覽代碼

Optimize HashMap Initial Capacity. (#4896)

zhuangchong 4 年之前
父節點
當前提交
a388b6853d

+ 2 - 2
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/BaseController.java

@@ -48,7 +48,7 @@ public class BaseController {
      * @return check result code
      */
     public Map<String, Object> checkPageParams(int pageNo, int pageSize) {
-        Map<String, Object> result = new HashMap<>(2);
+        Map<String, Object> result = new HashMap<>(4);
         Status resultEnum = Status.SUCCESS;
         String msg = Status.SUCCESS.getMsg();
         if (pageNo <= 0) {
@@ -202,7 +202,7 @@ public class BaseController {
         result.setCode(Status.SUCCESS.getCode());
         result.setMsg(Status.SUCCESS.getMsg());
 
-        Map<String, Object> map = new HashMap<>(4);
+        Map<String, Object> map = new HashMap<>(8);
         map.put(Constants.TOTAL_LIST, totalList);
         map.put(Constants.CURRENT_PAGE, currentPage);
         map.put(Constants.TOTAL_PAGE, totalPage);

+ 8 - 1
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/CollectionUtils.java

@@ -46,6 +46,11 @@ public class CollectionUtils {
         throw new UnsupportedOperationException("Construct CollectionUtils");
     }
 
+    /**
+     * The load factor used when none specified in constructor.
+     */
+    static final float DEFAULT_LOAD_FACTOR = 0.75f;
+
     /**
      * Returns a new {@link Collection} containing <i>a</i> minus a subset of
      * <i>b</i>.  Only the elements of <i>b</i> that satisfy the predicate
@@ -95,6 +100,7 @@ public class CollectionUtils {
      * @return string to map
      */
     public static Map<String, String> stringToMap(String str, String separator, String keyPrefix) {
+
         Map<String, String> emptyMap = new HashMap<>(0);
         if (StringUtils.isEmpty(str)) {
             return emptyMap;
@@ -103,7 +109,8 @@ public class CollectionUtils {
             return emptyMap;
         }
         String[] strings = str.split(separator);
-        Map<String, String> map = new HashMap<>(strings.length);
+        int initialCapacity = (int)(strings.length / DEFAULT_LOAD_FACTOR) + 1;
+        Map<String, String> map = new HashMap<>(initialCapacity);
         for (int i = 0; i < strings.length; i++) {
             String[] strArray = strings[i].split("=");
             if (strArray.length != 2) {

+ 1 - 1
dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/quartz/QuartzExecutors.java

@@ -370,7 +370,7 @@ public class QuartzExecutors {
      * @return data map
      */
     public static Map<String, Object> buildDataMap(int projectId, int scheduleId, Schedule schedule) {
-        Map<String, Object> dataMap = new HashMap<>(3);
+        Map<String, Object> dataMap = new HashMap<>(8);
         dataMap.put(PROJECT_ID, projectId);
         dataMap.put(SCHEDULE_ID, scheduleId);
         dataMap.put(SCHEDULE, JSONUtils.toJsonString(schedule));