A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高欢欢 中级黑马   /  2012-7-15 12:58  /  1718 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 高欢欢 于 2012-7-18 07:34 编辑

java 哪些常见的编程方式会引起内存溢出?

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
不是那些编程方式能引起内存的溢出,只要是你的什么类型的数据超出了长度,应该就会出现内存的溢出
回复 使用道具 举报

楼主请看,这就是个典型的内存溢出的代码形式。
在12行:首先主函数main进栈,然后创建14行new Demo();对象。
接着运行class Demo类,运行Demo d = new Demo();就会在堆空间也创建new Demo();对象,主函数中的对象和类中的对象来回创建,最终导致堆内存溢出。
解决办法:要想修改此程序只需要在第3行中,加上static即可,如下图

这样的话,当程序运行时,因为static Demo d = new Demo();是静态的,就在方法区中已经创建了,就不会再在堆内存中创建new Demo对象,这样的话,就能保证程序的正常运行了。
希望我说的能对你起到帮助,要是有错误,欢迎指正~~~!{:soso__8961432591078930798_3:}

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
无限递归也会造成内存溢出。
如下代码:
class Demo
{
         public static void main(String[] args){
                  f(0);
         }

         public static void f(int n){
                 System.out.println(n);
                 f(n+1);
         }
}
回复 使用道具 举报
谢谢各位的指点!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马