国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java虛擬機筆記-內存區與內存溢出

Ocean / 1756人閱讀

摘要:小結程序計數器和虛擬機棧是線程私有的,而堆和方法區是線程共享的除了虛擬機運行時內存,在中使用類可以直接操作本機內存。

Java的內存區域

Java虛擬機在執行Java程序中會把它所管理的內存劃分為若干個數據區域,這些區域有各自的用途,以及生命周期,有些依賴虛擬機進程啟動而存在,有些依賴用戶線程的啟動和結束而建立和銷毀

運行時內存

程序計數器(Program Counter Register)

程序計數器是一塊較小的內存空間,可以看作是當前線程所執行的字節碼的指示器,字節碼解釋器通過改變這個計數器的值來選取下一條需要執行的字節碼指令。
由于Java虛擬機的多線程是通過線程調度(輪詢)切換分配處理器執行時間的方式來實現的,在任何一個確定的時刻都只會執行一條線程中的指令。所以為了當線程切換后能找到之前執行指令的位置,每個線程都需要有一個獨立的程序計數器,各個線程之間的程序計數器互相不影響,這類內存區域為“線程私有”的內存區域。

Java虛擬機棧(Java Virtual Machine Stack)

Java虛擬機棧和程序計數器一樣,Java虛擬機棧(以下簡稱棧)也是“線程私有”的,它的生命周期和線程相同,每個方法在執行時都會創建一個棧幀(Stack Frame)用于存儲局部變量表(方法中定義的變量),操作數棧,動態鏈接,方法出口等信息。每個方法從調用直至執行完成的過程,就是對應著一個棧幀在棧中入棧和出棧的過程。

本地方法棧

本地方法棧和Java虛擬機棧一樣,本地方法棧用于執行Native方法

Java堆(Java Heap)

Java堆是被所有線程共享的一塊內存區域,在虛擬機啟動時被創建。此內存區域的唯一目的就是存放對象的實例,幾乎所有的對象實例都在這里分配內存,Java堆是垃圾收集器管理的主要區域,由于現在很多收集器都采用分代收集算法,所有Java堆還可以細分為:新生代和老年代。可以通過-Xmx和-Xms來控制堆內存的大小

方法區

方法區和Java堆一樣,也是各個線程共享的內存區域,它用于存儲已經被虛擬機加載的類信息,常量,靜態變量,即時編譯器編譯后的代碼等數據。一般也稱作為“永代區”(Permanent Generation),這里要特別說明一下,因為我們使用的主流虛擬機HotSpot的設計團隊用“永代區”來實現方法區,這樣HotSpot的垃圾收集器就可以像管理堆那樣管理這部分內存,在JDK1.7的HotSpot中,已經把字符串常量池移出“永代區”了。

直接內存(Direct Memory)

直接內存并不是虛擬機運行時數據區的一部分,但是如果你使用了NIO的類,就會導致OutOfMemoryError異常出現
NIO引入了一種基于通道(Channle)與緩沖區(Buffer)的I/O方法,它可以使用Native函數庫直接分配堆外的內存,然后通過一個存儲在Java堆中的DirectByteBuffer對象作為這塊內存的引用進行操作。這樣能避免在Java堆和Native堆中來回復制數據的開銷,本機直接內存的分配不會受到Java堆大小的限制,但是會受到物理內存的限制,所有也會拋出OutOfMemoryError異常。

小結

“程序計數器”和“Java虛擬機?!笔蔷€程私有的,而“Java堆”和“方法區”是線程共享的

除了虛擬機運行時內存,在Java中使用NIO類可以直接操作本機內存。

方法區在HotSpot中用于存放各種“常量信息”

Java堆中存放了程序中所有的對象實例

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64731.html

相關文章

  • 深入理解虛擬Java內存區域

    摘要:運行時數據區域虛擬機在執行程序的過程中會把它管理的內存劃分成若干個不同的數據區域。堆虛擬機所管理的內存中最大的一塊,堆是所有線程共享的一塊內存區域,在虛擬機啟動時創建。 《深入理解Java虛擬機:JVM高級特性與最佳實踐(第二版》讀書筆記 1 概述 對于Java程序員來說,在虛擬機自動內存管理機制下,不再需要像C/C++程序開發程序員這樣為內一個new 操作去寫對應的delete/...

    dance 評論0 收藏0
  • 深入理解虛擬Java內存區域

    摘要:深入理解虛擬機高級特性與最佳實踐第二版讀書筆記與常見面試題總結本節常見面試題介紹下內存區域運行時數據區。運行時數據區域虛擬機在執行程序的過程中會把它管理的內存劃分成若干個不同的數據區域。 《深入理解Java虛擬機:JVM高級特性與最佳實踐(第二版》讀書筆記與常見面試題總結 本節常見面試題: 介紹下Java內存區域(運行時數據區)。 對象的訪問定位的兩種方式。 1 概述 對于Java...

    lavnFan 評論0 收藏0
  • JVM詳解1.Java內存模型

    摘要:編譯參見深入理解虛擬機節走進之一自己編譯源碼內存模型運行時數據區域根據虛擬機規范的規定,的內存包括以下幾個運運行時數據區域程序計數器程序計數器是一塊較小的內存空間,他可以看作是當前線程所執行的字節碼的行號指示器。 點擊進入我的博客 1.1 基礎知識 1.1.1 一些基本概念 JDK(Java Development Kit):Java語言、Java虛擬機、Java API類庫JRE(...

    TANKING 評論0 收藏0
  • Java開發

    摘要:大多數待遇豐厚的開發職位都要求開發者精通多線程技術并且有豐富的程序開發調試優化經驗,所以線程相關的問題在面試中經常會被提到。將對象編碼為字節流稱之為序列化,反之將字節流重建成對象稱之為反序列化。 JVM 內存溢出實例 - 實戰 JVM(二) 介紹 JVM 內存溢出產生情況分析 Java - 注解詳解 詳細介紹 Java 注解的使用,有利于學習編譯時注解 Java 程序員快速上手 Kot...

    LuDongWei 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<