1. 程式人生 > 其它 >git fetch 和 git pull的區別

git fetch 和 git pull的區別

jvm記憶體分類
1,方法區
方法區用來儲存被虛擬機器載入的類資訊、靜態常量、編譯器編譯後的程式碼等資料,方法區中包含的都是在整個程式中永遠唯一的元素,如class,static變數,這個區域是所有執行緒共享的區域,因此,它被設計成為執行緒安全的,final修飾不可修改

2,堆
堆是虛擬機器啟動的時候建立的被所有執行緒共享的區域。這塊區域主要用來存放物件的例項,通過new操作創建出來的物件的例項都儲存在堆空間中,從JDK1.7開始,字串常量池已經被移到堆區了

3,虛擬機器棧
每個執行緒包含一個棧區,棧中只儲存基礎資料型別的物件和自定義物件的引用,棧與執行緒擁有相同的生命週期,當進行方法呼叫時,通過壓棧與彈棧操作進行棧空間的分配與釋放。當一個方法被呼叫的時候,會壓入一個新的棧幀到這個執行緒的棧中,當方法呼叫結束後,就會彈出這個棧幀,從而回收掉呼叫這個方法用的棧空間。

靜態常量:對於該類的物件來說,都只有一個,叫類變數
非靜態常量:每個該類的物件都各有一個,叫成員變數.
1,在建立物件的時候,需要每個成員變數(非靜態)開闢記憶體空間,類變數(靜態變數)則是在類載入的時候就建立好了. 
2,用static修飾過的常量會存到常量池裡面。存入的方式是:先到常量池裡面尋找,看是否該常量已經存在,如果存在返回該常量的引用,不存在就在常量池裡面新建一個常量
3,如果沒有static修飾,就屬於物件的屬性,絕大多是物件是存在堆中,也就是如果多個物件存在同樣一個常量,在堆中會為每一個物件的該常量分配儲存空間。由此可以看出,static修飾後的作用就是減少記憶體的消耗,常量的儲存位置發生了變化

類載入過程