java採起多線程機制,每一個線程之間公用一個主內存,而後每一個線程都有本身的工做內存,線程工做的時候,經過主內存和本身的工做內存進行交互,交給線程處理java
程序計數器是一塊記錄着執行代碼地址的內存,因爲線程執行是相似cpu之間來回切換,因此多個線程之間也是來回切換執行,因此每一個線程都必須有本身的程序計數器,記錄這當前執行代碼的地址,而且各個線程之間的程序計數器不能相互影響,因此每一個程序計數器都是線程私有,與線程無關。多線程
Java棧也是線程私有,java虛擬站描述的是Java執行的內存模型,方法執行的時候會建立一個棧幀,記錄着局部變量表,動態連接,操做表,方法出口,方法執行的過程,就是入棧和出棧的過程spa
Java堆線程共享,多放實例變量線程
方法區,線程共享,放編譯以後的代碼和數據對象
五、運行時常量池blog
運行時常量池(Runtime Constant Pool)是方法區的一部分。Class 文件中除了有接口
類的版本、字段、方法、接口等描述等信息外,還有一項信息是常量池(Constant Pool內存
Table),用於存放編譯期生成的各類字面量和符號引用,這部份內容將在類加載後存放字符串
到方法區的運行時常量池中。get
聲明爲static和transient類型的成員數據不能被序列化。由於static表明類的狀態,transient表明對象的臨時數據
「==」比較兩個變量自己的值,即兩個對象在內存中的首地址。
「equals()」比較字符串中所包含的內容是否相同。
object類是全部類的父類 有 toString(),getClass(),equals(),clone(),finalize()等方法,
toString() : 若是在實際使用中爲特定對象提供一個特定的輸出模式,當這個類型轉換爲字符串或字符串鏈接時,建自動調用重寫的toString()方法。
equals和==的區別:
對於字符串變量來講,使用「==」和「equals()」方法比較字符串時,其比較方法不一樣。
「==」比較兩個變量自己的值,即兩個對象在內存中的首地址。
「equals()」比較字符串中所包含的內容是否相同。
object類中比較equals是比較的地址,兩個字符串常量所表示的地址是相同的
注意還有常量池的概念,若是首先建立了一個常量,就會保存在常量池中,再次建立變量的時候,就會去常量池中尋找這個常量,若是有的話,直接指向這個常量無需再次建立對象