java面试题:如何解决内存溢出

java面试题:如何解决内存溢出... java面试题:如何解决内存溢出 展开
 我来答
幻之谁愚
推荐于2018-04-06 · TA获得超过4.4万个赞
知道大有可为答主
回答量:1.2万
采纳率:77%
帮助的人:921万
展开全部
  第一对所有的代码包括页面中的java代码都进行一遍彻底的回顾检查,
1.对那些静态(static)的对象要特别留神,特别是类型为Map,List,Set的,静态的变量会一直驻存在内存中,生命周期比较长,不会被垃圾器回收。
2.对于代码,要审查是否生成了大量的冗余的对象,还有一些逻辑业务处理的类,
算法是否过于复杂,调整算法,对于代码认真审查,再仔细重构一遍代码,能提高代码质量,提高程序运行稳定性。
3.Java中的内存溢出大都是因为栈中的变量太多了。其实内存有的是。建议不用的尽量设成null以便回收,多用局部变量,少用成员变量。

1),变量所包含的对象体积较大,占用内存较多。
2),变量所包含的对象生命周期较长。
3),变量所包含的对象数据稳定。
4),该类的对象实例有对该变量所包含的对象的共享需求。
4.在我的程序中对静态变量的优化后,使程序占用内存量至少提升了5k-10k。所以也不容忽视。

第二还有就是String类相关的东西:
1.字符串累加的时候一定要用StringBuffer的append方法,不要使用+操作符连接两个字符串。差别很大。而且在循环或某些重复执行的动作中不要去创建String对象,因为String对象是要用StringBuffer对象来处理的,一个String对象应该是产生了 3个对象(大概是这样:))。
2.字符串length()方法来取得字符串长度的时候不要把length放到循环中,可以在循环外面对其取值。(包括vector的size方法)。特别是循环次数多的时候,尽量把length放到循环外面。
int size = xmlVector.size();
for (int i = 2; i < size; i++) {
...
}
3 .写代码的时候处理内存溢出
try{
//do sth
....
}catch (outofmemoryerror e){//可以用一个共通函数来执行.
system.out.print (“no memory! ”);
system.gc();
//do sth again
....
}
  4.对于频繁申请内存和释放内存的操作,还是自己控制一下比较好,但是System.gc()的方法不一定适用,最好使用finallize强制执行或者写自己的finallize方法。 Java 中并不保证每次调用该方法就一定能够启动垃圾收集,它只不过会向JVM发出这样一个申请,到底是否真正执行垃圾收集,一切都是个未知数。
ilzyh
推荐于2017-11-22 · TA获得超过7879个赞
知道大有可为答主
回答量:8658
采纳率:0%
帮助的人:7588万
展开全部
1.优化程序
2.改进算法
3.增加jvm内存分配

定时执行强制垃圾回收----这是错误的,因为没有方法可以使java强制回收垃圾,这都是自动进行的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
极天异云
2009-08-03 · TA获得超过1054个赞
知道小有建树答主
回答量:1170
采纳率:42%
帮助的人:395万
展开全部
呵呵,
同意二楼的。
不过大多数的情况下,
改进算法并不能改善内存。

这个其实也可以归类到优化程序。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
湘潭刘斌
2009-08-04
知道答主
回答量:32
采纳率:0%
帮助的人:0
展开全部
优化
关闭不需要的连接对象

比如以个数据库连接当连接后接要马上关闭

算法最佳

节约运算空间
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
99134234
2009-08-03 · TA获得超过176个赞
知道小有建树答主
回答量:106
采纳率:0%
帮助的人:114万
展开全部
及时销毁不用的对象和变量,

定时执行强制垃圾回收
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式