亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

java new String(byte)當參數和String引用當參數有什么區別

java new String(byte)當參數和String引用當參數有什么區別

嗶嗶one 2019-03-12 18:15:29
byte[] test = (sb.toString()).getBytes();testString(new String(test));相對于:byte[] test = (sb.toString()).getBytes();String temp = new String(test);testString(temp);這樣有什么區別?為什么第一種比第二種性能方面低很多,而且會有莫名其妙的異常。出問題經常的由于byte[]數組比較大。小的時候看不出來問題。
查看完整描述

1 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

如果你對JVM方面沒有了解的話,建議不要去談什么性能,而且性能也不是這么測的。

方法的參數和局部變量對應虛擬機棧1棧幀2中的局部變量表3,引用類型占一個槽SLOT,所以你第二種寫法區別是棧幀多一個槽,創建String對象后,對象的引用在操作數棧4上,通過aload指令保存到本地變量表,調用testString方法的時候通過aload指令壓到操作數棧棧頂。

總結:棧幀多一個SLOT,方法調用多了兩條指令,JIT預熱之后多余指令會被消除,實際沒有區別。


  1. 2.5.2. Java Virtual Machine Stacks ?

  2. 2.6. Frames ?

  3. 2.6.1. Local Variables ?

  4. 2.6.2. Operand Stacks ?


查看完整回答
反對 回復 2019-04-24
  • 1 回答
  • 0 關注
  • 1458 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號