JVM內存結構java
項目中的數據是怎麼運行的呢?程序員
java文件編譯後運行就變成了class文件spa
class文件經過類加載器存入內存空間中對象
內存空間:內存
方法區:保存了static和class的信息 ,且在方法區中是永久保存的,垃圾回收機制(GC)是不會回收的資源
堆:通常由程序員分配釋放,保存了new出來的信息,在堆中垃圾回收機制(GC)是會回收的開發
堆內存中又分爲新生代和老生代編譯器
新生代:不常用的對象存在的地區(GC回收的次數比較多的)編譯
eden:當new出來的時候就會在eden中,也是GC常常回收的一個區class
注:S1和S2功能是同樣的,大小也是同樣的
S1(from):new出來後一段時間就會保存在這裏
S2(to):new出來後一段時間就會保存在這裏
老年代: 常用的對象存放的地區 (GC回收的次數比較少的)
當你常用一個對象的時候,就會自動的保存到老年代
棧:由編譯器自動分配釋放,保存了臨時信息,即便用的方法,在棧中會自動釋放資源,
常見問題:棧內存會不會內存溢出呢?
答案: 會的,例如死循環或者在類中調用本類,它們會一直循環知道大於棧內存的深度就會內存溢出
本地方法棧:在安卓開發中底層是c語言,本地方法棧表示用java調用c語言
垃圾回收機制(gc):回收堆內存中的數據