posts - 4,  comments - 0,  trackbacks - 0
            2011年5月20日
          Heap堆內存理解

          一個JVM實例只有一個堆內存,堆內存的大小是可以調節的。類加載器讀取類文件后,需要把類文件、方法、常量放入到堆內存中,以便執行器執行,堆內存分為三部分:

          1. Permanent Space 永久存儲區

          永久存儲區是一個常駐內存區域,用于存放JDK自身所攜帶的Class,Interface的元數據,也就是說它存儲的是運行環境必須的類信息,被裝載進此區域的數據是不會被垃圾回收器回收掉的,關閉JVM才會釋放此區域所占用的內存。
          2.Young Generation Space 新生區
          新生區是類的誕生、成長、消亡的區域,一個類在這里產生,應用,最后被垃圾回收器收集,結束生命。
          新生區又分為兩部分:伊甸區(Eden space)和幸存者區(Survivor pace)。
          所有的類都是在伊甸區被new出來的。幸存區有兩個: 0區(Survivor 0 space)和1區(Survivor 1 space)。當伊甸園的空間用完時,程序又需要創建對象,JVM的垃圾回收器將對伊甸園區進行垃圾回收,將伊甸園區中的不再被其他對象所引用的對象進行銷毀。然后將伊甸園中的剩余對象移動到幸存0區。若幸存0區也滿了,再對該區進行垃圾回收,然后移動到1區。那如果1區也滿了呢?再移動到養老區。

          3. Tenure Generation Space 養老區
          養老區用于保存從新生區篩選出來的JAVA對象,一般池對象都在這個區域活躍。 三個區的示意圖如下:


          posted @ 2011-05-21 09:42 賀斌 閱讀(590) | 評論 (0)編輯 收藏
          本篇學習棧內存基本知識,附上JAVA代碼
           1package com.howard.jvm;
           2/**
           3 * JAVA的內存管理 (一) 棧內存
           4 * Stack棧 棧內存  JAVA程序的運行區。 是在線程創建時創建,它的生命周期是跟隨線程的生命周期,線程結束棧內存也就釋放,對于棧來說不存在垃圾回收問題
           5 * 只要線程一結束,該棧就Over。
           6 * 棧中的數據都是以棧幀(Stack Frame)的格式存在,棧幀是一個內存區塊,是一個數據集,是一個有關方法(Method)和運行期數據的數據集,當一個方法
           7 * A被調用時就產生了一個棧幀F1,并壓入到棧中,A方法又調用B方法,于是產生棧幀F2也被壓入棧,執行完畢后,先彈出F2棧幀,然后再彈出F1棧幀,遵循“
           8 * 后進先出”的原則。
           9 * 棧幀中主要保存3類數據:
          10 * 1. 本地變量(local Variables),包括輸入參數和輸出參數以及方法內變量;
          11 * 2. 棧操作(Operand Stack),記錄入棧和出棧操作;
          12 * 3. 棧幀數據(Frame Data),包括類文件、方法等等。
          13 *
          14 * @author Administrator
          15 *
          16 */

          17public class StackMemory {
          18
          19    public void methodA() {
          20        System.out.println("產生一個棧幀F1");
          21        int i = 1;
          22        System.out.println("變量i 放入到棧幀F1中");
          23        System.out.println("準備產生一個棧幀F2");
          24        methodB("hello world");
          25    }

          26
          27    public String methodB(String arg) {
          28        System.out.println("產生一個棧幀F2");
          29        System.out.println("參數arg 和 方法返回值 放入到棧幀F2中");
          30        return arg;
          31    }

          32
          33    public static void main(String[] args) {
          34        StackMemory sm = new StackMemory();
          35        System.out.println("準備產生一個棧幀F1,因為將要調用methodA方法");
          36        sm.methodA();
          37    }

          38
          39}

          40



          posted @ 2011-05-20 22:14 賀斌 閱讀(977) | 評論 (0)編輯 收藏
          <2011年5月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 湘乡市| 灵武市| 加查县| 崇义县| 扎鲁特旗| 壤塘县| 崇文区| 濮阳市| 望谟县| 龙江县| 乐清市| 姜堰市| 泰宁县| 富裕县| 迁安市| 丰原市| 元阳县| 十堰市| 象山县| 高陵县| 上蔡县| 丹东市| 富平县| 诏安县| 潼关县| 延吉市| 隆化县| 尉氏县| 盐池县| 黄山市| 蕉岭县| 沙田区| 诸暨市| 惠东县| 纳雍县| 九寨沟县| 常山县| 东乌珠穆沁旗| 台北市| 彩票| 民乐县|