-
数据库操作操作导致内存溢出15
我在进行数据库操作时总是出现内存增长但是不释放的情况。不是每次都会导致增长。以下是我的代码,请各位朋友能够提供一些建议
谢谢
long beforMemory = Runtime.getRuntime().totalMemory();
StringBuffer sql = new StringBuffer();
// 1.加载驱动程序
Class.forName(drivername);
// 2.建立连接
conn = DriverManager.getConnection(url, user, password);
// 3.创建statement
Statement st= conn.createStatement ();
for(object : objectlist)
{
sql.append(insert语句(插入object对象))
st.addBatch(sql.toString());
}
st.executeBatch();
long afterMemory = Runtime.getRuntime().totalMemory();
System.out.println("MainMemory (afterMemory-beforMemory):"+(afterMemory-beforMemory));
System.out.println("MainMemory used:"+(afterMemory));
运行一段时间后会出现MainMemory used:不断增加,但不会减少。长时间后会在
Statement st= conn.createStatement ();
报内存溢出的错误。不知道是哪的问题。objectlist长度是(0--1000)之间
问题补充:不好意思。我代码中有
在finally中进行
st.close();
conn.close();
的操作
问题补充:7454103 写道conn Statement 都是需要用完就 关闭的!
在finally中进行
st.close();
conn.close();
问题补充:allskylove 写道你什么数据库,支持的批处理语句有多大,一次语句最长是多少,你看看数据库端的配置。
我需要插入的是SQLserver 数据库。如果超出的话应该会报数据库异常吧。但是貌似没有出现异常。
而且我最初不是用的批处理,是一条一条操作的,也会偶尔出现内存增长
正常情况应该会有增长,然后下降的过程。
但是我显示的内存总是增长但是从没有下降
我最外层是用timer做的定时操作。也就是定时执行这个数据库操作。会有影响么?
问题补充:allskylove 写道最好确认一下你对数据库资源的关闭,看看外面调用这段的代码,光这个我看不出来什么
外面调用的代码我简化了一下
while(true)
{
SqlServerUtil.InsertAlarmToDB(ObjectList);
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}2010年9月29日 10:51
5个答案 按时间排序 按投票排序
-
运行一段时间后会出
你的代码,循环是for语句,循环后打印结果,何来的“运行一段时间,内存总是增长但是从没有下降”
外边还有一个循环?2010年9月29日 19:44
-
// 1.加载驱动程序
Class.forName(drivername);
// 2.建立连接
conn = DriverManager.getConnection(url, user, password);
第一步加载驱动程序,你写在静态块里试试,因为你每次运行这个增加数据库的方法,都会加载一次,而且没有释放。所以导致内存增长。
简单写下思路。看下是不是这样。
static
{
// 1.加载驱动程序
Class.forName(drivername);
}
InsertAlarmToDB(ObjectList)
{
// 2.建立连接
conn = DriverManager.getConnection(url, user, password);
...
}
2010年9月29日 13:37
相关推荐
2. **递归调用**:无限或过深的递归调用也会迅速耗尽栈内存,导致内存溢出。 3. **配置不当**:服务器或虚拟机的内存设置不合理,也可能触发内存溢出错误。 #### 影响及应对策略 内存溢出会使应用程序崩溃,严重...
JAVA内存溢出问题总结 JAVA 内存溢出问题是指...如果程序中创建了太多对象,而没有及时释放,将会导致内存溢出。 内存溢出问题是 Java 开发中常见的错误,通过调整容器参数和优化程序代码,可以避免内存溢出的发生。
但在故障发生的时刻,内存使用量上升至2.1G,突破了上限,导致内存溢出。 在分析GC(垃圾回收)日志native_stderr时,发现内存是短时间内被大量消耗,表明存在内存泄露的可能。由于垃圾回收日志记录了内存分配和...
内存溢出问题(Out of Memory Error,OOME)在高负载或长时间运行的环境中常见,通常是由于内存分配不当或者垃圾回收机制失效导致的。解决Tomcat内存溢出的常见策略包括: 1. 调整JVM参数:增加堆大小(-Xms和-Xmx...
数据库查询是应用程序与数据交互的重要环节,当一次性从数据库中获取的数据量过大时,可能会导致内存溢出(Memory Overflow)问题。内存溢出是程序在申请内存时,无法在分配到足够的内存空间来完成操作,这通常是...
例如,当执行SELECT * FROM table_name这样的查询时,如果表中的记录非常多,那么所有的结果集都会被加载到内存中,从而可能导致内存溢出。 #### 二、针对不同数据库的解决方案 **1. MySQL** 对于MySQL,可以通过...
3. **代码审查**:查找可能的内存溢出点,如数据库一次性查询所有数据、死循环、大量重复对象生成以及未清理的集合对象。 4. **使用内存分析工具**:实时监控内存使用情况,辅助定位问题。 总的来说,理解和解决...
过大的线程池可能导致内存消耗增加,而过小的线程池可能限制服务处理能力。根据服务器硬件和应用需求,合理设定线程池的最小、最大线程数及超时时间。 4. **使用高效的数据结构**:在编写Java代码时,选择正确的...
解决传统方式的超大数据导致内存溢出大XML转换数据库超大xml解析导入数据库、千万级别大数据导出到Excel。实现核心高性能、分段、分页循环读取-写入-清空。解决传统方式的超大数据导致内存溢出1.xml解析以dom4j的...
3. GC(Garbage Collection):Java的自动内存管理机制,如果GC无法有效地回收不再使用的对象,可能导致内存泄漏。 4. 类装载:大量的类加载可能导致方法区溢出,特别是使用反射或动态代理时。 解决内存溢出通常...
而在Java等语言中,有垃圾回收机制,但过度创建对象也可能导致内存溢出,需要合理设计数据结构和算法。 2. **数据结构优化**:选择合适的数据结构可以有效减少内存消耗。例如,如果知道数据范围,可以使用位数组代替...
3. **线程栈大小配置不适宜**:线程栈大小设置过大或过小,都可能导致内存溢出。 4. **持久层问题**:如Hibernate等ORM框架的不当使用,可能造成内存泄漏。 5. **类加载器泄露**:类加载器未能正确卸载已不再使用的...
内存溢出(Out of Memory,简称OOM)是计算机科学中的一种常见问题,特别是在资源有限的移动设备如Android手机上,处理不当可能导致应用崩溃。本文将深入浅谈如何防止Android应用程序中的内存溢出。 首先,我们需要...
这可能会导致内存溢出,因为大量的对象实体可能会导致内存溢出。 4.检查 List、MAP 等集合对象是否有使用完后,未清除的问题。这可能会导致内存溢出,因为集合对象中的对象引用可能会导致内存泄露。 通过了解内存...
在Android应用开发中,内存溢出(Out Of Memory,简称OOM)是一个常见的问题,它会导致应用崩溃,严重影响用户体验。理解并防止Android应用中的内存溢出是优化应用性能的关键环节。以下是对Android防止内存溢出的...
- 特别是在大数据量处理场景下,如大量查询返回结果时,如果一次性加载过多数据到内存,可能会导致内存溢出。 #### 具体案例分析 1. **Hibernate查询优化**: - 在使用Hibernate进行数据库查询时,如果一次性...
在Java编程中,内存溢出(Out of Memory Error,简称OOM)是一个常见的问题,它发生在程序请求的内存超过了系统能够分配的最大额度。这种情况通常会导致程序崩溃,因此理解如何解决Java程序的内存溢出至关重要。以下...
### JVM内存溢出详解 #### 一、基本概念与理解 **JVM内存溢出**是一种常见的运行时错误,指的是程序在执行过程中因为无法获得足够的内存资源而导致的问题。这种问题通常发生在程序尝试分配超出系统可用内存限制的...
在Android中,内存溢出可能导致应用程序崩溃,用户体验急剧下降。 内存泄漏(Memory Leak)则是指程序在不再需要某块内存后,未能释放该内存。这通常是由于对象引用关系的管理不当造成的,使得垃圾回收器(Garbage ...
4. 最终,可能导致内存溢出(Out Of Memory, OOM)错误,系统无法分配足够的内存来执行任务。 引发内存泄漏的一些常见场景及解决方案包括: 1. **静态成员变量的滥用**: 静态变量生命周期与类相同,如果将易变且...