本文目錄一覽:
Java的堆內存是什麼?
Java堆(Java Heap)是java虛擬機所管理的內存中最大的一塊
java堆被所有線程共享的一塊內存區域
虛擬機啟動時創建java堆
java堆的唯一目的就是存放對象實例。
java堆是垃圾收集器管理的主要區域。
從內存回收的角度來看, 由於現在收集器基本都採用分代收集算法, 所以Java堆可以細分為:新生代(Young)和老年代(Old)。 新生代又被劃分為三個區域Eden、From Survivor, To Survivor等。無論怎麼劃分,最終存儲的都是實例對象, 進一步劃分的目的是為了更好的回收內存, 或者更快的分配內存。
java堆的大小是可擴展的, 通過-Xmx和-Xms控制。
如果堆內存不夠分配實例對象, 並且對也無法在擴展時, 將會拋出outOfMemoryError異常。
java中堆和棧有什麼區別?
堆:(對象)
引用類型的變量,其內存分配在堆上或者常量池(字符串常量、基本數據類型常量),需要通過new等方式來創建。
堆內存主要作用是存放運行時創建(new)的對象。
(主要用於存放對象,存取速度慢,可以運行時動態分配內存,生存期不需要提前確定)
棧:(基本數據類型變量、對象的引用變量)
基本數據類型的變量(int、short、long、byte、float、double、boolean、char等)以及對象的引用變量,其內存分配在棧上,變量出了作用域就會自動釋放。
棧內存的主要作用是存放基本數據類型和引用變量。棧的內存管理是通過棧的”後進先出”模式來實現的。
(主要用來執行程序,存取速度快,大小和生存期必須確定,缺乏靈活性)
北大青鳥設計培訓:增加java堆空間方法?
在大多數32位機、Sun的JVM上,Java的堆空間默認的大小為128MB,但也有例外,例如在32未Solaris操作系統(SPARC平台版本)上,默認的最大堆空間和起始堆空間大小為-Xms=3670K和-Xmx=64M。
對於64位操作系統,一般堆空間大小增加約30%。
但你使用Java1.5的throughput垃圾回收器,默認最大的堆大小為物理內存的四分之一,而起始堆大小為物理內存的十六分之一。
要想知道默認的堆大小的方法,可以用默認的設置參數打開一個程序,使用JConsole(JDK1.5之後都支持)來查看,在VMSummary頁面可以看到最大的堆大小。
用這種方法你可以根據你的程序的需要來改變堆內存大小,我強烈建議採用這種方法而不是默認值。
如果你的程序很大,有很多對象需要被創建的話,你可以用-Xmsand-Xmx這兩個參數來改變堆內存的大小。
Xms表示起始的堆內存大小,Xmx表示最大的堆內存的大小。
另外有一個參數-Xmn,它表示newgeneration(後面會提到)的大小。
廈門電腦培訓認為有一件事你需要注意,你不能任意改變堆內存的大小,你只能在啟動JVM時設定它。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/305041.html