【Java】JVM複習

TypantK發表於2019-02-26

JVM整體架構


JVM內部分層

 

Class檔案分析


package com.demo;

public class Math {	
		private int math() {
			int a = 1;
			int b = 2;
			int c = (a+b)*10;
			return c;
		}
	
	public static void main(String[] args) {
		Math math = new Math();
		System.out.println(math.math());
	}
}

math.class檔案(cmd 然後javap)

 

 

 


MetaData是元空間,jdk1.8之後才有的。以前叫永久代(非堆),用的是堆裡面(虛擬機器的)記憶體。

現在存在實體記憶體,實現了真正的隔離

方法區是抽象,元空間和永久代是方法區的具體實現

 

堆儲存物件和GC過程

  • 首先先將建立的物件放在Eden區
  • 如果Eden區放滿之後,會進行一次輕(小)gc,將Eden區不可達的物件消除
  • 如果輕(小)gc之後Eden區還是滿的,可以放還存活的物件到SurvivorSpace的From
  • 如果Eden和From都放滿之後,會再一次gc,如果gc之後還是不夠,會將From區資料複製到To區,From就空了
  • 下次Eden區放滿之後gc就放到To區(也就是To和From角色互換了)
  • 經過15次(JDK預設次數)輪詢之後,將還存活的物件就放到Old Generation老年代
  • 老年代放滿之後(前面的新生代都放滿了),就會進行FullGC(Stop the world),Java程式都無法響應了,全部拿來回收

 

相關文章