成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入理解JVM之內(nèi)存區(qū)域與內(nèi)存溢出

開發(fā) 后端
與虛擬機(jī)棧相似,主要為虛擬機(jī)使用到的Native方法服務(wù),在HotSpot虛擬機(jī)中直接把本地方法棧與虛擬機(jī)棧二合一.

文章目錄

  1. 1. Java內(nèi)存區(qū)域與內(nèi)存溢出異常

    1. 1.1. 運(yùn)行時(shí)數(shù)據(jù)區(qū)域

      1. 1.1.1. 程序計(jì)數(shù)器

      2. 1.1.2. java虛擬機(jī)棧

      3. 1.1.3. 本地方法棧

      4. 1.1.4. Java堆(Java Heap)

      5. 1.1.5. 方法區(qū)

      6. 1.1.6. 運(yùn)行時(shí)常量池

      7. 1.1.7. 直接內(nèi)存

    2. 1.2. HotSpot虛擬機(jī)

      1. 1.2.1. 對象的創(chuàng)建

      2. 1.2.2. 對象的訪問定位

    3. 1.3. OOM異常的解決思路

    4. 1.4. 參考

深入理解jvm之內(nèi)存區(qū)域與內(nèi)存溢出

Java內(nèi)存區(qū)域與內(nèi)存溢出異常

運(yùn)行時(shí)數(shù)據(jù)區(qū)域

深入理解jvm之內(nèi)存區(qū)域與內(nèi)存溢出

程序計(jì)數(shù)器

  • 當(dāng)前線程所執(zhí)行的字節(jié)碼的行號指示器

  • 當(dāng)前線程私有

  • 不會出現(xiàn)OutOfMemoryError情況

java虛擬機(jī)棧

  • 線程私有,生命周期與線程相同

  • java方法執(zhí)行的內(nèi)存模型,每個(gè)方法執(zhí)行的同時(shí)都會創(chuàng)建一個(gè)棧幀,存儲局部變量表(基本類型、對象引用)、操作數(shù)棧、動態(tài)鏈接、方法出口等信息

  • StackOverflowError異常:當(dāng)線程請求的棧深度大于虛擬機(jī)所允許的深度

  • OutOfMemoryError異常:如果棧的擴(kuò)展時(shí)無法申請到足夠的內(nèi)存

本地方法棧

與虛擬機(jī)棧相似,主要為虛擬機(jī)使用到的Native方法服務(wù),在HotSpot虛擬機(jī)中直接把本地方法棧與虛擬機(jī)棧二合一

Java堆(Java Heap)

java堆是被所有線程共享的一塊內(nèi)存區(qū)域,在 虛擬機(jī)啟動時(shí)創(chuàng)建。此區(qū)域的***目的就是存儲對象實(shí)例。java堆是垃圾收集器管理的主要區(qū)域。java堆還可以細(xì)分為:新生代與老年代。在細(xì)一點(diǎn)有 Eden空間、Form Survivor空間、To Survivor空間等。

  • 可以通過-Xmx和-Xms控制堆的大小

  • OutOfMemoryError異常:當(dāng)在堆中沒有內(nèi)存完成實(shí)例分配,且堆也無法再擴(kuò)展時(shí)。

方法區(qū)

  • 線程間共享

  • 用于存儲已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)

  • OutOfMemoryError異常:當(dāng)方法區(qū)無法滿足內(nèi)存的分配需求時(shí)

運(yùn)行時(shí)常量池

  • 方法區(qū)的一部分

  • 用于存放編譯期生成的各種字面量與符號引用

  • OutOfMemoryError異常:當(dāng)常量池?zé)o法再申請到內(nèi)存時(shí)

直接內(nèi)存

  • NIO可以使用Native函數(shù)庫直接分配堆外內(nèi)存,堆中的DirectByteBuffer對象作為這塊內(nèi)存的引用進(jìn)行操作

  • 大小不受Java堆大小的限制,受本機(jī)(服務(wù)器)內(nèi)存限制

  • OutOfMemoryError異常:系統(tǒng)內(nèi)存不足時(shí)

HotSpot虛擬機(jī)

對象的創(chuàng)建

虛擬機(jī)遇到一條new指令時(shí),首先將去檢查這個(gè)對象的參數(shù)是否在常量池中定位到一個(gè)類的符號引用,并且檢查這個(gè)符號引用代表的類是否已被加載、解析和初始化過。如果沒有,必須先執(zhí)行類的加載過程。
在類加載檢查通過后,虛擬機(jī)將為新生對象分配內(nèi)存。對象所需內(nèi)存大小再類加載完成后便可確定。內(nèi)存分配可以采用“指針碰撞”與“空閑列表”的方式。

對象的訪問定位

