堆內存和棧內存區別


1. 棧(stack)

  在Java中,棧(stack)是由編譯器自動分配和釋放的一塊內存區域,主要用於存放一些基本類型(如int、float等)的變量、指令代碼、常量及對象句柄(也就是對象的引用地址)。

  棧內存實際上就是滿足先進后出的性質的數學或數據結構,棧內存的操作方式類似於數據結構中的棧(僅在表尾進行插入或刪除操作的線性表)。

  棧的優勢在於,它的存取速度比較快,僅次於寄存器,棧中的數據還可以共享,當超過變量的作用域后,Java會自動釋放掉為該變量所分配的內存空間。

  缺點表現在,存在棧中的數據大小與生存期必須是確定的,缺乏靈活性。

2.堆(heap)

  堆(heap)是一個程序運行動態分配的內存區域,堆內存實際上指的就是優先隊列的一種數據結構.

  在Java中,構建對象時所需要的內存從堆中分配。這些對象通過new指令“顯式”建立,這種分配方式類似於數據結構中的鏈表

  堆內存在使用完畢后,是由垃圾回收(Garbage Collection,GC)器“隱式”回收的。

  堆的優勢是在於動態地分配內存大小,可以“按需分配”,其生存期也不必事先告訴編譯器,在使用完畢后,Java的垃圾收集器會自動收走這些不再使用的內存塊。

  缺點為,由於要在運動時才動態分配內存,相比於棧內存,它的存取速度較慢

 

 

 

總結: 

  1.Java開發時候盡量使用基礎類型,少使用包裝類型

  2.定義集合的時候盡量指定大小,減少擴容開銷

   

 

參考:https://www.cnblogs.com/Hellorxh/p/10832256.html ,https://zhidao.baidu.com/question/1175180858536253379.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM