內存抖動
-
內存抖動:指在短時間內有大量的對象被創建或者被回收的現象。
-
內存抖動產生原因:主要是頻繁(很重要)在循環里創建對象(導致大量對象在短時間內被創建,由於新對象是要占用內存空間的而且是頻繁,如果一次或者兩次在循環里創建對象對內存影響不大,不會造成嚴重內存抖動這樣可以接受也不可避免,頻繁的話就很內存抖動很嚴重),內存抖動的影響是如果抖動很頻繁,會導致垃圾回收機制頻繁運行(短時間內產生大量對象,需要大量內存,而且還是頻繁抖動,就可能會需要回收內存以用於產生對象,垃圾回收機制就自然會頻繁運行了)。
-
內存抖動影響:頻繁內存抖動會導致垃圾回收頻繁運行,造成系統卡頓。
內存泄露
- 內存泄漏( Memory Leak )是指程序中己動態分配的堆內存由於某種原因程序未釋放或無法釋放,造成系統內存的浪費,導致程序運行速度減慢甚至系統崩潰等嚴重后果。
內存溢出
- 內存溢出(Out Of Memory,簡稱OOM)是指應用系統中存在無法回收的內存或使用的內存過多,最終使得程序運行要用到的內存大於能提供的最大內存。此時程序就運行不了,系統會提示內存溢出,有時候會自動關閉軟件,重啟電腦或者軟件后釋放掉一部分內存又可以正常運行該軟件,而由系統配置、數據流、用戶代碼等原因而導致的內存溢出錯誤,即使用戶重新執行任務依然無法避免
內存溢出和內存泄漏
-
系統已經不能再分配出你所需要的空間,比如你需要100M的空間,系統只剩90M了,這就叫內存溢出
-
強引用所指向的對象不會被回收,可能導致內存泄漏,虛擬機寧願拋出OOM也不會去回收他指向的對象
意思就是你用資源的時候為他開辟了一段空間,當你用完時忘記釋放資源了,這時內存還被占用着,一次沒關系,但是內存泄漏次數多了就會導致內存溢出
內存碎片
內存碎片通常分為內部碎片和外部碎片:
-
內部碎片是由於采用固定大小的內存分區,當一個進程不能完全使用分給它的固定內存區域時就產生了內部碎片,通常內部碎片難以完全避免。
-
外部碎片是由於某些未分配的連續內存區域太小,以至於不能滿足任意進程的內存分配請求,從而不能被進程利用的內存區域。