java 板


LINE

我剛開始學習Java的時候, 為了處理一個資料分析問題, 把所有的資料放在單機版運算, 大約存放500萬筆資料, 大約用了20G的Ram。 那時候是一個初學者, 每一個物件裡面,所包的變數都是資料容器類別, 字串也是直接使用String. 一個變數就占用了很多記憶體。 大概就是這樣寫吧。 public class DTO{ public ArrayList<String> A=new ArrayList<>(); public TreeMap<String,String> B=new ArrayList<>(); ....都利用資料容器類別.... } 後來在公司前輩的指導下, 大幅改變了寫作的習慣, 資料的變數表達,盡可能空間的使用上精簡。 例如可以用簡單的array的地方,那就估算可能的值, 不要用到ArrayList<>這種物件, String能用char來處理,也可以用char來處理。 還有就是學會單例模式, 能夠呼叫一次的,就呼叫一次,不要每一次呼叫都要生一個。 public class A{ private A Instance=null; public static getInstance(){ if(A==null){ Instance=new A(); } return Instance; } .... } 大概改成這樣之後, 記憶體的空間就降低很多,2-3G就可以跑完。 也知道好的程式和壞的程式的差別就在這裡。 70萬筆資料,以我過往經驗,應該不會超過2G。 以上的小小經驗,給各位做一個參考, 是以前學Java的心得。 ※ 引述《baconcsie (Bacon)》之銘言: : read load,如果不使用緩衝區,除了因為直接硬碟讀寫,可能比較慢之外 : 還會有什麼缺點嗎? : 還有就是,最近在算數據時,都會先把數據大量讀入程式,理論上就是先放入了RAM : 這樣在運算數據時會比較快,每筆數據我用一個物件儲存,物件中約有10來個變數, : 總共會有30萬~75萬個物件。 : 可是RAM好容易就爆掉,不知道是真的數據太大,還是我程式的缺陷,還是java的缺陷。 : 大家有任何的建議嗎? --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.85.182.195
※ 文章網址: http://webptt.com/m.aspx?n=bbs/java/M.1409451281.A.D2A.html ※ 編輯: chen1025 (219.85.182.195), 08/31/2014 10:29:15
1F:→ Killercat: singleton幫助很大 不過要注意thread safe的問題 08/31 15:31
2F:→ Killercat: 但是其他的...老實講除非你資料巨大到一個地步 08/31 15:31
3F:→ Killercat: 不然我不認為這樣有很顯著的改善。有Profile過嗎? 08/31 15:31
4F:→ chen1025: 70萬的數據並不大,可以計算多少記憶體。通常不超過500M 08/31 16:27
5F:→ chen1025: 會用爆 通常是用太多物件容器 或是內部資料型別太複雜 08/31 16:30
6F:→ chen1025: 當然xmx 也要設定 08/31 16:55
7F:推 baconcsie: 感恩 09/01 06:12
8F:推 baconcsie: 不過那個單例模式還是不太懂 能否解釋的更詳細點呢? 09/01 06:25
9F:→ LPH66: 就去 google 「單例模式」或者英文「Singleton pattern」 09/01 07:59
10F:→ adrianshum: Singleton 十居其九都是不必要的。 09/06 12:07
11F:→ Killercat: 基本上我個人認為唯一必要的就是System Context 09/06 15:26
12F:→ Killercat: 但是包含Spring在內 大家都在比濫用的.... 09/06 15:27
13F:→ Killercat: 所以就...大家一起濫用吧 :D 09/06 15:27
14F:→ adrianshum: Spring 裡很少Singleton 吧。有 DI 的話,99% 的 09/07 21:08
15F:→ adrianshum: Singleton 就更加變得不必要。(這裡指的不是 Spring 09/07 21:08
16F:→ adrianshum: 的 Singleton-scope 的 bean) 09/07 21:08
17F:→ adrianshum: 另,這篇裡說的也不太合理。能估算大小的話,用 09/07 21:09
18F:→ adrianshum: ArrayList 配合提供 initial size的 ctor, 比直接用 09/07 21:10
19F:→ adrianshum: array 大不了大個十多二十byte. String 轉 char 也是 09/07 21:23
20F:→ adrianshum: 古怪。兩者的 semantic meaning 根本不一樣。 09/07 21:23
21F:→ adrianshum: 每call 一次生成一個本來就是你的設計出問題。 09/07 21:24
22F:→ adrianshum: 另外你寫的 singleton 更是typical 有問題的做法. 09/07 21:25
23F:→ adrianshum: 請google : java singleton lazy initialization 09/07 21:25
24F:→ Killercat: 我很少在Spring裡面「合理」使用@Autowire的..... 09/07 21:26
25F:→ adrianshum: 你那堆所謂改善,我稱為 premature optimization 09/07 21:26
26F:→ Killercat: ^看到 09/07 21:26
27F:→ adrianshum: @Killercat: Autowiring 又是另一課題了.... 09/07 21:26
28F:→ Killercat: 不過我贊同你的說法,我自己本身除了context外 09/07 21:27
29F:→ Killercat: 基本上是不用singleton的 09/07 21:27
30F:→ Killercat: Autowire...難道跟singleton是不同東西嗎? XD 09/07 21:28
31F:→ adrianshum: Autowire 和 singleton 要扯上關係實在有點牽強 09/09 18:05
32F:推 baconcsie: 推樓上們!! 讓我受益良多 09/12 06:04







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP