亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 Java Java基礎(chǔ) 堆疊和堆疊的區(qū)別java

堆疊和堆疊的區(qū)別java

Nov 13, 2019 pm 02:32 PM
java 差別 堆疊

堆疊和堆疊的區(qū)別java

堆疊和堆疊的差異java ? ?

在說堆疊和堆疊之前,我們先說JVM(虛擬機(jī)器)記憶體的劃分:

Java程式在運(yùn)作時都要開啟空間,任何軟體在運(yùn)作時都要在記憶體中開啟空間,Java虛擬機(jī)器運(yùn)作時也是要開啟空間的。 JVM運(yùn)行時在記憶體中開啟一片記憶體區(qū)域,啟動時在自己的記憶體區(qū)域進(jìn)行更細(xì)緻的劃分,因?yàn)樘摂M機(jī)器中每一片記憶體處理的方式都不同,所以要單獨(dú)進(jìn)行管理。

JVM記憶體的分割有五片:

1. 暫存器;

2. 本地方法區(qū);

3. 方法區(qū);

4. 堆疊記憶體;

5. 堆疊記憶體。

我們重點(diǎn)來說一下堆疊和堆疊:

堆疊記憶體:棧記憶體首先是一片記憶體區(qū)域,儲存的都是局部變量,凡是定義在方法中的都是局部變數(shù)(方法外的是全域變數(shù)),for迴圈內(nèi)部定義的也是局部變量,是先載入函數(shù)才能進(jìn)行局部變數(shù)的定義,所以方法先進(jìn)棧,然後再定義變量,變數(shù)有自己的作用域,一旦離開作用域,變數(shù)就會被釋放。棧記憶體的更新速度很快,因?yàn)榫植孔償?shù)的生命週期都很短。

堆記憶體:儲存的是數(shù)組和物件(其實(shí)數(shù)組就是物件),凡是new建立的都是在堆中,堆中存放的都是實(shí)體(物件),實(shí)體用於封裝數(shù)據(jù),而且是封裝多個(實(shí)體的多個屬性),如果一個資料消失,這個實(shí)體也沒有消失,還可以用,所以堆是不會隨時釋放的,但是棧不一樣,棧裡存放的都是單一變量,變數(shù)被釋放了,那就沒有了。堆裡的實(shí)體雖然不會被釋放,但是會被當(dāng)成垃圾,Java有垃圾回收機(jī)制不定時的收取。

下面我們透過一個圖例詳細(xì)講一下堆疊和堆疊:

例如主函數(shù)裡的語句? ?int [] arr=new int [3];在記憶體中是怎麼被定義的:

主函數(shù)先進(jìn)棧,在堆疊中定義一個變數(shù)arr,接下來為arr賦值,但是右邊不是一個具體值,是一個實(shí)體。實(shí)體創(chuàng)建在堆裡,在堆里首先透過new關(guān)鍵字開闢一個空間,內(nèi)存在儲存資料的時候都是透過位址來體現(xiàn)的,位址是一塊連續(xù)的二進(jìn)制,然後給這個實(shí)體分配一個記憶體位址。數(shù)組都是有索引,數(shù)組這個實(shí)體在堆記憶體中產(chǎn)生之後每一個空間都會進(jìn)行預(yù)設(shè)的初始化(這是堆記憶體的特點(diǎn),未初始化的資料是不能用的,但在堆裡是可以用的,因?yàn)槌跏蓟^了,但是在堆疊裡沒有),不同的型別初始化的值不一樣。所以堆疊和堆疊裡就創(chuàng)建了變數(shù)和實(shí)體:

堆疊和堆疊的區(qū)別java

那麼堆疊和堆疊是怎麼連結(jié)起來的呢?

我們剛剛說過給堆分配了一個位址,把堆的位址賦給arr,arr就透過位址指向了陣列。所以arr想操縱陣列時,就透過位址,而不是直接把實(shí)體都賦給它。這種我們不再叫他基本資料型,而叫引用資料型態(tài)。稱為arr引用了堆內(nèi)存當(dāng)中的實(shí)體。 (可以理解為c或c 的指針,Java成長自c 和c 很像,優(yōu)化了c )? ?

?堆疊和堆疊的區(qū)別java

如果當(dāng)int [] arr=null;

arr不做任何指向,null的作用就是取消引用資料型別的指向。

當(dāng)一個實(shí)體,沒有引用資料型別指向的時候,它在堆記憶體中不會被釋放,而當(dāng)一個垃圾,在不定時的時間內(nèi)自動回收,因?yàn)镴ava有一個自動回收機(jī)制,(而c 沒有,需要程式設(shè)計師手動回收,如果不回收就越堆越多,直到撐滿記憶體溢出,所以Java在記憶體管理上優(yōu)於c )。自動回收機(jī)制(程式)自動監(jiān)測堆裡是否有垃圾,如果有,就會自動的做垃圾回收的動作,但是什麼時候收不一定。

所以堆疊與堆疊的差異很明顯:

1.堆疊記憶體儲存的是局部變數(shù)而堆疊記憶體儲存的是實(shí)體;

# 2.棧內(nèi)存的更新速度要快於堆內(nèi)存,因?yàn)榫植孔兞康纳L期很短;

3.棧內(nèi)存存放的變量生命週期一旦結(jié)束就會被釋放,而堆內(nèi)存存放的實(shí)體會被垃圾回收機(jī)制不定時的回收。

php中文網(wǎng),大量的免費(fèi)Java入門教學(xué),歡迎線上學(xué)習(xí)!?

以上是堆疊和堆疊的區(qū)別java的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
VSCODE設(shè)置。 JSON位置 VSCODE設(shè)置。 JSON位置 Aug 01, 2025 am 06:12 AM

settings.json文件位於用戶級或工作區(qū)級路徑,用於自定義VSCode設(shè)置。 1.用戶級路徑:Windows為C:\Users\\AppData\Roaming\Code\User\settings.json,macOS為/Users//Library/ApplicationSupport/Code/User/settings.json,Linux為/home//.config/Code/User/settings.json;2.工作區(qū)級路徑:項(xiàng)目根目錄下的.vscode/settings

如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務(wù),必須先關(guān)閉自動提交模式,再執(zhí)行多個操作,最後根據(jù)結(jié)果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開始事務(wù);2.執(zhí)行多個SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時應(yīng)使用try-with-resources管理資源,妥善處理異常並關(guān)閉連接,避免連接洩漏;此外建議使用連接池、設(shè)置保存點(diǎn)實(shí)現(xiàn)部分回滾,並保持事務(wù)盡可能短以提升性能。

在Java的掌握依賴注入春季和Guice 在Java的掌握依賴注入春季和Guice Aug 01, 2025 am 05:53 AM

依賴性(di)IsadesignpatternwhereObjectsReceivedenciesenciesExtern上,推廣looseSecouplingAndEaseerTestingThroughConstructor,setter,orfieldInjection.2.springfraMefringframeWorkSannotationsLikeLikeLike@component@component,@component,@service,@autowiredwithjava-service和@autowiredwithjava-ligatiredwithjava-lase-lightike

數(shù)字貨幣btc怎麼獲??? btc和數(shù)字貨幣的區(qū)別有哪些? 數(shù)字貨幣btc怎麼獲取? btc和數(shù)字貨幣的區(qū)別有哪些? Aug 01, 2025 pm 11:15 PM

獲取BTC的主要途徑有4種:1、通過幣安、OK、火幣、Gate.io等中心化交易平臺註冊並用法幣或其他數(shù)字資產(chǎn)兌換;2、參與P2P平臺直接與個人交易,需注意對手方信用風(fēng)險;3、提供商品或服務(wù)接受BTC作為支付報酬;4、參與空投、競賽等平臺獎勵活動獲取少量BTC。 BTC與數(shù)字貨幣的核心區(qū)別在於:1、BTC是數(shù)字貨幣的一種,屬於種屬關(guān)係;2、BTC採用工作量證明(PoW)機(jī)制,而其他數(shù)字貨幣可能使用權(quán)益證明(PoS)等多種技術(shù);3、BTC強(qiáng)調(diào)“數(shù)字黃金”的價值儲存功能,其他數(shù)字貨幣可能側(cè)重支付效率或

了解Java虛擬機(jī)(JVM)內(nèi)部 了解Java虛擬機(jī)(JVM)內(nèi)部 Aug 01, 2025 am 06:31 AM

TheJVMenablesJava’s"writeonce,runanywhere"capabilitybyexecutingbytecodethroughfourmaincomponents:1.TheClassLoaderSubsystemloads,links,andinitializes.classfilesusingbootstrap,extension,andapplicationclassloaders,ensuringsecureandlazyclassloa

如何使用Java的日曆? 如何使用Java的日曆? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過LocalDate、LocalDateTime和LocalTime獲取當(dāng)前日期時間;3.使用of()方法創(chuàng)建特定日期時間;4.利用plus/minus方法不可變地增減時間;5.使用ZonedDateTime和ZoneId處理時區(qū);6.通過DateTimeFormatter格式化和解析日期字符串;7.必要時通過Instant與舊日期類型兼容;現(xiàn)代Java中日期處理應(yīng)優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線

Google Chrome無法打開本地文件 Google Chrome無法打開本地文件 Aug 01, 2025 am 05:24 AM

ChromecanopenlocalfileslikeHTMLandPDFsbyusing"Openfile"ordraggingthemintothebrowser;ensuretheaddressstartswithfile:///;2.SecurityrestrictionsblockAJAX,localStorage,andcross-folderaccessonfile://;usealocalserverlikepython-mhttp.server8000tor

USDT本位、USDC本位和幣本位的區(qū)別有哪些?幣圈大白話 USDT本位、USDC本位和幣本位的區(qū)別有哪些?幣圈大白話 Jul 31, 2025 pm 08:21 PM

在數(shù)字資產(chǎn)衍生品市場中,合約交易是核心玩法之一,而理解不同保證金類型是新手入門的第一課。選擇USDT本位、USDC本位還是幣本位合約,直接關(guān)係到你的收益計算方式和風(fēng)險敞口,搞懂它們的區(qū)別,能讓你在市場波動中更好地做出決策。如果你對資金的合規(guī)性和透明度有更高的要求,那麼選擇由歐意OKX、幣安Binance等大平臺支持的USDC本位合約,會讓你感覺更安心。

See all articles