关于jvm内存溢出的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于jvm内存溢出的问题相关的知识,希望对你有一定的参考价值。

我现在写了个程序,从数据库里查出来几万条数据,然后将每一条封装成一个bean对象之后加到list中,现在出现个问题,就是程序运行到这之后提示内存溢出,除了修改运行时JVM虚拟内存参数之外,有没有什么更好的办法?譬如不要加到list中,换成其他的什么?
我并不是要做分页查询,我是将查询出的数据生成xml文件进行传输。请问要怎么优化算法呢?

觉得还是分页查询,一次性查出来很耗内存。
在数据库设计这块,要建索引。
参考技术A 优化数据结构,保存尽量少的数据,封装成一个bean对象时进行优化。几万条数据每条数据能少点,那省下来的内存就多了。

如果数据优化没办法实施,那就只能分批对数据进行操作了,一次装入少批量的数据,多次完成。你要是一个循环从头到脚,一次就开了上万个对象,内存肯定吃不消,只能分段了,当然这种方法会降低性能的。当然如果在数据那里可以分页查询是最好了。

不知道你用什么开发的,ide里有性能分析器可以看到那部分数据占内存最多,你就可以拿大头开刀省内存了。
参考技术B 理论上来说用object数组会节约一些内存,但你描述的情况来看,占掉大量内存的应该是你的对象,所以恐怕你只能从算法来优化了。
比如说分页查询,建不建索引只是跟查询速度有关,跟内存占用就没啥联系了!
参考技术C 不要把大量数据保存到list,直接写到xml文件流

以上是关于关于jvm内存溢出的问题的主要内容,如果未能解决你的问题,请参考以下文章

java 关于内存泄漏和内存溢出

jvm MetaSpace内存溢出

JVM之内存泄漏和内存溢出

JVM之内存泄漏和内存溢出

JVM - 内存溢出,问题查找

JVM内存溢出的两大类型及解决方案