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

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 Java堆空間與堆棧內(nèi)存

Java堆空間與堆棧內(nèi)存

更新時(shí)間:2021-08-23 11:09:25 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1052次

什么是Java堆空間

它是由Java虛擬機(jī)在啟動(dòng)時(shí)創(chuàng)建的。只要應(yīng)用程序正在運(yùn)行,就會(huì)使用內(nèi)存。Java運(yùn)行時(shí)使用它為對(duì)象和Java運(yùn)行時(shí)環(huán)境 (JRE) 類分配內(nèi)存。

創(chuàng)建對(duì)象時(shí),它總是在Heap中創(chuàng)建并具有全局訪問權(quán)限。這意味著可以從應(yīng)用程序的任何地方引用所有對(duì)象。

它由兩個(gè)概念管理:垃圾收集和年輕代、年老代。

垃圾收集通過清除方法中沒有任何引用的對(duì)象來釋放內(nèi)存。這些是不再使用的對(duì)象。清除它們可確保它們不會(huì)占用堆中的空間。

年輕代、年老代通過將Java堆空間劃分為兩代來幫助確定垃圾收集對(duì)象的優(yōu)先級(jí)。

托兒所是存儲(chǔ)新對(duì)象的年輕一代。當(dāng)托兒所已滿時(shí),垃圾收集會(huì)將其清理干凈。請(qǐng)注意,只有托兒所的內(nèi)存空間已滿。老一代還有記憶。

老年代是對(duì)象的家園,它們已經(jīng)存在了足夠長(zhǎng)的時(shí)間。當(dāng)老年代空間用完時(shí),垃圾回收會(huì)移除老年代空間中未使用的對(duì)象。同樣,當(dāng)舊的垃圾收集發(fā)生時(shí),只有部分堆已滿。托兒所還有空位。

什么是Java堆棧內(nèi)存?

這是調(diào)用它們的方法時(shí)存儲(chǔ)變量值的臨時(shí)內(nèi)存。方法完成后,包含這些值的內(nèi)存將被清除,以便為新方法騰出空間。

當(dāng)調(diào)用一個(gè)新方法時(shí),會(huì)在堆棧中創(chuàng)建一個(gè)新的內(nèi)存塊。這個(gè)新塊將存儲(chǔ)該方法調(diào)用的臨時(shí)值以及對(duì)存儲(chǔ)在該方法正在使用的堆中的對(duì)象的引用。

此塊中的任何值只能由當(dāng)前方法訪問,一旦結(jié)束將不存在。

當(dāng)該方法結(jié)束時(shí),該塊將被擦除。調(diào)用的下一個(gè)方法將使用該空塊。

這種“后進(jìn)先出”方法可以輕松找到所需的值并允許快速訪問這些值。

如何在Java應(yīng)用程序中使用它們

讓我們看一個(gè)非常簡(jiǎn)單的Java應(yīng)用程序示例,了解如何分配內(nèi)存。

包裝融為一體。journaldev 。測(cè)試;包裝融為一體。journaldev 。測(cè)試;public class Memory { public static void main ( String [] args ) { // 第 1 行 int i=1; // 第 2 行 Object obj = new Object(); // 第 3 行 Memory mem = new Memory(); // 第 4 行 mem.foo(obj); // 第 5 行 } // 第 9 行private void foo ( Object param ) {     
    // 第 6 行 String str = param.toString(); //// 第 7 行 System.out.println(str); } // 第 8 行}

在上面來自JournalDev.com 的例子中,Stack 和 Heap 的使用解釋如下:

當(dāng)程序運(yùn)行時(shí),所有運(yùn)行時(shí)類都被加載到堆空間中。

Java 運(yùn)行時(shí)在第 1 行發(fā)現(xiàn) main() 方法線程時(shí)創(chuàng)建堆棧內(nèi)存以供其使用。在第 2 行,創(chuàng)建一個(gè)原始局部變量,該變量存儲(chǔ)在 main() 方法的堆棧內(nèi)存中。

因?yàn)閷?duì)象是在第 3 行創(chuàng)建的,所以它是在堆內(nèi)存中創(chuàng)建的,它的引用存儲(chǔ)在堆棧內(nèi)存中。在第 4 行,創(chuàng)建 Memory 對(duì)象時(shí)會(huì)發(fā)生類似的過程。

