java分页查数据防止内存溢出问题
我想问问分页查数据防止内存溢出是防止比如是list集合放的太多内存溢出吗?但是就算每次查10条你也得把查出来的数据放到一个list集合里呀,不然数据不就分开了吗?我搞不清...
我想问问分页查数据防止内存溢出是防止比如是list集合放的太多内存溢出吗?但是就算每次查10条你也得把查出来的数据放到一个list集合里呀,不然数据不就分开了吗?我搞不清内存溢出发生在哪个阶段,是发生在resultSet上吗。这是在网上看到的一个分页查数据的一个方法
展开
5个回答
展开全部
首先你要明白内存溢出的含义,内存溢出简单的来说就是内存不够了。
打个比方:内存就像一个大水缸,数据库就是水库。从数据库中查询数据就像从水库中抽水到大水缸。如果一次性抽取太多的水(超过大水缸的容量),大水缸肯定放不下(溢出了)。分页查询就好比一点一点的抽水到大水缸。jvm有垃圾回收机制,每次抽到水缸中的水可能用完后就被销毁了,水缸中的水不会一直增长下去。如果水缸中的水一直增长,就叫内存泄露。
你上面的代码不完全,不知道是否会内存溢出。如果每次循环在getComments方法中把查询的结果都放到一个List中,就可能会溢出。当然这个和数据库中的数据量和jvm的内存配置大小有关系。
打个比方:内存就像一个大水缸,数据库就是水库。从数据库中查询数据就像从水库中抽水到大水缸。如果一次性抽取太多的水(超过大水缸的容量),大水缸肯定放不下(溢出了)。分页查询就好比一点一点的抽水到大水缸。jvm有垃圾回收机制,每次抽到水缸中的水可能用完后就被销毁了,水缸中的水不会一直增长下去。如果水缸中的水一直增长,就叫内存泄露。
你上面的代码不完全,不知道是否会内存溢出。如果每次循环在getComments方法中把查询的结果都放到一个List中,就可能会溢出。当然这个和数据库中的数据量和jvm的内存配置大小有关系。
更多追问追答
追问
你好,道理我都明白。有么有完整的分页查询数据的代码分享给我。我突然好像懂了,我先试着写写,写完发给你看看。
追答
这种原始的jdbc分页查询没有了,工作都用mybatis的分页插件或JPA自带的分页功能。
分页查询一般用于查询列表数据,一般不会像你上面的代码那样循环查询。一般只查询一页数据在页面显示就行了。
看你的追问,可能你想通过分页查询防止一次获取太多数据导致溢出是吧。这样是可行的。不过我不清楚你的业务。没法给你一些建议。
展开全部
内存溢出直接原因就是,写入内存的东西大于内存本身。内存溢出没有发生在哪一个阶段这么一说。从查询语句来说,倘若一次查询大量数据,导致数据量大于可用内存,自然就溢出。最简单的看法就是,在程序运行过程中,有没有占用内存不释放的代码。比如这个查询,若是一直在list里加入数据,自然内存就溢出。
更多追问追答
追问
有么有分页查询的完整代码可以分享给我呢?我明白这个道理,但是如何把每次查出来的数据放到不同的list并使用完且销毁这里我不会写
追答
不用销毁,当查询方法执行完成。GC会自己在一个合适的时机,清理内存。而且,java程序员调用不了GC
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
2、集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
3、代码中存在死循环或循环产生过多重复的对象实体;
不知道你属于哪一种情况
2、集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
3、代码中存在死循环或循环产生过多重复的对象实体;
不知道你属于哪一种情况
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2019-03-19
展开全部
查10条的话,前边也显示10条。下一页的10后查下10条,所以只有10条,不会累计
追问
并不是要显示数据,我只是分页取数据防止内存溢出的一种手段。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不要orderby 可以提高查询速度
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询