與平臺(tái)無(wú)關(guān)
Java語(yǔ)言的一個(gè)重要特性就是與平臺(tái)無(wú)關(guān)性摔刁。JVM是實(shí)現(xiàn)這一技術(shù)的關(guān)鍵坑匠。
JVM對(duì)類的加載機(jī)制請(qǐng)參考 Java 類加載器的工作機(jī)制
堆和棧的區(qū)別
jvm 中堆和棧屬于不同的內(nèi)存區(qū)域。棧區(qū)用于存放方法幀和局部變量救斑,堆區(qū)用于存放對(duì)象稍走,也就是對(duì)象分配在堆上。棧區(qū)比較小朗鸠,但是速度快,棧區(qū)數(shù)據(jù)不在多線程之間存在共享础倍,堆是被整個(gè)JVM所有的線程共享的烛占。
JVM內(nèi)存分配
1、基本類型數(shù)據(jù)變量和對(duì)象的引用都是在棧上分配的
2沟启、堆內(nèi)存用來(lái)存放new的對(duì)象和數(shù)組
3忆家、類變量(static修飾的變量),程序在第一次加載的時(shí)候就在堆中為類變量分配內(nèi)存德迹,堆中的內(nèi)存地址存放在棧中
4芽卿、實(shí)例變量:當(dāng)new對(duì)象的時(shí)候,系統(tǒng)在堆中為其開辟不一定是連續(xù)的空間分配給變量胳搞,是根據(jù)零散的堆內(nèi)存地址卸例,通過(guò)哈希算法換算為一串?dāng)?shù)字來(lái)表示這個(gè)變量在堆中的物理位置,實(shí)例變量的生命周期———當(dāng)實(shí)例變量的引用失去后肌毅,將會(huì)被GC列入可回收名單列表筷转,但并不是立即釋放堆中內(nèi)存
5、局部變量:因?yàn)槠渎暶髟诜椒ㄖ谢蛘吣扯未a里悬而,執(zhí)行他的時(shí)候會(huì)在棧中開辟內(nèi)存呜舒,當(dāng)局部變量一但脫離作用域,內(nèi)存立即釋放