1.jvm 啓動流程
2.jvm基本結構
pc寄存器:
-每個線程擁有一個pc寄存器
-在線程創建時創建
-指向下一條指令的地址
-執行本地方法時,Pc的值爲undefined (未定義的)
方法區:
1.保存裝載的類信息
-類型的常量
-字段,方法信息
-方法字節碼
(jdk6:String等常量反正方法區 jdk7:已經將String等常量移到了)
2.通常和永久區關聯在一起
java堆:
-和程序開發密切相關
-應用系統對象都保存在java堆中
-對分代的GC來說,堆也是分代的
-GC的主要工作區間
複製算法
java棧:
-線程私有
-棧由一系列幀組成(因此java棧也叫作幀棧)
-幀保存一個方法的局部變量,操作數據,常量池指針
-每一次方法調用創建一個幀,並壓棧
–局部變量表包含參數和局部變量
public static inttest(int a,int b, int c){
returntest(a,b,c);
}
public class Personnel {
private String name;
public Personnel(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void sysoName()
{
System.out.println(name);
}
}
public class TestMain {
public static void main(String[] args) {
Personnel a = new Personnel("testa");
Personnel b = new Personnel("testb");
a.sysoName();
b.sysoName();
}
}
3.內存模型
-每一個線程有一個工作內存和主存獨立
-工作內存存放主存中變量的值的拷貝
當數據從主內存複製到工作存儲時,必須出現兩個動作:第一,由主內存執行的讀(read)操作;第二,由工作內存執行的相應的load操作;當數據從工作內存拷貝到主內存時,也出現兩個操作:第一個,由工作內存執行的存儲(store)操作;第二,由主內存執行的相應的寫(write)操作
每一個操作都是原子的,即執行期間不會被中斷
對於普通變量,一個線程中更新的值,不能馬上反應在其他變量中
如果需要在其他線程中立即可見,需要使用 volatile 關鍵字
4編譯和解釋運行的概念