欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
《Java最佳實(shí)踐》之用局部(堆)變量代替實(shí)例(類(lèi))變量- - - Rinso的專(zhuān)欄 - ...
如果您頻繁存取變量,就需要考慮從何處存取這些變量。變量是 static 變量,還是堆棧變量,或者是類(lèi)的實(shí)例變量?變量的存儲位置對存取它的代碼的性能有明顯的影響?例如,請考慮下面這段代碼:
class StackVars
{
  private int instVar;
  private static int staticVar;
 
  //存取堆棧變量
  void stackAccess(int val)
  {
    int j=0;
    for (int i=0; i<val; i++)
      j += 1;
  }
 
  //存取類(lèi)的實(shí)例變量
  void instanceAccess(int val)
  {
    for (int i=0; i<val; i++)
      instVar += 1;
  }  
 
  //存取類(lèi)的 static 變量
  void staticAccess(int val)
  {
    for (int i=0; i<val; i++)
      staticVar += 1;
  }
}    
 
這段代碼中的每個(gè)方法都執行相同的循環(huán),并反復相同的次數。唯一的不同是每個(gè)循環(huán)使一個(gè)不同類(lèi)型的變量遞增。方法 stackAccess 使一個(gè)局部堆棧變量遞增,instanceAccess 使類(lèi)的一個(gè)實(shí)例變量遞增,而 staticAccess 使類(lèi)的一個(gè) static 變量遞增。
instanceAccess 和 staticAccess 的執行時(shí)間基本相同。但是,stackAccess 要快兩到三倍。存取堆棧變量如此快是因為,JVM 存取堆棧變量比它存取 static 變量或類(lèi)的實(shí)例變量執行的操作少。
JVM 是一種基于堆棧的虛擬機,因此優(yōu)化了對堆棧數據的存取和處理。所有局部變量都存儲在一個(gè)局部變量表中,在 Java 操作數堆棧中進(jìn)行處理,并可被高效地存取。存取 static 變量和實(shí)例變量成本更高,因為 JVM 必須使用代價(jià)更高的操作碼,并從常數存儲池中存取它們。(常數存儲池保存一個(gè)類(lèi)型所使用的所有類(lèi)型、字段和方法的符號引用。)
通常,在第一次從常數存儲池中訪(fǎng)問(wèn) static 變量或實(shí)例變量以后,JVM 將動(dòng)態(tài)更改字節碼以使用效率更高的操作碼。盡管有這種優(yōu)化,堆棧變量的存取仍然更快。
考慮到這些事實(shí),就可以重新構建前面的代碼,以便通過(guò)存取堆棧變量而不是實(shí)例變量或 static 變量使操作更高效。請考慮修改后的代碼:
class StackVars
{
  //與前面相同...
  void instanceAccess(int val)
  {
    int j = instVar;
    for (int i=0; i<val; i++)
      j += 1;
    instVar = j;
  } 
 
  void staticAccess(int val)
  {
    int j = staticVar;
    for (int i=0; i<val; i++)
      j += 1;
    staticVar = j;
  }
}   
 
方法 instanceAccess 和 staticAccess 被修改為將它們的實(shí)例變量或 static 變量復制到局部堆棧變量中。當變量的處理完成以后,其值又被復制回實(shí)例變量或 static 變量中。這種簡(jiǎn)單的更改明顯提高了 instanceAccess 和 staticAccess 的性能。這三個(gè)方法的執行時(shí)間現在基本相同,instanceAccess 和 staticAccess 的執行速度只比 stackAccess 的執行速度慢大約 4%。
這并不表示您應該避免使用 static 變量或實(shí)例變量。您應該使用對您的設計有意義的存儲機制。例如,如果您在一個(gè)循環(huán)中存取 static 變量或實(shí)例變量,則您可以臨時(shí)將它們存儲在一個(gè)局部堆棧變量中,這樣就可以明顯地提高代碼的性能。這將提供最高效的字節碼指令序列供 JVM 執行。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
盡可能使用Stack變量?jì)?yōu)化java代碼
最全的Java筆試題庫之選擇題篇-總共234道【1~60】
java 詞匯表速查手冊
Java變量的作用范圍
Java的局部變量與成員變量
Java中堆、棧、常量池等概念解析
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久