java程序需要通過棧上的reference數(shù)據(jù)來操作堆上的具體對象。訪問方式有使用句柄和直接指針兩種。

  • 句柄訪問 java堆中將會劃分出一塊內(nèi)存來作為句柄池,reference中存儲的就是對象的句柄地址,而句柄中包含了對象實(shí)例數(shù)據(jù)與類型數(shù)據(jù)各自的具體地址信息

  • 直接指針訪問 java堆對象的布局中必須考慮如何放置訪問類型數(shù)據(jù)的相關(guān)信息,reference中存儲的就是對象地址

OOM異常的解決思路

生成Dump快照文件:

  • 通過jvm參數(shù)—XX:-HeapDumpOnOutOfMemoryError可以讓JVM在出現(xiàn)內(nèi)存溢出是Dump出當(dāng)前的內(nèi)存轉(zhuǎn)儲快照

  • 用jmap生產(chǎn)dump文件,win通過任務(wù)管理器查看tomcat的進(jìn)程pid,linux用ps命令查看進(jìn)程pid,然后用jmap命令

先通過內(nèi)存映像分析工具(如Eclipse的Memory Analyzer)進(jìn)行分析,常見的情況有:

  • 內(nèi)存泄露,對象已經(jīng)死了,無法通過垃圾收集器進(jìn)行自動回收,通過找出泄露的代碼位置和原因,才好確定解決方案;

  • 內(nèi)存溢出,內(nèi)存中的對象都還必須存活著,這說明Java堆分配空間不足,檢查堆設(shè)置大小(-Xmx與-Xms),檢查代碼是否存在對象生命周期太長、持有狀態(tài)時(shí)間過長的情況。

OOM異常示例:

package oom;

 

  1. import java.util.ArrayList; 
  2. import java.util.List; 
  3.  
  4. /** 
  5. * VM Args: -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError 
  6. * @ClassName: HeapOOM 
  7. * 
  8. */ 
  9. public class HeapOOM { 
  10.     static class OOMObject{ 
  11.  
  12.     } 
  13.  
  14.     public static void main(String[] args) { 
  15.         List<OOMObject> list = new ArrayList<OOMObject>(); 
  16.         while(true){ 
  17.             list.add(new OOMObject()); 
  18.         } 
  19.     } 
責(zé)任編輯:王雪燕 來源: wustrive's blog
相關(guān)推薦

2021-11-26 00:00:48

JVM內(nèi)存區(qū)域

2023-11-05 12:05:35

JVM內(nèi)存

2020-05-27 21:13:27

JavaJVM內(nèi)存

2020-08-10 17:49:25

JVM內(nèi)存溢出

2023-10-27 07:47:58

Java語言順序性

2010-09-25 12:54:24

JVM內(nèi)存

2021-09-08 17:42:45

JVM內(nèi)存模型

2020-11-04 15:35:13

Golang內(nèi)存程序員

2013-06-20 10:25:56

2023-09-19 22:47:39

Java內(nèi)存

2022-07-06 08:05:52

Java對象JVM

2023-12-31 12:56:02

C++內(nèi)存編程

2021-05-19 07:56:26

Linux內(nèi)核搶占

2012-05-15 02:04:22

JVMJava

2025-06-16 07:40:00

2022-08-21 16:52:27

Linux虛擬內(nèi)存

2015-03-24 13:28:52

Java Java Strin內(nèi)存模型

2022-06-22 08:02:11

CPU操作系統(tǒng)Java

2024-03-11 08:22:40

Java內(nèi)存泄漏

2018-11-01 10:34:37

JVM內(nèi)存配置
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 中文字幕国产精品 | 欧美国产亚洲一区二区 | 天天看天天摸天天操 | 国产精品区二区三区日本 | 亚洲国产精品久久人人爱 | 91久久精 | 日韩精品一区二区三区在线播放 | 四虎影视1304t| 成人在线日韩 | 99视频在线免费观看 | 国产女人叫床高潮大片免费 | 成人亚洲性情网站www在线观看 | 夜夜艹 | 天天操夜夜艹 | 国产精品久久久久久吹潮 | 欧美成人一级视频 | 日韩成人在线观看 | 一区二区三区欧美在线观看 | 日韩欧美一区二区三区四区 | 天堂一区二区三区 | 国产日韩欧美在线观看 | 精品视频在线观看 | 国产精品一区二区免费看 | 国产精品久久久久久影院8一贰佰 | 国产精品久久久久久久久久久久久久 | 日韩成人在线播放 | 亚洲精品 在线播放 | 日韩欧美在线视频一区 | 一区二区三区亚洲 | 91视频久久| 一级片网址 | 国产一区二区在线看 | 91资源在线观看 | 中文字幕久久精品 | 五月婷婷亚洲 | 欧美老少妇一级特黄一片 | 中文字幕免费在线 | 国产亚洲成av人在线观看导航 | 99riav国产一区二区三区 | 亚洲免费在线观看 | 成人免费视频网址 |