zoukankan      html  css  js  c++  java
  • 关于内存溢出遇到的两种情况

    1.处理数据的程序或者服务是x86架构的,容易出现内存溢出。

    因为x86的进程,最多允许内存4g、在这4g中又有2g是操作系统等、所以当你查询的数据量非常大的时候,非常容易内存溢出。

    2.多线程 容易导致内存溢出(溢出原理细节我还不清楚)

    我查询mongo数据量,数据按地区分类,我查到A地区有70000条数据,B地区有60000条数据。我要将两地数据导出成excel,A地导出成功、B地导出报错:内存溢出。

    为什么会出现这个异常呢?

    这是因为在MongoDB中B地数据的字段比A地多很多。MongoDB对于.net的这个版本的驱动的find方法 底层用的是Dictionary 的Add来获取满足条件的数据集合。但是Dictionary是.net中线程不安全的,MongoDB的驱动可能使用了多线程查询数据、把数据插入集合中,由于B地区的数据一行特别长,插入还没结束,线程跑去插另外一条数据去了,这导致集合内部的一个计数器计算错误,记的数少了,但是插入的这个行数是不会变的,导致行数超越了集合边界,于是报内存溢出。

    参考文献:https://blog.csdn.net/liweiblog/article/details/52329740

  • 相关阅读:
    Java DES 测试
    HttpClient3.1 警告: Cookie rejected:
    WebService实现文件上传下载
    使用dom4j生成xml字符串,以及解析xml字符串
    Java 单例总结
    weblogic使用脚本部署
    Java比较两个日期的大小
    Ubuntu14.04 weblogic11g集群环境测试
    Gson 禁止特殊字符转码
    只用CSS做到完全居中
  • 原文地址:https://www.cnblogs.com/wholeworld/p/10188216.html
Copyright © 2011-2022 走看看