大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java堆內存和棧內存的區別

Java堆內存和棧內存的區別

更新時間:2022-07-07 12:00:28 來源:動力節點 瀏覽1552次

Java 應用程序在計算機的RAM中編譯和執行。每個應用程序都分配了一定數量的內存。在 RAM 中分配的內存稱為應用程序內存。數據和代碼存儲在這里。分配給 Java 進程的內存量取決于多個因素,例如Java 運行時環境 (JRE)、操作系統、處理器等。JVM 將分配給進程的內存分為五個部分:Java堆棧、堆、類/方法區、程序計數器寄存器和本機方法堆棧。在本文中,動力節點小編將對堆棧和堆內存進行介紹。

Java中的堆棧內存是什么?

堆棧內存是為進程分配的空間,用于存儲所有函數調用、原始數據類型(如 int、double 等)以及函數的局部變量和引用變量。堆棧內存始終以后進先出 (LIFO)方式訪問。在堆棧內存中,為每個執行的方法創建一個新的內存塊。方法內的所有原始變量和對對象的引用都存儲在此內存塊中。當方法完成執行時,內存塊從堆棧內存中清除,堆棧內存可供使用。只要創建它們的函數正在運行,堆棧中的值就存在。堆棧內存的大小是固定的,一旦創建就不能增長或縮小。

Java中的堆棧內存示例

下面是一個簡單的 Java 程序,它包含三個方法main、addOne和addTwo。當這個程序執行時,我們將看到堆棧使用的逐步解釋。

public class Main {
  public static int addOne(int input) {
    return input + 1;
  }
  public static int addTwo(int input) {
    return input + 2;
  }
  public static void main(String[] args) {
    int x = 0;
    x = addOne(x);
    x = addTwo(x);
  }
}

1.程序執行時,JVM首先執行main方法。調用 main 方法時,會在堆棧中為其分配一個塊。方法中的變量被創建、賦值,然后存儲在塊中。

2.當從 main 方法調用addOne方法時,會在堆棧中分配一個新塊。該方法的變量被創建并存儲在塊中。方法執行完成后,將值返回給調用方法(這里是主方法),并清除塊。

3.同樣,當調用addTwo方法時,會為其分配一個新塊,并創建和存儲變量。當方法完成執行時,將值返回給調用方法,并清除塊。

4.最后,main方法完成其執行,并且從堆棧中清除該塊。

Java中的堆內存是什么?

堆內存用于存儲在 Java 程序執行期間創建的對象。對創建的對象的引用存儲在堆棧內存中。堆遵循動態內存分配(內存在執行或運行時分配)并提供隨機訪問,與堆棧不同,堆棧遵循后進先出 (LIFO) 順序。與堆棧相比,堆內存的大小很大。堆內存中未使用的對象由垃圾收集器自動清除。JVM堆內存可以分為三部分:

新一代或年輕一代

老一代或老一代

永久代

新一代或年輕一代

年輕代是分配所有新創建對象的地方。新一代依次有 3 個部分,Eden、Survivor1和Survivor2。所有新創建的對象都分配在伊甸園空間中。當 Eden 已滿時,會發生一次次要的垃圾回收,并將活動對象移至Survivor1,然后移至Survivor2. Survivor1 和 Survivor2 包含在次要垃圾收集中幸存下來的對象。在 Eden、Survivor1 和 Survivor2 中幸存下來的對象將被移至終身代。在年老代中,垃圾收集的頻率較低,因此使用 Survivor1 和 Survivor2 空間來確保只有長期存活的對象才會被移動到年老代。

老一代或老一代

年齡是為年輕代分配的對象設置的。當達到那個年齡時,那些活著的對象被移動到老年代。一般來說,長期存活的對象存儲在老年代。主要垃圾收集在老年代運行以收集死對象。

永久代

JVM 使用永久代來存儲有關類和方法的元數據。JVM 還將 Java 標準庫存儲在永久代中。該空間作為完整垃圾回收的一部分進行清理。

Java 中的堆內存示例

import java.util.ArrayList;
import java.util.List;
public class HeapMemory {
  public static void main(String[] args) {
    int x = 10;
    List < Integer > list = new ArrayList < > ();
    list.add(1);
    list.add(2);
    list.add(3);
  }
}

在上面的例子中,變量x分配在堆棧中,而對象列表分配在堆中。只有對列表對象的引用存儲在堆棧中。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 一本久道久久综合狠狠爱 | 久久99精品久久久久子伦小说 | 欧美肥婆videos另类 | 九九在线精品视频播放 | 亚洲一区中文字幕在线 | 四虎官网 | 91成人在线免费视频 | 九九久久99综合一区二区 | 日韩孕交japanese孕交 | 亚洲精品无码不卡在线播放he | 日韩美女视频一区 | 久久这里只有精品66re99 | 亚洲国产精品久久久久婷婷老年 | 免费一级毛片 | 久久综合玖玖爱中文字幕 | 色综合综合网 | 狠狠草视频 | 国产高清在线视频一区二区三区 | 天天躁日日2018躁狠狠躁 | 亚洲观看视频 | 国产精品久久久久9999 | 国产婷婷丁香久久综合 | 亚洲精品视频免费观看 | 精品性久久 | 97理论三级九七午夜在线观看 | 欧美japanese孕交 | 五月天婷婷免费观看视频在线 | 精品人人做人人爽久久久 | 日日噜噜噜夜夜爽爽狠狠69 | 久久66久这里精品99 | 欧美日韩免费在线 | 思思久久这里只精品99re66 | 狠狠色噜噜狠狠狠狠97老肥女 | 天天做天天爱夜夜爽女人爽宅 | 九九视频在线看精品 | 免费h片在线观看网址最新 免费v片在线观看无遮挡 | 欧美啊v在线观看 | 日韩一级片 | 久久精品国产400部免费看 | 欧美视频久久久 | 黄色片免费在线观看视频 |