OutOfMemoryError異常 和 StackOverflowError異常

  OutOfMemoryError異常  StackOverflowError異常 
程序計數器
Java虛擬機棧 若是虛擬機棧可擴展,擴展時沒法申請到足夠內存 線程請求的棧深度大於虛擬機所容許的深度
本地方法棧 與Java虛擬機棧相同 與Java虛擬機棧相同
Java堆 堆中沒有內存完成實例分配,而且堆沒法再進行擴展
方法區 方法區沒法知足內存分配需求(常量池沒法申請到內存)
*直接內存 內存區域總和大於物理內存總和

 

直接內存(Direct Memory)並非虛擬機運行時數據區的一部分,也不是Java虛擬機規範中定義的內存區域,可是這部份內存也被頻繁地使用,並且也可能致使OutOfMemoryError異常出現,因此咱們放到這裏一塊兒講解。服務器

      在JDK 1.4中新加入了NIO(New Input/Output)類,引入了一種基於通道(Channel)與緩衝區(Buffer)的I/O方式,它可使用Native函數庫直接分配堆外內存,而後經過一個存儲在Java堆裏面的DirectByteBuffer對象做爲這塊內存的引用進行操做。這樣能在一些場景中顯著提升性能,由於避免了在Java堆和Native堆中來回複製數據。函數

      顯然,本機直接內存的分配不會受到Java堆大小的限制,可是,既然是內存,則確定仍是會受到本機總內存(包括RAM及SWAP區或者分頁文件)的大小及處理器尋址空間的限制。服務器管理員配置虛擬機參數時,通常會根據實際內存設置-Xmx等參數信息,但常常會忽略掉直接內存,使得各個內存區域的總和大於物理內存限制(包括物理上的和操做系統級的限制),從而致使動態擴展時出現OutOfMemoryError異常。性能

相關文章
相關標籤/搜索