java內存泄露即是:對象可達,但是對象沒有使用,gc不會回收該對象,但是對象又會佔用內存,所以會造成內存不夠,如果對象沒有被引用,即對象沒用,則會被gc在不定時間進行垃圾回收
java jvm內存管理大概分爲兩種情況,
1.有向圖的方式進行內存管理(即對象是否可達)。
大多數情況下通過main函數能夠訪問到對象即爲有效對象,gc不會回收,如果不能訪問到的對象,即會被gc回收。
特點:效率低,精度高
2.通過計數器的方式進行內存管理
jvm跟蹤每個對象,判斷對象被引用的次數,如果次數爲0則被回收。
特點:效率高,精度低(很難判斷循環引用:例如A對象引用了B對象,B對象引用了A對象)
一些方法:
1.在別寫代碼時當引用的對象使用完畢,即將引用設置爲null,使其引用的對象爲無用對象,這樣gc進行垃圾回收
2.儘量避免對象循環引用
3.利用工具跟蹤判斷內存中對象使用情況