造轮子之MemorySafeLinkedBlockingQueue
造輪子之MemorySafeLinkedBlockingQueue-LinkBlockingQueue改進
LinkBlockingQueue改進
問題背景
https://github.com/apache/dubbo/pull/9722/files
使用線程池的同學對于標題中的隊列想必都有過使用,但上述隊列使用不當時則會造成程序OOM,那怎么來控制呢
?
使用ArrayBlockingQueue?如何來評估長度 ?
是否有一個完美的解決方案呢,MemorySafeLinkedBlockingQueue則通過對內(nèi)存的限制判斷盡面控制隊列的容量,完成解決了可能存在的OOM問題 。
獲取內(nèi)存大小(注:單位大B;支持準實時更新):
Runtime.getRuntime().freeMemory()//JVM中已經(jīng)申請到的堆內(nèi)存中還未使用的大小Runtime.getRuntime().maxMemory()// JVM可從操作系統(tǒng)申請到的最大內(nèi)存值 -XxmRuntime.getRuntime().totalMemory()// JVM已從操作系統(tǒng)申請到的內(nèi)存大小 —Xxs可設置該值大小-初始堆的大小線程池在excute任務時,放隊列 ,放不進去,使用新線程運行任務 。這個放不進行