java 代碼優化

Java程序中的內存管理機制是通過GC完成的,“一個對象創建后被放置在JVM的堆內存中,當永遠不在應用這個對象的時候將會被JVM在堆內存中回收。被創建的對象不能再生,同時也沒有辦法通過程序語句釋放”(這個是《Java的GC機制》中提到的定義,呵呵,還依稀記得)這就是GC對垃圾對象的定義。個人感覺這么解釋或許會比較快理解:在運行環境中JVM會對兩種內存進行管理,一種是堆內存(對象實例或者變量),一種是棧內存(靜態或非靜態方法),而JVM所管理的內存區域實際上就是堆內存+棧內存(MS:對象實例+實例化變量+靜態方法+非靜態方法),當JVM在其所管理的內存區域的中無法通過根集合到達對象的時候就會將此對象作為垃圾對象實施回收。

下面是我在項目中對代碼進行優化的幾點嘗試,備忘

1.循環優化
缺:

List?alist=uSvr.getUserinfoList();

??????????for(int?i=0;i<alist.size();i++){

}

此種方式會一直去執行alist.size()方法,帶來性能消耗,改為

for(int?i=0?p=alist.size();i<p;i++){
???
}


2.循環內不要創建對象
缺;

for(int?i=1;i<=domainCount;i++){
????????.????????????
AuditResult?auditResult?=?new?AuditResult();
????????????????..
}


這種做法會在內存中保存N份這個對象的引用//會浪費大量的內存空間,改為


AuditResult?auditResult;
for(int?i=1;i<=domainCount;i++){
????????.????????????
auditResult=new?AuditResult();
????????????????..
}

?3.? 什么樣的對象可以將其認定為不可視階段呢?舉個例子吧,在try{...}catch(Exception){...}代碼中,如果在try的代碼塊中聲明了一個obj,那么當整個 try{...}catch(Exception){...}代碼段執行完畢以后這個obj實際上就已經屬于不可視階段了。

所以,應該采用如下方式

try{
???
???Object?obj=new?Object();
}catch(Excepione?e){
obj=null;
}


4.少用new創建對象
用new關鍵詞創建類的實例時,構造函數鏈中的所有構造函數都會被自動調用。但如果一個對象實現了Cloneable接口,我們可以調用它的clone()方法。clone()方法不會調用任何類構造函數。
缺:
在使用設計模式(Design Pattern)的場合,如果用Factory模式創建對象,則改用clone()方法創建新的對象實例非常簡單。例如,下面是Factory模式的一個典型實現:?

public?static?Credit?getNewCredit()?
  {?
?????return?new?Credit();?

  }?


改為

private?static?Credit?BaseCredit?=?new?Credit();?
  public?static?Credit?getNewCredit()? {?
   return?(Credit)?BaseCredit.clone();?
  }?


當new創建對象不可避免時,注意避免多次的使用new初始化一個對象。 盡量在使用時再創建該對象。?
缺:

NewObject?object?=?new?NewObject();
int?value;
if(i>0?)
{
 value?=object.getValue();
}?

改為

int?value;
if(i>0?)
{
 NewObject?object?=?new?NewObject();
 Value?=object.getValue();
}?

5.乘法和除法考慮

缺:

 for?(val?=?0;?val?<?100000;?val?+=5)?{?
   alterX?=?val?*?8;?
   myResult?=?val?*?2;?
  }?

改為:

for?(val?=?0;?val?<?100000;?val?+=?5)?{?
   alterX?=?val?<<?3;?
   myResult?=?val?<<?1;?
  }?

6.盡量多的使用stringbuffer
7清除Session?
  通常情況,當達到設定的超時時間時,同時有些Session沒有了活動,服務器會釋放這些沒有活動的Session,.. 不過這種情況下,特別是多用戶并訪時,系統內存要維護多個的無效Session。?
當用戶退出時,應該手動釋放,回收資源,實現如下:

HttpSession?theSession?=?request.getSession();
//?獲取當前Session
if(theSession?!=?null){
 theSession.invalidate();?//?使該Session失效
}?