在第 5 行調(diào)用 foo() 方法時(shí),會(huì)為其創(chuàng)建 Stack 頂部的一個(gè)塊。由于 Java 是按值傳遞的,因此在第 6 行的 foo() 堆棧塊中創(chuàng)建了對(duì) Object 的新引用。

在第 7 行,創(chuàng)建了一個(gè)字符串,它位于堆空間的字符串池中,同時(shí)在 foo() 堆棧空間中創(chuàng)建了它的引用。在第 8 行,foo() 方法被終止,堆棧中為其分配的內(nèi)存塊被釋放。

最后,在第 9 行,main() 方法終止,并銷毀為其創(chuàng)建的堆棧內(nèi)存。因?yàn)槌绦蛟谶@一行結(jié)束,Java Runtime 釋放所有內(nèi)存并結(jié)束程序的執(zhí)行。

主要區(qū)別

Java堆空間在整個(gè)應(yīng)用程序中使用,但堆棧僅用于當(dāng)前運(yùn)行的方法(或多個(gè)方法)。

堆空間包含所有創(chuàng)建的對(duì)象,但堆棧包含對(duì)這些對(duì)象的任何引用。

存儲(chǔ)在堆中的對(duì)象可以在整個(gè)應(yīng)用程序中訪問。原始局部變量只能訪問包含它們的方法的堆棧內(nèi)存塊。

堆空間中的內(nèi)存分配是通過一個(gè)復(fù)雜的、年輕代、年老代系統(tǒng)訪問的。堆棧是通過后進(jìn)先出 (LIFO) 內(nèi)存分配系統(tǒng)訪問的。

只要應(yīng)用程序運(yùn)行,堆空間就存在,并且大于堆棧,這是臨時(shí)的,但速度更快。

以上就是動(dòng)力節(jié)點(diǎn)小編介紹的"Java堆空間與堆棧內(nèi)存",希望對(duì)大家有幫助,想了解更多可查看Java堆棧。動(dòng)力節(jié)點(diǎn)在線學(xué)習(xí)教程,針對(duì)沒有任何Java基礎(chǔ)的讀者學(xué)習(xí),讓你從入門到精通,主要介紹了一些Java基礎(chǔ)的核心知識(shí),讓同學(xué)們更好更方便的學(xué)習(xí)和了解Java編程,感興趣的同學(xué)可以關(guān)注一下。

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-04-24 搶座中
  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 香蕉视频精品 | 亚洲欧美日韩网站 | 久久午夜伦理 | 一级特级毛片 | 亚洲精品久久国产小说 | 欧美日韩一区二区三 | 亚洲免费人成在线视频观看 | 免费一级欧美片片线观看 | 久久精品无码一区二区日韩av | 二级毛片| 欧美一区二区三区在观看 | 苗族一级特黄a大片 | 天天看天天射天天碰 | 成人毛片免费观看视频大全 | 久久精品国产99久久香蕉 | 国产区高清 | 亚洲国产激情 | 亚洲欧美乱综合图片区小说区 | 国产成a人片在线观看视频 国产成a人片在线观看视频99 | 欧美日韩精品高清一区二区 | 久草观看视频 | 国产一级毛片国语版 | 日韩 欧美 亚洲 | 国产福利91 | 欧美日韩视频精品一区二区 | 欧毛片 | 99精品国产高清一区二区麻豆 | 日日噜噜夜夜狠视频免费 | 天天插夜夜 | 亚洲视频一区二区在线观看 | 免费视频亚洲 | 精品一区国产 | 精品一久久香蕉国产线看观 | 欧美国产成人在线 | 日本成本人在线观看免费视频 | 精品久久天干天天天按摩 | 奇米在线视频观看 | 日韩女人做爰大片 | 欧美综合精品一区二区三区 | 久久99亚洲精品久久久久 | 香蕉爱爱视频 |