国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

遞歸調用 VS 循環調用

Awbeci / 1637人閱讀

摘要:現象有一個方法邏輯如下分批查詢的數據每次條做一些處理后修改狀態表示已經處理過了遞歸調用直到查不出數據來發現當數據量大的時候如有幾萬條數據待處理很容易發生內存溢出的問題覺得很奇怪不是每次限制只查條嗎怎么還會有內存溢出的問題呢假設遞歸調用不會釋

現象

有一個方法 邏輯如下

分批查詢state=0的數據 每次500條

做一些處理后 修改state狀態 state=0 ==> state=1 表示已經處理過了

遞歸調用 直到查不出數據來

發現當數據量大的時候 如有幾萬條數據待處理 很容易發生內存溢出的問題 覺得很奇怪 不是每次限制只查500條嗎 怎么還會有內存溢出的問題呢?

假設
遞歸調用不會釋放局部變量 直到方法調用結束

證明

@Test
public void recursiveCall(){
    foo(1);
}

private void foo(int i){
    // 局部變量 占用1M
    byte[] a = new byte[1 * 1024 * 1024];
    System.out.println(i+" "+a.length);
    foo(i+1);
}

當指定最大堆內存50M (-Xmx50M)的時候 遞歸調用到40次左右的時候 便會發生內存溢出異常

40 1048576
java.lang.OutOfMemoryError: Java heap space

可知遞歸調用并未釋放變量a的內存占用

解決
改成循環調用即可

@Test
public void loopCall(){
    bar();
}

private void bar(){
    int index = 1;
    while (true) {
        byte[] a = new byte[1 * 1024 * 1024];
        System.out.println(index+" "+a.length);
        index ++;
    }
}

同樣設置-Xmx50M 此時可以無限執行下去

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71096.html

相關文章

  • Node.js中的事件循環(Event Loop),計時器(Timers)以及process.nex

    摘要:回調函數執行幾乎所有的回調函數,除了關閉回調函數,定時器計劃的回調函數和。輪詢此階段有兩個主要的功能執行已過時的定時器腳本處理輪詢隊列中的事件。一旦輪詢隊列為空,事件循環將檢查已達到時間閾值的定時器。 什么是事件循環(Event Loop)? 事件環使得Node.js可以執行非阻塞I/O 操作,只要有可能就將操作卸載到系統內核,盡管JavaScript是單線程的。 由于大多數現代(終端...

    KoreyLee 評論0 收藏0
  • Node.js 指南(Node.js事件循環、定時器和process.nextTick())

    摘要:檢索新的事件執行與相關的回調幾乎所有,除了由定時器調度的一些和將在適當的時候在這里阻塞。在事件循環的每次運行之間,檢查它是否在等待任何異步或定時器,如果沒有,則徹底關閉。 Node.js事件循環、定時器和process.nextTick() 什么是事件循環? 事件循環允許Node.js執行非阻塞I/O操作 — 盡管JavaScript是單線程的 — 通過盡可能將操作卸載到系統內核。 ...

    pingink 評論0 收藏0
  • Nodejs高性能原理(下) --- 事件循環詳解

    摘要:如果一個即時定時器是被一個正在執行的回調排入隊列的,則該定時器直到下一次事件循環迭代才會被觸發。參數描述在事件循環的當前回合結束時要調用的函數。事件輪詢隨后的調用,會在任何事件包括定時器之前運行。 系列文章 Nodejs高性能原理(上) --- 異步非阻塞事件驅動模型Nodejs高性能原理(下) --- 事件循環詳解 前言 終于開始我nodejs的博客生涯了,先從基本的原理講起.以前寫...

    newsning 評論0 收藏0
  • JavaScript 函數式編程(一)

    摘要:函數式編程的哲學就是假定副作用是造成不正當行為的主要原因。函數組合面向對象通常被比喻為名詞,而函數式編程是動詞。尾遞歸優化函數式編程語言中因為不可變數據結構的原因,沒辦法實現循環。 零、前言 說到函數式編程,想必各位或多或少都有所耳聞,然而對于函數式的內涵和本質可能又有些說不清楚。 所以本文希望針對工程師,從應用(而非學術)的角度將函數式編程相關思想和實踐(以 JavaScript 為...

    hoohack 評論0 收藏0
  • 最強函數學習之路

    摘要:無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。形式參數當函數調用完成之后就自動銷毀了。函數的聲明一般出現在函數的使用之前。函數的聲明一般要放在頭文件中的。 索引: 一. 函數是什么 二. 庫函數 三. 自定義函數 ?函數參數 四 函數的...

    _Dreams 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<