tomcat JVM

a.java —>complier—>a.calss—>jvm<—o1.calss(程序需要加載的外部class)
————————————
一、JVM內存管理——運行時數據區
tomcat JVM

(1)Methid Area(方法區) :與Java堆一樣,是各個線程共享的內存區域,它用於存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯後的代碼等數據。雖然Java虛擬機規範把方法區描述爲堆的一個邏輯部分,但是它卻有一個別名叫做Non-Heap(非堆),目的應該是與Java堆區分開來。
1.又叫靜態區,跟堆一樣,被所有的線程共享。方法區包含所有的class和static變量。
2.方法區中包含的都是在整個程序中永遠唯一的元素,如class,static變量。

(2)堆內存 (Heap Memory):java堆是JVm所管理的內存中最大的一部分,也是GCC管理的主要區域,主流的算法都基於分代收集方式進行,線程共享
1.存儲的全部是對象,每個對象都包含一個與之對應的class的信息。(class的目的是得到操作指令)
2.jvm只有一個堆區(heap)被所有線程共享,堆中不存放基本類型和對象引用,只存放對象本身

(3)JVM棧 (Java Virtual Machine Stacks) : 線程私有,存放線程自己的局部變量等信息
1.每個線程包含一個棧區,棧中只保存基礎數據類型的對象和自定義對象的引用(不是對象),對象都存放在堆區中
2.每個棧中的數據(原始類型和對象引用)都是私有的,其他棧不能訪問。
3.棧分爲3個部分:基本類型變量區、執行環境上下文、操作指令區(存放操作指令)。

(4)本地方法棧 (Native Method Stacks) :

(5)程序計數器 (Program Counter (PC) Register):線程獨佔的內存空間

2、JVM 堆(新生代 老年代 持久代)
tomcat JVM
Eden space:where objects are bron(新生區,初創對象)
Survivor Space:Where objects mature(to和from,步入成熟期的初創對象)
Tenure Space:Where objects grow old and die()

3、垃圾回收器
新生代回收:Minor GC
(1)在Eden創建兩個,1個存活的放在to,1個不用的直接GC
(2)又創建兩個,在to和from中需要GC的會放在to當中GC,保存的放在from,而沒到to和from的則直接GC
(3)在from中的放到OLD
OR
(3)在from放到to
老年代回收:Major GC(FULL GC)
遍歷整個OLD——>標記——>打包——>清除

4、堆內存空間的調整參數
-Xmx 新生代和老年代=總共可用的最大空間
-Xms 二者初始化空間
-XX:NewSize 新生代初始化空間
-XX:MaxNesSize 新生代的最大空間
-XX:MaxPermSize 持久代的最大空間
-XX:PermSize 持久代初始化空間
CATALINA_OPTS:僅對tomcat生效
JAVA_OPTS:對OS的所有JAVA虛擬機生效

5、問題
(1)OutOfMemoryError:內存不足
(2) 內存泄漏
(3)線程鎖死
(4)鎖競爭(Lock Contention)
(5)JAVA消耗過多的CPU
監控jsp jstack jmap jhat jstat

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章