1>棧區:主要用來存放局部變量, 傳遞參數, 存放函數的返回地址。.esp 始終指向棧頂, 棧中的數據越多, esp的值越小。
2>堆區:用於存放動態分配的對象, 當你使用 malloc和new 等進行分配時,所得到的空間就在堆中。動態分配得到的內存區域附帶有分配信息, 所以你 能夠 free和delete它們。
3>數據區:全局,靜態和常量是分配在數據區中的,數據區包括bss(未初始化數據區)和初始化數據區。
注意:
1)堆向高內存地址生長;
2)棧向低內存地址生長;
3)堆和棧相向而生,堆和棧之間有個臨界點,稱爲stkbrk。
雙親委派模式:
1爲了安全性更好一點,2一個是爲了避免重複加載。
當一個類收到加載請求的時候不會自己去加載這個類,而是將其委派給父類由機載,如果父類不能加載的話那就反饋到子類中的由於子類去加載完成的類的加載機制。
當一個類加載器收到類加載任務時,立即將任務委派給它的父類加載器去執行,直至委派給最頂層的啓動類加載器爲止。如果父類加載器無法加載委派給它的類時,將類加載任務退回給它的下一級加載器去執行。除了啓動類加載器以外,每個類加載器擁有一個父類加載器,用戶的自定義類加載器的父類加載器是AppClassLoader。雙親委派模型可以保證全限名指定的類,只被加載一次。雙親委派模型不具有強制性約束,是Java設計者推薦的類加載器實現方式。
打破雙親委派的實際的例子:tomcat中 JDBC中 熱部署技術的。
堆內存:(GC針對的是堆內存)
常用的 JVM 調優的參數都有哪些?
Xms2g:初始化推大小爲 2g;
-Xmx2g:堆最大內存爲 2g;
-XX:NewRatio=4:設置年輕的和老年代的內存比例爲 1:4;
-XX:SurvivorRatio=8:設置新生代 Eden 和 Survivor 比例爲 8:2;
–XX:+UseParNewGC:指定使用 ParNew + Serial Old 垃圾回收器組合;
-XX:+UseParallelOldGC:指定使用 ParNew + ParNew Old 垃圾回收器組合;
-XX:+UseConcMarkSweepGC:指定使用 CMS + Serial Old 垃圾回收器組合;
-XX:+PrintGC:開啓打印 gc 信息;
-XX:+PrintGCDetails:打印 gc 詳細信息。