關於記憶體溢位遇到的兩種情況

2022-01-11 07:27:13 字數 513 閱讀 6597

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地區的資料一行特別長,插入還沒結束,執行緒跑去插另外一條資料去了,這導致集合內部的乙個計數器計算錯誤,記的數少了,但是插入的這個行數是不會變的,導致行數超越了集合邊界,於是報記憶體溢位。

參考文獻:

兩種執行緒棧的溢位

第一種情況 很簡單 x86的cpu頁面大小為4kb,而我們只使用了100 4 400byte的空間 沒有超出預設調撥的儲存器大小 第二個頁面4kb 所以棧不會給下面的頁面再調撥儲存器了 而我們的nvalue 10000 0 試圖寫入第10000 4 40000,也就是試圖網40000 nvalue處...

作用域兩種情況

什麼是作用域 作用域 scope 通常來說就是一段 程式中所用到的名字並不總是有效 可用的,而限定這個名字的可用性的 範圍就是這個名字的作用域。作用域的作用 作用域的使用提高了程式邏輯的區域性性,增強程式的可靠性,減少名字衝突。作用域主要分為 1.全域性作用域 2.區域性作用域 全域性作用域 變數在...

兩種無法開機的情況

錯誤資訊 我以前只是在書上看過 系統時鐘不對的話開不了機,沒想到這次還真是碰到了。她這台機器是2010年上高中的時候買的清華同方,上高中的時候買的,到現在差不多8年了 請拿出你換衣服的魄力換電腦 電池早已駕鶴西去,目前只有在插著電源的時候可以使用,那就不難理解了。1 由於電腦得不到充足的供電,所以系...