成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java虛擬機(jī)筆記-內(nèi)存區(qū)與內(nèi)存溢出

Ocean / 1766人閱讀

摘要:小結(jié)程序計(jì)數(shù)器和虛擬機(jī)棧是線程私有的,而堆和方法區(qū)是線程共享的除了虛擬機(jī)運(yùn)行時內(nèi)存,在中使用類可以直接操作本機(jī)內(nèi)存。

Java的內(nèi)存區(qū)域

Java虛擬機(jī)在執(zhí)行Java程序中會把它所管理的內(nèi)存劃分為若干個數(shù)據(jù)區(qū)域,這些區(qū)域有各自的用途,以及生命周期,有些依賴虛擬機(jī)進(jìn)程啟動而存在,有些依賴用戶線程的啟動和結(jié)束而建立和銷毀

運(yùn)行時內(nèi)存

程序計(jì)數(shù)器(Program Counter Register)

程序計(jì)數(shù)器是一塊較小的內(nèi)存空間,可以看作是當(dāng)前線程所執(zhí)行的字節(jié)碼的指示器,字節(jié)碼解釋器通過改變這個計(jì)數(shù)器的值來選取下一條需要執(zhí)行的字節(jié)碼指令。
由于Java虛擬機(jī)的多線程是通過線程調(diào)度(輪詢)切換分配處理器執(zhí)行時間的方式來實(shí)現(xiàn)的,在任何一個確定的時刻都只會執(zhí)行一條線程中的指令。所以為了當(dāng)線程切換后能找到之前執(zhí)行指令的位置,每個線程都需要有一個獨(dú)立的程序計(jì)數(shù)器,各個線程之間的程序計(jì)數(shù)器互相不影響,這類內(nèi)存區(qū)域?yàn)椤熬€程私有”的內(nèi)存區(qū)域。

Java虛擬機(jī)棧(Java Virtual Machine Stack)

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

本地方法棧

本地方法棧和Java虛擬機(jī)棧一樣,本地方法棧用于執(zhí)行Native方法

Java堆(Java Heap)

Java堆是被所有線程共享的一塊內(nèi)存區(qū)域,在虛擬機(jī)啟動時被創(chuàng)建。此內(nèi)存區(qū)域的唯一目的就是存放對象的實(shí)例,幾乎所有的對象實(shí)例都在這里分配內(nèi)存,Java堆是垃圾收集器管理的主要區(qū)域,由于現(xiàn)在很多收集器都采用分代收集算法,所有Java堆還可以細(xì)分為:新生代和老年代??梢酝ㄟ^-Xmx和-Xms來控制堆內(nèi)存的大小

方法區(qū)

方法區(qū)和Java堆一樣,也是各個線程共享的內(nèi)存區(qū)域,它用于存儲已經(jīng)被虛擬機(jī)加載的類信息,常量,靜態(tài)變量,即時編譯器編譯后的代碼等數(shù)據(jù)。一般也稱作為“永代區(qū)”(Permanent Generation),這里要特別說明一下,因?yàn)槲覀兪褂玫闹髁魈摂M機(jī)HotSpot的設(shè)計(jì)團(tuán)隊(duì)用“永代區(qū)”來實(shí)現(xiàn)方法區(qū),這樣HotSpot的垃圾收集器就可以像管理堆那樣管理這部分內(nèi)存,在JDK1.7的HotSpot中,已經(jīng)把字符串常量池移出“永代區(qū)”了。

直接內(nèi)存(Direct Memory)

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

小結(jié)

“程序計(jì)數(shù)器”和“Java虛擬機(jī)?!笔蔷€程私有的,而“Java堆”和“方法區(qū)”是線程共享的

除了虛擬機(jī)運(yùn)行時內(nèi)存,在Java中使用NIO類可以直接操作本機(jī)內(nèi)存。

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

Java堆中存放了程序中所有的對象實(shí)例

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64731.html

相關(guān)文章

  • 深入理解虛擬機(jī)Java內(nèi)存區(qū)域

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

    dance 評論0 收藏0
  • 深入理解虛擬機(jī)Java內(nèi)存區(qū)域

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

    lavnFan 評論0 收藏0
  • JVM詳解1.Java內(nèi)存模型

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

    TANKING 評論0 收藏0
  • Java開發(fā)

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

    LuDongWei 評論0 收藏0

發(fā)表評論

0條評論

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