什么是內存抖動
是指在短時間內有大量的對象被創建或者被回收的現象,內存抖動出現原因主要是頻繁(很重要)在循環里創建對象(導致大量對象在短時間內被創建,由於
新對象是要占用內存空間的而且是很頻繁,
內存抖動的影響
如果抖動很頻繁,會導致垃圾回收機制頻繁運行(短時間內產生大量對象,需要大量內存,而且還是頻繁抖動,就可能會需要回收內存以用於產生對象,垃圾
回收機制就自然會頻繁運行了)。綜上就是頻繁內存抖動會導致垃圾回收頻繁運行。
什么是內存泄漏
是指某一段內存在程序里功能上已經不需要了,但是垃圾回收機制回收內存時檢測那段內存還是被需要的,不能被回收,這種在程序中在沒有使用的但是又不能被
回收的內存就是被泄漏的內存,那為什么會這樣呢?
正常的話應該是程序里不需要的內存就可以被回收,這是垃圾回收機制(GC)做的事呀,如果垃圾回收機制正常運行的情況下,不應該這樣啊,但是實際就是垃圾
回收機制正常的情況下發生的內存泄漏。
產生內存泄漏的原因
其實到這里java程序員就得知道垃圾回收機制中,判斷一段內存是否是垃圾,是否可回收的條件,這個條件是通過檢查這段內存是否存在引用和被引用關系,不存
在這關系時,就認為可回收,若還存在引用或被引用關系,就認為不可回收,現在就可以知道導致內存泄漏的原因是程序員沒有將不用的內存去掉引用關系(因為
程序中大多內存石油對象指向的,所以去掉引用關系就是置空)。
內存泄漏的影響
內存泄漏會導致一些內存沒法被正常利用,話句話就是可以使用內存變少了,這樣輕則增加垃圾回收機制運行頻率,重則內存溢出(當系統需要分配一段內存,但
是現有內存在垃圾回收運行后任然不足時,就會內存溢出);為避免內存泄漏,在寫程序時已經確定不需要的引用型變量,就置空;雖然即使內存沒泄露,也有可
能出現內存溢出,這時的內存溢出就是有別的問題導致的。