社区
Java SE
帖子详情
java中如何优化内存
liuyang_77
2010-07-27 07:00:30
帮帮忙,给个意见
...全文
279
21
打赏
收藏
java中如何优化内存
帮帮忙,给个意见
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)不要在一个类中使用太多的基本类型。
火龙果被占用了
2010-07-29
打赏
举报
回复
[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
打赏
举报
回复
不懂,帮顶!
Java
程序
内存
占用
优化
实践
在我的项目里,所有
Java
进程的Thread总共占了八百多MB的
内存
,有点哈人,所以
优化
方向已经很明确了,那就是减少线程数量。到了私有化部署,有的客户连个技术人员都没有,只想一键启动就能用,于是将所有服务放在一台物理机上制作母盘,实施安装时省时省力,还能清公司的服务器库存。为了搞清楚原因,我使用NMT追踪
Java
进程
内存
使用情况,NMT全称Native Memory Tracking,是HotSpot虚拟机的功能,可跟踪HotSpot虚拟机的内部
内存
使用情况。大家都说是
内存
泄漏了,我不信!
java
中
栈和堆都存哪些东西_
java
中
栈
内存
与堆
内存
(JVM
内存
模型)
java
中
栈
内存
与堆
内存
(JVM
内存
模型)
Java
中
堆
内存
和栈
内存
详解1 和
Java
中
堆
内存
和栈
内存
详解2 都粗略讲解了栈
内存
和堆
内存
的区别,以及代码
中
哪些变量存储在堆
中
、哪些存储在栈
中
。
内存
中
的堆和栈到底是什么 详细讲述了程序在
内存
中
的模型,从可执行文件(ELF)格式的编译介绍了堆和栈,主要是C/C++语言,讲的比较清楚,借鉴性比较强。其实,对于
java
语言,编译后的文件是一个
中
间字节代码,操...
Java
中
发生
内存
泄漏 5 个场景以及解决方法
前言 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和
Java
联系起来。在
Java
中
,程序员不需要去关心
内存
动态分配和垃圾回收的问题,这一切都交给了JVM 来处理。顾名思义,垃圾回收就是释放垃圾占用的空间,但垃圾回收器并不是万能的,它能够处理大部分场景下的
内存
清理、
内存
泄露以及
内存
优化
。但它也并不是万能的,不然我们在项目实践过程
中
也不会出现那么多的
内存
泄漏的问题,很多的
内存
泄漏都是因为开发人员操作不当导致的。 本篇文章我们就来聊聊
内存
泄露的原因是什么,以及如何在
Java
内存
模型(
Java
Memory Model)
一、概述
Java
内存
区域和
内存
模型是不一样的东西,
内存
区域是指 JVM 运行时将数据分区域存储,强调对
内存
空间的划分,即运行时数据区(Runtime Data Area)。
内存
模型(
Java
Memory Model,简称 JMM)是定义了线程和主
内存
之间的抽象关系,即 JMM 定义了 JVM 在计算机
内存
(RAM)
中
的工作方式。 二、
Java
内存
模型(JMM) JMM 是共享
内存
的并发模型,线程之间主要通过读-写共享变量(堆
内存
中
的实例域,静态域和数组元素)来完成隐式通信。JMM 控制
Java
【
Java
SE专栏18】用大白话讲解
Java
中
的
内存
机制
本文简单对
Java
的
内存
机制进行了介绍,讲解了堆
内存
和栈
内存
,并给出了
Java
管理
内存
的演示代码
Java SE
62,614
社区成员
307,326
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章