關於jvm的幾點思考

1,一個java程序佔用着一個jvm的實例,佔用着一個進程

2,(一)jvm裏面的堆區是先進後出的結構,主要是存java的8個包裝類型,也可以引用堆區裏面的對象,堆的數據當沒有作用域的時候自動釋放,不經過GC,同時,棧區的數據存在共享機制,int a =1 ; int b =1,對於b,首先會掃描棧區有沒有1,如果有1,就共享出這個數據,而且不會互相影響,沒有則會創建一個新的數據區

(二)jvm裏面的堆區,是先進先出的數據結構,主要是用來存對象和數組的,棧區有引用指向堆區,這就是指針,當堆區裏面的對象沒有引用的時候,就是成爲垃圾,但是這個垃圾何時回收,是看GC機制的。

3,GC只是回收堆區和棧的方法區裏面的數據,數據區的數據是自動釋放的。按年代來劃分GC回收,可以分爲新生代(伊甸園和兩個倖存者空間,兩個倖存者空間不能同時爲空),老年代,和持久代,一開始的對象會被放在新生代,新生代裏面的GC比老年代的頻率多很多,但是老年代的GC會比新生代長很多,老年代裏面有card_table,指向新生代的對象,因而不用搜整一個表。

下次瞭解GC的算法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章