java堆內存 數據結構_JAVA內存區域

首先解釋下內存溢出和內存泄露之間的區別,為后面的學習做些鋪墊:

1、內存溢出和內存泄露的區別和聯系

內存溢出 out of memory:是指程序申請內存時,沒有足夠的內存供申請者使用,或者說,給了你一塊存儲int類型數據的存儲空間,但是你卻存儲long類型的數據,那么結果就是內存不夠用,此時就會報錯OOM,即所謂的內存溢出

內存泄露 memory leak:是指程序在申請內存后,無法釋放已申請的內存空間,一次內存泄漏似乎不會有大的影響,但內存泄漏堆積后的后果就是內存溢出。

memory leak會最終會導致out of memory!

2、JVM中的堆棧和數據結構中堆棧的區別

在數據結構中,堆是完全二叉樹,堆中個元素是有序的。而棧是一種特殊的線性表,具有先進后出,只允許在一端(棧頂)插入、刪除的特點。

在jvm虛擬機中的堆棧對應內存的不同區域,籠統的說堆是用于存放對象的內存塊,棧是用于執行程序的內存塊。

下面切入正題

運行時數據區域

Java虛擬機在執行java程序的過程中會把它所管理的內存劃分為若干個不同的數據區域,這些區域有各自的用途,以及創建和銷毀的時間。有的區域隨著虛擬機進程的啟動而存在,有些區域則依賴用戶線程的啟動和結束而建立和銷毀。java虛擬機所管理的內存將會包含以下幾個運行時數據區域

1、線程獨有的內存區域有如下幾塊:

(1)、程序計數器:是一塊較小的內存空間,它可以看作是當前線程所執行字節碼的行號指示器。在虛擬機的概念模型里,字節碼解釋器工作時就是通過改變這個計數器的值來取下一條需要執行的字節碼的指令。由于Java虛擬機的多線程是通過線程輪流切換并分配處理器執行時間的方式實現的,在任何一個確定的時刻,一個處理器(對于多核處理器來說就是一個核)都只會執行一條線程中的指令。因此,為了線程切換后能恢復到正確的執行位置,每條線程都需要有一個獨立的程序計數器,各條線程計數器互不影響,獨立存儲,我們稱這類內存為區域為“線程私有”的內存。

此內存區域是唯一一個在java虛擬機規范中沒有規定任何OutOfMemoryError情況的區域。 (2)、java虛擬機棧:它的生命周期與線程相同。虛擬機棧描述的是java方法執行的內存模型,每個方法在執行的同時都會創建一個棧幀用于存儲局部變量表、操作數棧、動態鏈接、方法出口等信息。每一個方法從調用直至執行完成的過程,就對應著棧幀在虛擬機中入棧到出棧的過程。

(3)、本地方法棧:與虛擬機棧發揮的作用是非常相似的,他們之間的區別不過是虛擬機棧為虛擬機執行java方法(也就是字節碼)服務,而本地方法棧則為虛擬機使用到的Native方法服務。

2、線程間共享的內存區域有如下幾塊:

(1)、java堆:對于大多數java應用來說,java堆是java虛擬機所管理的內存中最大的一塊。Java堆是被所有線程共享的一塊內存區域,在虛擬機啟動時創建。此內存區域的唯一目的就是存放對象實例,幾乎所有的對象實例都是在這里分配的。Java堆是垃圾收集器管理的主要區域,因此很多時候也被稱為“GC堆”(Garbage Collected Heap)。

(2)、方法區:用于存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼數據。雖然java虛擬機規范把方法區描述為堆的一個邏輯部分,但它卻有一個別名叫做Non-Heap(非堆),目的是與java堆區分開來。

(3)、運行時常量池:是方法區的一部分。Class文件中除了有類的版本、字段、方法、接口、等描述信息外,還有一項信息是常量池,用于存放編譯期生成的各種字面量和符號引用,這部分內容將在類加載后進入方法區的運行時常量池存放。既然運行時常量池是方法區的一部分,再染收到方法區內存的限制,當常量池無法再申請到內存時會拋出OutOfMemoryError異常。

3、直接內存

