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/cn.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灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP