Java中堆和棧的區別

堆和棧都是Java用來在RAM中存放數據的地方。html

微信

(1)Java的堆是一個運行時數據區,類的對象從堆中分配空間。這些對象經過new等指令創建,經過垃圾回收器來銷燬。機器學習

(2)堆的優點是能夠動態地分配內存空間,須要多少內存空間沒必要事先告訴編譯器,由於它是在運行時動態分配的。但缺點是,因爲須要在運行時動態分配內存,因此存取速度較慢。學習

大數據

(1)棧中主要存放一些基本數據類型的變量(byte,short,int,long,float,double,boolean,char)和對象的引用。人工智能

(2)棧的優點是,存取速度比堆快,棧數據能夠共享。但缺點是,存放在棧中的數據佔用多少內存空間須要在編譯時肯定下來,缺少靈活性。code

舉例說明棧數據能夠共享htm

String 能夠用如下兩種方式來建立:對象

String str1 = new String("abc");
String str2 = "abc";

第一種使用new來建立的對象,它存放在堆中。每調用一次就建立一個新的對象。blog

第二種是先在棧中建立對象的引用str2,而後查找棧中有沒有存放「abc」,若是沒有,則將「abc」存放進棧,並將str2指向「abc」,若是已經有「abc」, 則直接將str2指向「abc」。

下面用代碼說明上面的理論:

public static void main(String[] args) {
       String str1 = new String("abc");
       String str2 = new String("abc");
       System.out.println(str1 == str2);
   }

輸出結果爲:false

public static void main(String[] args) {
       String str1 = "abc";
       String str2 = "abc";
       System.out.println(str1 == str2);
   }

輸出結果爲:true

所以,用第二種方式建立多個「abc」字符串,在內存中其實只存在一個對象而已。這種寫法有利於節省內存空間。同時還能夠提升程序的運行速度,由於JVM會自動根據棧中數據的實際狀況來決定是否建立新對象。

來源:www.cnblogs.com/nnngu/p/8300761.html
在這裏插入圖片描述

歡迎關注個人微信公衆號「碼農突圍」,分享Python、Java、大數據、機器學習、人工智能等技術,關注碼農技術提高•職場突圍•思惟躍遷,20萬+碼農成長充電第一站,陪有夢想的你一塊兒成長

相關文章
相關標籤/搜索