关于内存溢出问题 问题有3:1.什么情况下内存会溢出?2.怎样避免内存溢出?3.内存溢出后的解决方法有那些?(如果要是重启服务就不用说了!)以上能举出例子更好 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 要看是什么问题了。一般resultset statement connection这些对象打开后要注意关闭而且while(rs.next())不要对statement对象循环,否则会造成打开游标超过最大数问题。还是要看具体问题 一般来说,java不会出现内存溢出,但是还是有可能存在的比如: List<StringBuffer> list = new ArrayList<StringBuffer>(); while(true) { StringBuffer sb = new StringBuffer(1000); list.add(sb); }这段代码肯定会出现内存溢出避免内存溢出没有什么好方法,只有写代码的时候多注意了内存溢出属于Error,不是Exception,代码中不好解决,只有修改代码,重启 java很少会出现的,但还是有的,如:过大的数减去超小的负数重启可以 启动程序的时候,多给点堆空间吧.-Xmx500M如果还不行,程序有问题了 这个代码不一定会出现内存泄漏,是否内存泄漏依赖于list存活周期以及是否list对象是否在外面对其进行释放,像以下的这个代码就不会有问题Java code List<StringBuffer> list = new ArrayList<StringBuffer>(); while(true) { StringBuffer sb = new StringBuffer(1000); list.add(sb); } StringBuffer buf = list.get(0); System.out.println(buf.toString()); list.clear();内存溢出的问题是比较复杂,你需要分析你为jvm虚拟机分配的内存是否对你的负载是合适的,有些内存溢出是因为为jvm虚拟机分配的内存太小所致。但有一种情况则必然会产生内存泄漏,就是应用所占用的内存会随着时间的增长而增长,没有稳定的阶段。 1.我基本上想到了3种,(不知下面朋友还有补充,)1、java设置内存的参数是否合适2、查询数据库,遇到比较大的数据集,或者sql写的效率比较低3、java处理文件的时候,如果文件比较大。4. 使用非类型安全(non-type-safe)的语言如 C/C++ 等。 5. 以不可靠的方式存取或者复制内存缓冲区。 6. 编译器设置的内存缓冲区太靠近关键数据结构。2.至于如何避免内存溢出,就是做到避免上面的问题就可以了3.java 内存溢出的问题,解决方法一 调整 虚拟机参数二 立即 释放无用的对象三 利用序列化和反序列化技术 “立即 释放无用的对象”是要在代码中自己控制,不能通过辅助工具或命令清除。我觉得楼主的思路有一点问题,内存溢出的问题一般都要通过修改环境参数或修改程序来解决,并不能通过辅助工具或命令清除。但是内存泄漏则一定是代码问题,必须要修改代码才能解决。“利用序列化和反序列化技术”这个也是要通过程序将一部分放在内存中的对象,持久化到硬盘,然后需要的时候再读回来。这种策略一般不常用,而且通常是由操作系统或jvm来完成的。 java socket编程练习的问题 Java的Swing中使用什么方法判断一个下拉列表框的内容是否为空? 生产者和消费者问题 ,为什么结果有些不对。麻烦高人帮忙看看 java中null的使用问题 字符串长度问题。 将JTEXTAREA的内容保存为文本文件的问题 如何用JAVA连接MYSQL的MYlibrary库 改变eclipse的路径后不能执行,为什么? c和java能混合编程吗? 怎么求数组中,加和最大的两个数 html如何引用css和javascript(相对路径) 请教各位 一个定义变量的问题,
一般resultset statement connection这些对象打开后要注意关闭
而且while(rs.next())
不要对statement对象循环,否则会造成打开游标超过最大数问题。
还是要看具体问题
while(true)
{
StringBuffer sb = new StringBuffer(1000);
list.add(sb);
}这段代码肯定会出现内存溢出避免内存溢出没有什么好方法,只有写代码的时候多注意了
内存溢出属于Error,不是Exception,代码中不好解决,只有修改代码,重启
-Xmx500M
如果还不行,程序有问题了
这个代码不一定会出现内存泄漏,是否内存泄漏依赖于list存活周期以及是否list对象是否在外面对其进行释放,像以下的这个代码就不会有问题
Java code
List<StringBuffer> list = new ArrayList<StringBuffer>();
while(true)
{
StringBuffer sb = new StringBuffer(1000);
list.add(sb);
}
StringBuffer buf = list.get(0);
System.out.println(buf.toString());
list.clear();内存溢出的问题是比较复杂,你需要分析你为jvm虚拟机分配的内存是否对你的负载是合适的,有些内存溢出是因为为jvm虚拟机分配的内存太小所致。但有一种情况则必然会产生内存泄漏,就是应用所占用的内存会随着时间的增长而增长,没有稳定的阶段。
2、查询数据库,遇到比较大的数据集,或者sql写的效率比较低
3、java处理文件的时候,如果文件比较大。
4. 使用非类型安全(non-type-safe)的语言如 C/C++ 等。
5. 以不可靠的方式存取或者复制内存缓冲区。
6. 编译器设置的内存缓冲区太靠近关键数据结构。
2.至于如何避免内存溢出,就是做到避免上面的问题就可以了3.java 内存溢出的问题,解决方法
一 调整 虚拟机参数
二 立即 释放无用的对象
三 利用序列化和反序列化技术