這寫都是想到哪寫到哪,權當本身的一個草稿紙了java
JAVA的內存分爲堆,棧,代碼區,數據區算法
堆,存放的東西比較大,不連續的,須要優專門的回收機制來收回,在C++申請須要new,回收須要delete,在java中有GC機制回收;socket
棧:先進先出,後進後出,相對於函數來講,局部變量這些都是存放在棧中的,函數執行完成後,自動回收了,容量較小,。函數
堆管理起來很麻煩,頻繁地new/remove會形成大量的內存碎片,這樣就會慢慢致使效率低下,大數據
咱們說到的內存泄漏,GC回收,是說的堆內存,由於棧內存在函數結束的時候就被釋放了;對象
內存泄漏:當一個對象本應該被回收,而沒有被回收(可能因爲被引用了啊)內存
有一些以下場景:資源
1,資源對象未關閉,socket通道未關閉,佔用內存資源;rem
2,類的靜態變量維持到大數據量對象引用,阻礙了GC(garbage collection);io
3,例如listener函數未關閉(註冊對象未反註冊)等等
GC機制通常有兩個:
1,發現無用的信息對象;
2,回收無對象佔用的內存空間;
搜索算法有多種,例如從根搜索算法,從一個節點開始GC,OOT開始,尋找對應的引用節點,找到這個節點之後,繼續尋找這個節點的引用節點,當全部的引用節點尋找完畢以後,剩餘的節點則被認爲是沒有被引用到的節點,即無用的節點