首页 > 编程语言 > 详细

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

时间:2016-06-22 02:00:51      阅读:231      评论:0      收藏:0      [点我收藏+]

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

http://zhidao.baidu.com/link?url=gQ4IAoIl07v0sxITrvasf8LwMwmFELou2d-6w11tqNHsNNdxQvDTg5f-EMlS0HSrAOG0mqw0DoBocICbuSfTvK 第一对所有的代码包括页面中的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发出这样一个申请,到底是否真正执行垃圾收集,一切都是个未知数。 1.优化程序2.改进算法3.增加jvm内存分配

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

原文:http://www.blogjava.net/youngturk/archive/2016/06/21/430982.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!