NOTE:堆內存是在JVM啟動的時候創建,堆內存分為新對象與老對象。對于新對象好像會分三個區域。當優先級最高的區域的堆棧滿了以后JVM將會進行測試,測試內容是那些對象不可到達,不可到達的對象將會放入到老對象區域。同時JVM會將所有對象拷貝到另外兩個區域中,然后經過一段時間依然沒有引用的對象會進入老對象區域。對于老對象區域而言基本上就是等待被GC回收的對象了。(這些還是在大學時學.net時候的知識,直接換成java定義我想其中概念應該一樣。

?

轉載于:https://www.cnblogs.com/likeju/p/5416385.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458072.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458072.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458072.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Halcon中OCR的實現及關鍵函數解析

OCR的實現共分為兩步&#xff0c;1是使用字符數據來訓練OCR。2是使用OCR進行字符的識別。 訓練分類器 訓練分類器共分為4步&#xff1a; 1是使用閾值來分割字符區域&#xff1b; 2是調用append_ocr_trainf函數將字符加入訓練集&#xff1b; 3是創建分類器&#xff1b; 4是…

MATLAB 長度和像素_Matlab中短時傅里葉變換 spectrogram和stft的用法

在Matlab中&#xff0c;做短時傅里葉變換需要使用函數spectrogram&#xff0c;而在Matlab2019中&#xff0c;引入了一個新的函數stft&#xff0c;下面我們就來看下這兩個函數都如何使用。短時傅里葉變換的基本原理就是將數據分段加窗&#xff0c;做fft&#xff0c;在分段時會有…

Qt 【關于控件樣式,鼠標進入、離開、點擊】

比如舉以下這個例子: QPushButton * okBtn; okBtn->setstylesheet("QPushButton{border-image:url(:/image/hello);}"); //這個是最常規的樣式 okBtn->setstylesheet("QPushButton{border-image:url(:/image/hello);}" //…

圖像處理基礎——灰度共生矩陣

標準定義如下&#xff1a;對于取定的方向θ 和距離 d, 在方向為θ的直線上, 一個像元灰度為 i, 另一個與其相距為 d 像元的灰度為 j 的點對出現的頻數即為灰度共生矩陣第(i, j)陣元的值。 怎樣理解呢&#xff1f;看起來好復雜呀 嗚嗚嗚 小白理解&#xff1a;灰度共生矩陣就…

iphone查看刪除的短信_iPhone12發布!剛買的蘋果手機短信全部消失了怎么辦?

原標題&#xff1a;iPhone12發布&#xff01;剛買的蘋果手機短信全部消失了怎么辦&#xff1f;目前&#xff0c;人們的社交除了面對面交談&#xff0c;用的最多的就是通過手機進行聊天&#xff0c;比如用QQ、微信和短信、郵件等方式&#xff0c;雖然短信不會用來一般的聊天&…

[唐詩]182宮中行樂詞(其一)-李白

宮中行樂詞(其一)-李白 小小生金屋&#xff0c; 盈盈在紫微。 山花插寶髻&#xff0c; 石竹繡羅衣。 每出深宮里&#xff0c; 常隨步輦歸。 只愁歌舞散&#xff0c; 化作彩云飛。

python基礎之01數據類型-變量-運算淺解

python的數據類型 1 數字 數字分為整型&#xff08;int&#xff09;&#xff0c;長整型&#xff08;long&#xff09;&#xff0c;浮點型&#xff08;float&#xff09;&#xff0c;復數&#xff08;complex&#xff09; 整型較為常用的功能&#xff1a; >>> a-4 >…

使用Caffe進行手寫數字識別執行流程解析

之前在 http://blog.csdn.net/fengbingchun/article/details/50987185 中仿照Caffe中的examples實現對手寫數字進行識別&#xff0c;這里詳細介紹下其執行流程并精簡了實現代碼&#xff0c;使用Caffe對MNIST數據集進行train的文章可以參考 http://blog.csdn.net/fengbingchun/…

obs可以裝手機嗎?_原神PC和手機數據互通嗎 PC和手機可以一起玩嗎

在原神中&#xff0c;很多玩家都在PC端創建了角色&#xff0c;那么疑問來了&#xff0c;PC端與手機端的賬號會是互通的嗎&#xff1f;下面小編就為大家帶來原神PC和手機數據互通嗎的相關內容&#xff0c;一起來看看吧&#xff01;更多攻略&#xff1a;原神攻略大全PC和手機數據…

學習linux第二周作業

第二周作業&#xff1a;本周作業內容&#xff1a;1、Linux上的文件管理類命令都有哪些&#xff0c;其常用的使用方法及其相關示例演示。touch,rm,mv,cp,file,ls,chmod,chown,ln,rename,touch 修改文件atime&#xff0c;如果文件不存在&#xff0c;那么創建該文件。rm&#xff1…

三維點云目標提取總結(續)

三維點云目標提取&#xff08;續&#xff09; 3.三維點云目標提取 3.1一般流程 先根據個人認識總結一下目標提取的一般性步驟&#xff1a; 如上所示&#xff0c;三維點云的目標提取關鍵性的兩步即為&#xff1a;特征提取與選擇、分類&#xff0c;是不是整個方法流程與圖像中的目…

安卓高手之路之java層Binder

很多人一提到Binder就說代理模式&#xff0c;人云亦云的多&#xff0c;能理解精髓的少。 本篇文章就從設計角度分析一下java層BInder的設計目標&#xff0c;以及設計思路&#xff0c;設計缺陷&#xff0c;從而駕馭它。 對于【邦德兒】的理解, 從通信的角度來看&#xff0c;就是…

ftp改為sftp_淺談 FTP、FTPS 與 SFTP

二狗子最近搭建了一個圖片分享網站&#xff0c;每天都有好多人在他的網站上傳許多照片&#xff0c;這些照片還會通過內部的邏輯同步到又拍云存儲中&#xff0c;非常方便。但不久后問題就來了&#xff0c;由于剛開始的用戶照片管理規劃沒有做好&#xff0c;隨著用戶上傳的圖片越…

如何解決秒殺的性能問題和超賣的討論

2019獨角獸企業重金招聘Python工程師標準>>> 最近業務試水電商&#xff0c;接了一個秒殺的活。之前經常看到淘寶的同行們討論秒殺&#xff0c;討論電商&#xff0c;這次終于輪到我們自己理論結合實際一次了。 ps&#xff1a;進入正文前先說一點個人感受&#xff0c;…

C# 從Excel中讀取時間數據

之前寫到從Excel中讀取時間數據 //讀取Excel數據Excel.Application xapp new Excel.Application();string filepath txt_Excel.Text;Excel.Workbook xbook xapp.Workbooks._Open(filepath, Missing.Value, Missing.Value,Missing.Value, Missing.Value, Missing.Value, Miss…

grid autosport額外內容下載慢_清理大王app下載-清理大王v1.0安卓下載

清理大王&#xff0c;下面由小編給大家介紹一下這款軟件&#xff0c;該軟件是一款非常不錯的手機清理服務應用軟件&#xff0c;清理大王app為用戶提供了手機垃圾清理&#xff0c;內存加速&#xff0c;優化手機&#xff0c;解決手機卡頓的情況。感興趣的朋友歡迎使用微俠下載&am…

(轉)瀏覽器兼容的JS寫法總結

&#xff0d;、元素查找問題1. document.all[name] (1)現有問題&#xff1a;Firefox不支持document.all[name] (2)解決方法&#xff1a;使用getElementsByName(name)&#xff0c;getElementById(id)等來替代。 2. 集合類對象問題 (1)現有問題&#xff1a;IE中對許多集合類對…

java面試總結(第一天)

臨近大學畢業&#xff0c;出來試試找工作&#xff0c;學c#出身&#xff0c;半路出家java&#xff0c;做過幾個ssh、stringMVC的項目。基礎知識不太扎實&#xff0c;勿噴 以下是我面試過程中遇到的問題 ----------------------------------------------------------------------…

怎么看cudnn的版本好_祖墳風水怎么看,好祖墳有什么征兆?

人們之所以看重祖墳的風水&#xff0c;是因為祖墳的風水與后代子孫的運勢密切相關&#xff0c;可以說祖墳的風水好不好關系著子孫后代的運勢順不順&#xff0c;因此對于祖墳的風水好壞人們是非常在意的&#xff0c;那么祖墳風水怎么看,好祖墳有什么征兆呢&#xff1f;下面是小編…

iOS - Swift SQLite 數據庫存儲

前言 采用 SQLite 數據庫來存儲數據。SQLite 作為一中小型數據庫&#xff0c;應用 iOS 中&#xff0c;跟前三種保存方式相比&#xff0c;相對比較復雜一些。注意&#xff1a;寫入數據庫&#xff0c;字符串可以采用 char 方式&#xff0c;而從數據庫中取出 char 類型&#xff0c…