java容器和堆疊溢位SOF

2021-08-26 09:32:33 字數 630 閱讀 6374

arraylist 本質上是乙個可改變大小的陣列.當元素加入時,其大小將會動態地增長.內部的元素可以直接通過get與set方法進行訪問.元素順序儲存 ,隨機訪問很快,刪除非頭尾元素慢,新增元素慢而且費資源 ,較適用於無頻繁增刪的情況 ,比陣列效率低,如果不是需要可變陣列,可考慮使用陣列 ,非執行緒安全.

linkedlist 是乙個雙鏈表,在新增和刪除元素時具有比arraylist更好的效能.但在get與set方面弱於arraylist.適用於 :沒有大規模的隨機讀取,大量的增加/刪除操作.隨機訪問很慢,增刪操作很快,不耗費多餘資源 ,允許null元素,非執行緒安全.

vector (類似於arraylist)但其是同步的,開銷就比arraylist要大。如果你的程式本身是執行緒安全的,那麼使用arraylist是更好的選擇。 vector和arraylist在更多元素新增進來時會請求更大的空間。vector每次請求其大小的雙倍空間,而arraylist每次對size增長50%,vector 是同步的.

因為棧一般預設為1-2m,一旦出現死迴圈或者是大量的遞迴呼叫,在不斷的壓棧過程中,造成棧容量超過1m而導致溢位。

棧溢位的原因:

l 遞迴呼叫

l 大量迴圈或死迴圈

l 全域性變數是否過多

l 陣列、list、map資料過大

堆疊溢位檢測

維持的每個任務,都有它自己的堆疊。任務堆疊占用的記憶體,當任務建立時自動分配了 堆疊的尺寸引數通過xtaskcreate api確定。堆疊溢位是常見事件,由應用程式不確定引起的。freertos.org?因此提供了提供了兩個可供選擇的機制,可用來協助察覺和糾正這種事件發生。使用的選項由configc...

堆 棧 記憶體溢位

堆與棧的區別,遞迴沒有退出條件會怎樣,系統怎麼判定棧溢位?1,管理方式不同 棧編譯器自動管理,無需程式設計師手工控制 而堆空間的申請釋放工作由程式設計師控制,容易產生記憶體洩漏。2,空間大小不同 棧是一塊連續的記憶體,棧頂的位址和棧底的位址是系統預先規定好的,當申請空間大於剩餘空間,提示溢位 堆是不...

堆疊溢位及其原因

在乙個程式中,分配給堆疊的記憶體是有一定限度的。由於c語言系列沒有內建檢查機制來確保複製到緩衝區的資料不得大於緩衝區的大小,因此當這個資料足夠大的時候,將會溢位緩衝區的範圍。堆疊溢位就是不顧堆疊中分配的區域性資料塊大小,向該資料塊寫入了過多的資料,導致資料越界,結果覆蓋了別的資料。堆疊溢位時會有意想...