java中如何优化内存

liuyang_77 2010-07-27 07:00:30
帮帮忙,给个意见
...全文
279 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
longlingxiu 2010-07-29
  • 打赏
  • 举报
回复
java 有自动垃圾垃圾回收机制--gc gc自己就根据情况进行优化了
joaryyu 2010-07-29
  • 打赏
  • 举报
回复
能不new 对象,就不new 对象!
lixi_catchyou 2010-07-29
  • 打赏
  • 举报
回复
(8)少使用内部类
增加一个内部类,会增加1K左右的内存空间。
lixi_catchyou 2010-07-29
  • 打赏
  • 举报
回复
(1)不要显式调用System.gc()
此函数建议JVM进行主GC,虽然只是建议而非一定,但很多情况下它会触发主GC,从而增加主GC的频率,也即增加了间歇性停顿的次数。
(2)尽量减少临时对象的使用
临时对象在跳出函数调用后,会成为垃圾,少用临时变量就相当于减少了垃圾的产生,从而延长了出现上述第二个触发条件出现的时间,减少了主GC的机 会。
(3)对象不用时最好显式置为Null
一般而言,为Null的对象都会被作为垃圾处理,所以将不用的对象显式地设为Null,有利于GC收集器判定垃圾,从而提高了GC的效率。
(4)尽量使用StringBuffer,而不用String来累加字符串(详见blog另一篇文章JAVA中String与 StringBuffer)
由于String是固定长的字符串对象,累加String对象时,并非在一个String对象中扩增,而是重新创建新的String对象,如 Str5=Str1+Str2+Str3+Str4,这条语句执行过程中会产生多个垃圾对象,因为对次作“+”操作时都必须创建新的String对象,但 这些过渡对象对系统来说是没有实际意义的,只会增加更多的垃圾。避免这种情况可以改用StringBuffer来累加字符串,因StringBuffer 是可变长的,它在原有基础上进行扩增,不会产生中间对象。
(5)能用基本类型如Int,Long,就不用Integer,Long对象
基本类型变量占用的内存资源比相应对象占用的少得多,如果没有必要,最好使用基本变量。
(6)尽量少用静态对象变量
静态变量属于全局变量,不会被GC回收,它们会一直占用内存。
(7)分散对象创建或删除的时间
集中在短时间内大量创建新对象,特别是大对象,会导致突然需要大量内存,JVM在面临这种情况时,只能进行主GC,以回收内存或整合内存碎片,从而 增加主GC的频率。集中删除对象,道理也是一样的。它使得突然出现了大量的垃圾对象,空闲空间必然减少,从而大大增加了下一次创建新对象时强制主GC的机 会。
(8)不要在一个类中使用太多的基本类型。

  • 打赏
  • 举报
回复
[Quote=引用楼主 liuyang_77 的回复:]
帮帮忙,给个意见
[/Quote]

这种问题简直就是在搞笑,没有针对性!
balasubramaniam 2010-07-29
  • 打赏
  • 举报
回复
面试经常有这样的问题。
xieruilin 2010-07-29
  • 打赏
  • 举报
回复
尽量用临时变量,多释放不用的对象等等。。。
hyxue521 2010-07-29
  • 打赏
  • 举报
回复
面试的时候碰过这个问题,没答上来
ZangXT 2010-07-28
  • 打赏
  • 举报
回复
建议读一下《Effective Java》,里面有不少好的建议。
lost_guy_in_scut 2010-07-28
  • 打赏
  • 举报
回复
这些东西我只知道java自己会帮你处理,嘿嘿。
ZangXT 2010-07-28
  • 打赏
  • 举报
回复
了解垃圾回收相关机制,可以根据gc情况调整不同堆的比例。熟悉jvisualvm、jprofiler之类工具的使用。
vivazhao 2010-07-28
  • 打赏
  • 举报
回复
还没到这个层次帮顶
zhangaiqiang888 2010-07-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiaomiao13 的回复:]
这个问题深奥,顶一下
[/Quote]
完全赞同,J2ME的推出就是面向移动的终端的开发,适合有限资源下的应用!其他的基本不需要考虑内存问题,我们更多的是考虑性能问题!
楼主非要优化内存的话,我觉得无非是对量的定义要十分斟酌,算法应用得当
lizhongyi188 2010-07-27
  • 打赏
  • 举报
回复
xingweiboy 2010-07-27
  • 打赏
  • 举报
回复
如果不是特别强调内存的情况,java真的很少考虑这个东西。毕竟都是在JVM里跑,垃圾回收之类的操作都是靠虚拟机。
如果真要需要注意,比如大数据量的处理,一般都是注意一些内存开辟机制。例如,new一个HashMap的成本,或者list某些操作的内部机制等等。
bolink5 2010-07-27
  • 打赏
  • 举报
回复
优化的话:可以从代码方面来优化 防止代码中出现内存泄露
这个Google下应很多的
sun0322 2010-07-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sxzlc 的回复:]
如果不是j2me我觉得没有必要考虑这个问题。
[/Quote]

具体怎么优化我也不会!
sun0322 2010-07-27
  • 打赏
  • 举报
回复
如果不是j2me我觉得没有必要考虑这个问题。
xiaomiao13 2010-07-27
  • 打赏
  • 举报
回复
这个问题深奥,顶一下
大_爱 2010-07-27
  • 打赏
  • 举报
回复
不懂,帮顶!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