java字串連線效能分析
s = i + ""
s = String.valueOf(i); //以下兩者也是等價的
s = "abc" + i; s = new StringBuilder("abc").append(i).toString(); 3、contat原始碼實現則是通過拷貝當前字串的char[]成員變數,然後進行擴容,之後再將拼接字串拷貝進去,開銷挺大 每次操作都會產生一個新的String物件 4、StringBuilder只新建了一個物件,通過檢視原始碼可以看到內部有一個char[]型別的動態陣列來儲存字串。 很顯然StringBuilder在開銷方面更小 5、StringBuffer則是執行緒安全的StringBuilder 寫個簡單的程式對比一下字串連線的效能:
/* * Copyright (C) 2009-2016 Hangzhou 2Dfire Technology Co., Ltd.All rights reserved */ package com.twofire.wechat.service; /** * StringCombineCostTimeTest * * @author shinan * @since 2017-03-03 */ public class StringCombineCostTimeTest { private static String request = "request"; private static String result = "result"; public static void combineTimeCost(int count) { combineByStringFormat(count); combineByStringPlusOperator(count); combineByStringBuilder(count); combineByStringConcat(count); System.out.println("---------------------------------------"); } public static void combineByStringFormat(int count) { long start = System.currentTimeMillis(); for (int i = 0; i< count;i++) { String combineResult = String.format("request = %s, result = %s", request, result); } long end = System.currentTimeMillis(); long cost = end - start; System.out.println(count + " combine String.format cost : " + cost); } public static void combineByStringPlusOperator(int count) { long start = System.currentTimeMillis(); for (int i = 0; i< count;i++) { String combineResult = "request = " + request + " result = " + result; } long end = System.currentTimeMillis(); long cost = end - start; System.out.println(count + " combine String add cost : " + cost); } public static void combineByStringBuilder(int count) { long start = System.currentTimeMillis(); for (int i = 0; i< count;i++) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("request = ").append(request).append(" result = ") .append(result); } long end = System.currentTimeMillis(); long cost = end - start; System.out.println(count + " combine StringBuilder cost : " + cost); } public static void combineByStringConcat(int count) { long start = System.currentTimeMillis(); for (int i = 0; i< count;i++) { String str = ""; str.concat("request = ").concat(request).concat(" result = ").concat(result); } long end = System.currentTimeMillis(); long cost = end - start; System.out.println(count + " combine Concat cost : " + cost); } public static void main(String[] args){ combineTimeCost(1000000); combineTimeCost(1000000); combineTimeCost(1000000); } }
耗時統計: String.format耗時最長 concat中等,+和StringBuilder較為接近 即時在做最簡單的拼接時,如果我們不想建立StringBuffer或StringBuilder例項的時候可以使用concat。但是對於大量的字串拼接操作,我們就不應該使用concat,因為concat會降低程式的效能,消耗cpu。因此,在不考慮執行緒安全和同步的情況下,為了獲得最高的效能,我們應儘量使用StringBuilder
相關推薦
java字串連線效能分析
字串連線一向是比較常用的 ,異常日誌輸出或者是文字的組裝等等,因此需要去思考選擇哪種方法效能最高 假設我們需要連線strA 和 strB 常用的幾種字串組裝方式如下: 1.String.format("%s%s",strA,strB) 2.srtA + strB 3.st
Java字串連線的效能問題
Java中使用+作為字串連線符,它是把多個字串合併成一個字串的方便途徑。對於單獨一行的輸出、或者較小的大小固定物件,使用連線符方便且合適。但是對於大規模的場景,字串連線符變得有些不合時宜。 以連線N個
希爾排序的Java實現、效能分析以及適用場景
1.希爾排序的Java實現: 程式碼如下: package com.zm.testSort; /** *希爾排序的最優化 * @author zm */ public class ShellS
使用JDK自帶的VisualVM進行Java程式的效能分析
VisualVM是什麼? VisualVM是JDK自帶的一個用於Java程式效能分析的工具,JDK安裝完畢後就有啦,在JDK安裝目錄的bin資料夾下能找到名稱為jvisualvm.exe。 要使用VisualVM分析您的應用效能,首先得讓Visual
直接插入排序的Java實現、效能分析以及適用場景
1.直接插入排序的Java實現: 程式碼如下: package com.zm.testSort; /** * 直接插入排序類 * @author zm */ public class InsertSort { public static v
Java字串連線
由於字串不可變性,使得“abc” + "123" 會建立3個物件:"abc"、"123"、“abc123”。而“abc” + "123" +"test"則會建立"abc"、“123”、“test”、"abc123" 、"abc123test"物件。由於該過程產生了很多不必要的
歸併排序的Java實現、效能分析以及適用場景
1.歸併排序的Java實現: 程式碼如下: package com.zm.testSort; /** * 歸併排序 * @author zm */ public class MergeSort
堆排序的Java實現、效能分析以及適用場景
1.堆排序的Java實現: 程式碼如下: package com.zm.testSort; /** * 堆排序 * @author zm */ public class HeapSort {
氣泡排序的Java實現、效能分析以及適用場景
1.氣泡排序的Java實現: 程式碼如下: package com.zm.testSort; public class BubbleSort { public static void getBubbleSort(int[] a) {
Java 字串拼接 五種方法的效能比較分析 “+”、contact、join、append
一、五種方法分析: 1. 加號 “+” 2. String contact() 方法 3. StringUtils.join() 方法 4. StringBuffer append() 方法 5. StringBuilder append() 方法 二、優劣勢分析 開
字串全排列(效能分析Java版)
具體的思路我就不寫了,借用網上的一張圖來表示: 我的程式碼如下: import java.util.*; public class Solution { public ArrayList<String> Permutation(String str
java四種字串拼接方式效能分析
前幾天寫一個防重複提交的元件的時候,有一個操作是需要將各個欄位的字串拼接成一個requestKey。看了別人的程式碼,我發現,中介軟體這種東西,每天都要處理幾百幾千萬的請求,但是裡面很多字串拼接的時候還是很原始的“+”號拼接,如果將所有的字串拼接操作都換成更高效
Java 字串拼接四種方式的效能比較分析
一、簡單介紹 編寫程式碼過程中,使用"+"和"contact"比較普遍,但是它們都不能滿足大資料量的處理,一般情況下有一下四種方法處理字串拼接,如下: 1、 加號"+" 2、 String的 contact()方法 3、 StringBuffer 的 append()方法 4、 StringBuil
Java 字串拼接 五種方法的效能比較分析
> 字串拼接一般使用“+”,但是“+”不能滿足大批量資料的處理,Java中有以下五種方法處理字串拼接,各有優缺點,程式開發應選擇合適的方法實現。1. 加號 “+”2. String contact() 方法3. StringUtils.join() 方法4. Strin
hibernate抓取策略效能分析,子查詢/連線查詢效能對比
https://blog.csdn.net/qq_40762011/article/details/82993283 https://blog.csdn.net/lzm18064126848/article/details/50578285 https://blog.csdn.net/luckarecs/
表連線join查詢與where後使用子查詢的效能分析
宣告:本文摘自https://www.cnblogs.com/cdf-opensource-007/p/6540521.html 子查詢就是在一條查詢語句中還有其它的查詢語句,主查詢得到的結果依賴於子查詢的結果。 子查詢的子語句可以在一條sql語句的FROM,JOIN,和WHERE後面,本文主要針對在WH
cmake:gperftools效能分析工具find libprofiler 指令碼暨profiler的靜態連線問題
gperftools是一個很好用的效能分析工具,但沒有提供官方的用於查詢profiler庫的cmake指令碼,所以在基於cmake管理的專案中如果要在系統查詢libprofiler庫就就要自己寫FindPROFILER.cmake指令碼。 將指令碼所在的資料夾加入CMAKE_MODULE
Go 字串連線+=與strings.Join效能對比
Go字串連線 對於字串的連線大致有兩種方式: 1、通過+號連線 func StrPlus1(a []string) string { var s, sep string for i := 0; i < len(a); i++ { s += sep + a[i]
java程式效能分析之thread dump和heap dump
一.dump基本概念 在故障定位(尤其是out of memory)和效能分析的時候,經常會用到一些檔案來幫助我們排除程式碼問題。這些檔案記錄了JVM執行期間的記憶體佔用、執行緒執行等情況,這就是我們常說的dump檔案。常用的有heap dump和threa
Java的知識點5——擴充套件賦值運算子、 關係運算符、 邏輯運算子、字串連線符、 條件運算子
擴充套件運算子 程式 public class Dd1 { public static void main(String[] args) { int a=3; int b=4; a+=b;//相當於a=a+b; System.out.println("a