直接內存并不是虛擬機運行時數據區的一部分,也不是Java虛擬機規范中定義的內存區域。但是這部分內存也被頻繁地使用,而且也可能導致內存溢出問題。JDK1.4中新增加了NIO(參考https://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html),引入了一種基于通道(channel)與緩沖區(buffer)的I/O方式,它可以使用Native函數庫直接分配堆外內存,然后通過一個存儲在Java堆中的DirectByteBuffer對象作為這塊內存的引用進行操作。這樣能在一些場景中顯著提高性能,因為避免了在Java堆和Native堆中來回復制數據。顯然,本機直接內存的分配不會受到Java堆大小的限制,但是,既然是內存,肯定還是會受到本機總內存(包括RAM、SWAP區)大小以及處理器尋址空間的限制。

分類: JAVA虛擬機

標簽: JVM, JAVA, JAVA虛擬機, OOM

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533040.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533040.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533040.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java jsp的指令_[javaEE] jsp的指令

jsp的指令:jsp的指令(directive)是為jsp引擎而設計的,他們并不直接產生任何可見輸出,而是告訴引擎如何處理jsp頁面中的其他部分頁面頭部的page指令pageEncoding"utf-8"%>配置錯誤頁面:web.xml500/500.jsp404/404.jsp…

JAVA不能滿屏_java – 全屏幕視頻,不拉伸視頻

像這樣,你可以自己設置視頻的屬性。使用SurfaceView(給你更多的視圖控制),將其設置為fill_parent以匹配整個屏幕android:orientation"vertical"android:layout_width"match_parent"android:layout_height"fill_parent">…

java異常標記_java.lang.RuntimeException:錯誤:0D0680A8:asn1編碼例程:ASN1_CHECK_TLEN:錯誤的標記...

我收到此錯誤(在標題中).我不確定為什么,請幫忙.代碼如下:public static String decryptRSA(Context mContext, byte[] message) throws Exception {InputStream in mContext.getResources().openRawResource(R.raw.publicrsakey);X509EncodedKeySpec x509EncodedK…

正版我的世界怎么下載java_mcjava正版下載-mc我的世界java安卓正式版極速下載v1.0.1 - 趣趣手游網...

mc我的世界java安卓正式版帶你體驗最為精彩的多人聯機對戰玩法,游戲專為java系列打造,在游戲的部分特性上有著各種的提升,以及各種專屬的表達,比基巖版能多一些不同的玩法,在這里有著各種不同的玩法以及模式等待你的加…

java原子整數_多線程(四、原子類-AtomicInteger)

案例10個線程并發累加一個整數,每個線程累加1000,保證線程安全Unsafe類,來源于sun.misc包。該類封裝了許多類似指針操作,可以直接進行內存管理、操縱對象、阻塞/喚醒線程等操作。package com.jane;import java.util.ArrayList;imp…

java 新建菜單選項_請完成下列Java程序:創建一個下拉式菜單,菜單項包括3個CheckboxM..._考試資料網...

請完成下列Java程序:創建一個下拉式菜單,菜單項包括3個CheckboxMenultem(復選框),一條分割線和一個Exit項。要求打開或關閉復選框時,確定是哪個被切換,是開還是關,并輸出它的狀態;選擇Exit項能夠…

adurnio 單片機_單片機20~200A大電流檢測電路設計 用AD實現 帶原理圖,源代碼,proteus仿真文件...

//------------------------------51單片機頭文件#include//各數字的數碼管段碼(共陰)unsigned char code DSY_CODE[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //數碼管顯示數組{0,1,2,3,4,5,6,7,8,9}sbit CLKP3^3; //時鐘信號sbit STP3^6; //啟動信號,由…

java 極客_Java極客思維

?開篇介紹大家好,公眾號【Java極客思維】近期會整理一些Java高頻面試題分享給小伙伴,也希望看到的小伙伴在找工作過程中能夠用得到!本章節主要針對Java一些消息中間件高頻面試題進行分享。通知:公眾號【Java極客思維】正在送書福…

java拼三級魔方_魔方秘籍(詳細解法)《三階》

魔方根據視頻理解:上 下 左 右先將白面變好:(1).變一個白十字(如圖所示)(2).轉好以后檢查十字的四個角的顏色(藍綠紅橙)與旁邊面上的中心塊的顏色是否相同。(有兩個相同的時,如果它們相鄰,就一個放在后面,一個放在左面…

php怎么實現點卡充值,利用自動發卡程序的點卡充值傳奇腳本

首先:自動售卡 玩家購買到卡密 在游戲輸入卡密領取元寶下面是NPC腳本:[main]!這里是點卡充值平臺!\\\ \ \\[InPutString18]#IFCHECKCODELIST ..\QuestDiary\卡號列表\5.txt#actCLEARCODELIST ..\QuestDiary\卡號列表\5.txtGAMEGOL…

php轉換ofd文件格式,一種OFD格式文檔支持腳本的方法與流程

本發明涉及電子文檔格式的處理技術,特別涉及一種OFD格式文檔支持腳本的方法。背景技術:OFD是一種版式文檔格式,全稱為開放式版式文檔(Open Fixed-layout Document),是國家版式文檔格式規范。版式文檔是電子文件應用的一個重要門類…

php成品代碼,PHP代碼

日期當日date(Y-m-d")date(Y-m-d 00:00:00)取日期:年 月 日date("Y", strtotime($startday))date("m", strtotime($startday))date("d", strtotime($startday))上月 下月$last_mont_first_date date(Y-m-01 00:00:00,strtotime…

tp框架中引入php文件,Laravel框架及ThinkPHP框架超級簡單的公共文件引入(保留變量)...

為什么要把兩個框架放在一起來說呢?額。。。因為TP5.1.x與Laravel實在是太像了,本文主要講述關于大家頂部及底部文件引入的問題。但是如果頂部和尾部只是單純的html代碼還好說,但是里面通常有變量賦值和循環遍歷以及判斷等邏輯,這樣就帶來了比…

pHp30充電寶能用快充嗎,65W快充 30分鐘充滿電 是時候淘汰充電寶了嗎?

在過去的一年里,手機快充技術有了新的突破,OPPO推出了65W快充。無獨有偶,聯想拯救者電競手機的預熱宣傳中,號稱搭載90W快充。有評測稱,使用65W快充,30分鐘可以充滿一塊4000mAh容量的電池,使用90…

php+mockjs,mockjs的常用方法分享

本文主要和大家分享mockjs的常用方法,結合文字和代碼和大家講解,希望能幫助到大家。一.mock.mock()根據數據模板生成模擬數據。更關鍵的是,我們發起Ajax請求的時候要能夠接收到這些數據。這就是Mock.mock()的作用啦!Mock.mock( ru…

php 截取音頻文件后綴名,使用PHP從音頻流中提取音軌信息

這是一個PHP功能,讓您從流媒體URL中提取MP3元數據(StreamTitle)。通常,流服務器icy-metaint在響應中放置一個標題,告訴我們在流中發送元數據的頻率。該函數檢查該響應頭,如果存在,它將用它替換interval參數。否則&…

matlab畫圓柱,Matlab 畫三維圓柱體

主要學習了畫空間圓柱體和空間長方形的繪制方法。有兩個surface property:FaceColor和EdgeColor’;先講FaceColor’,它指定了surface畫出曲面的顏色,可以是[r,g,b]的一個向量,分別表示了紅綠藍的顏色配比;也可以是inte…

matlab類間散度矩陣,協方差矩陣和散布矩陣(散度矩陣)的意義

在機器學習模式識別相關算法中,經常需要求樣本的協方差矩陣C和散布矩陣S。如在PCA主成分分析中,就需要計算樣本的散度矩陣,而有的教材資料是計算協方差矩陣。實質上協方差矩陣和散度矩陣的意義就是一樣的,散布矩陣(散度矩陣)前乘以…

把樹分成森林 matlab,20170106RF_Matlab 隨機森林指的是利用多棵樹對樣本進行訓練并預測的一種分類器,包括兩個方面:數據的隨 269萬源代碼下載- www.pudn.com...

文件名稱: 20170106RF_Matlab下載 收藏√ [5 4 3 2 1 ]開發工具: matlab文件大小: 441 KB上傳時間: 2017-01-06下載次數: 0提 供 者: yanxiu詳細說明:隨機森林指的是利用多棵樹對樣本進行訓練并預測的一種分類器,包括兩個方面:數據的隨…

inur new.php id,Cmsez(隨易)全站系統 0day

程序名稱:Cmsez Web Content Manage System v2.0.0文件:comments.php viewimg.php代碼:---------------//commentsinclude "mainfile.php";$artnew article();//設定$confirmyes;//yes:需要管理員認證后才能顯示,no:直接顯示$membe…