第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果性能很重要,我應該使用Java的String.format()嗎?

如果性能很重要,我應該使用Java的String.format()嗎?

ibeautiful 2019-12-10 09:08:19
我們必須一直構(gòu)建String以便進行日志輸出等等。在JDK版本中,我們了解了何時使用StringBuffer(很多追加,線程安全)和StringBuilder(很多追加,非線程安全)。有什么使用建議String.format()?是高效的,還是在性能很重要的情況下,我們被迫堅持采用單線連接?例如丑陋的舊風格,String s = "What do you get if you multiply " + varSix + " by " + varNine + "?";與整潔的新樣式(String.format,可能會更慢)相比,String s = String.format("What do you get if you multiply %d by %d?", varSix, varNine);注意:我的特定用例是整個代碼中數(shù)百個“單行”日志字符串。它們不涉及循環(huán),所以StringBuilder也太重了。我String.format()特別感興趣。
查看完整描述

3 回答

?
烙印99

TA貢獻1829條經(jīng)驗 獲得超13個贊

我使用了hhafez代碼并添加了一個內(nèi)存測試:


private static void test() {

    Runtime runtime = Runtime.getRuntime();

    long memory;

    ...

    memory = runtime.freeMemory();

    // for loop code

    memory = memory-runtime.freeMemory();

我為每種方法,“ +”運算符String.format和StringBuilder(調(diào)用toString())分別運行此命令,因此所使用的內(nèi)存不會受到其他方法的影響。我添加了更多串聯(lián),使字符串成為“ Blah” + i +“ Blah” + i +“ Blah” + i +“ Blah”。


結(jié)果如下(每次平均運行5次):

接近時間(毫秒)分配的內(nèi)存(長)

'+'運算符747 320,504 

String.format 16484 373,312 

StringBuilder 769 57,344


我們可以看到String'+'和StringBuilder在時間上實際上是相同的,但是StringBuilder在內(nèi)存使用方面效率更高。當我們在足夠短的時間間隔內(nèi)進行許多日志調(diào)用(或任何其他其他涉及字符串的語句)時,這非常重要,這樣垃圾收集器將無法清理由'+'運算符引起的許多字符串實例。


還有一個注意事項,順便說一句,不要忘記在構(gòu)造消息之前檢查日志記錄級別。


結(jié)論:


我將繼續(xù)使用StringBuilder。

我的時間太多或生活太少。



查看完整回答
反對 回復 2019-12-11
?
慕慕森

TA貢獻1856條經(jīng)驗 獲得超17個贊

JAVAC 1.6會自動將您以前的丑陋樣式編譯為:


StringBuilder sb = new StringBuilder("What do you get if you multiply ");

sb.append(varSix);

sb.append(" by ");

sb.append(varNine);

sb.append("?");

String s =  sb.toString();

因此,這與使用StringBuilder絕對沒有區(qū)別。


String.format具有更大的重量,因為它創(chuàng)建了一個新的Formatter,解析了您的輸入格式字符串,創(chuàng)建了一個StringBuilder,將所有內(nèi)容附加到它并調(diào)用toString()。



查看完整回答
反對 回復 2019-12-11
  • 3 回答
  • 0 關注
  • 365 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號