1. 程式人生 > >Java虛擬機器記憶體溢位原因分析以及解決方案

Java虛擬機器記憶體溢位原因分析以及解決方案

在Java虛擬機器規範的描述之中,除了程式計數器外,虛擬機器記憶體的其他幾個執行時區域都有可能發生記憶體溢位OutOfMemoryError(OOM)異常的可能。

最常見的記憶體溢位情況就是Java堆的記憶體溢位。明顯異常提示資訊為:Java heap Space.為了方便事後分析記憶體溢位的原因進而找出好的解決方案,可以通過引數 -XX:+HeapDumpOnOutOfMemoryError 可以讓虛擬機器在出現溢位時Dump出當前的記憶體堆轉儲快照以便事後進行分析。如果時採用的eclispse開發工具,自帶一個記憶體影像分析工具對dump 出來的堆轉儲快照進行分析,重點時分析到底時出現了記憶體洩漏(Memory Leak)還是 記憶體溢位(Memeory OverFlow).

如果出現的記憶體洩露問題,進一步通過工具檢視洩露物件到GC Roots 的引用連。找到洩露物件時通過怎麼樣的路徑與GC Roots 相關聯並導致垃圾收集器無法自動回收他們的,掌握了洩露物件的型別資訊以及GCRoots 引用連的資訊,就可以比較準確的定位出洩露程式碼的位置。

如果不存在洩露,換句話說就是 記憶體中的物件確實都必須存活著,那就檢查虛擬機器的堆引數,與機器實體記憶體對比看是否好可以調大,從程式碼上檢查是否存在某些物件生命週期過長,持有狀態時間過長的情況,嘗試減少程式執行期間的記憶體消耗。

相關推薦

Java虛擬機器記憶體溢位原因分析以及解決方案

在Java虛擬機器規範的描述之中,除了程式計數器外,虛擬機器記憶體的其他幾個執行時區域都有可能發生記憶體溢位OutOfMemoryError(OOM)異常的可能。 最常見的記憶體溢位情況就是Java堆的記憶體溢位。明顯異常提示資訊為:Java heap Space.為了方便

java虛擬機器(第二版) 第二章總結 (三)-手工復現java虛擬機器記憶體溢位(OutOfMemoryError異常)

  文章概述 的java虛擬機器記憶體溢位的簡要概述,復現堆記憶體,棧記憶體,方法區的執行時常量池記憶體等區域的溢位情況,以及上述區域發生記憶體溢位的判斷方式和解決思路。   1,概述:      IDE為eclipse,需要在執

Java 虛擬機器記憶體溢位問題和解決方法

一什麼是記憶體溢位 1記憶體溢位是指應用系統中存在無法回收的記憶體或使用的記憶體過多,最終使得程式執行要用到的記憶體大於虛擬機器能提供的最大記憶體。 2 Java的記憶體管理就是物件的分配和釋放問題。 在Java中,記憶體的分配是由程式完成的,而記憶體的釋

java虛擬機器記憶體區域的劃分以及作用詳解

        為什麼有時候學著學著會突然之間覺得一切度是那麼無趣,男的每個月也有那麼幾天難道?哈哈,不然是什麼,我還是要堅持,可以做少一點,但是不能什麼度不做。總會過去的,加油                                              

Oracle生產中跑批存儲過程或函數失效原因分析以及解決方案

nap rbm apt state tbb cap vsx oracl fig p,li { white-space: pre-wrap } Oracle生產中跑批存儲過程或函數失效原因分析以及解決方案: 報錯信息: 原因分析: 1.當我們編譯存儲過程或函數時,該過程

Java程式碼執行記憶體溢位詳解及解決方案

記憶體溢位與資料庫鎖表的問題,可以說是開發人員的噩夢,一般的程式異常,總是可以知道在什麼時候或是在什麼操作步驟上出現了異常,而且根據堆疊資訊也很容易定位到程式中是某處出現了問題。記憶體溢位與鎖表則不然,一般現象是操作一般時間後系統越來越慢,直到宕機,但並不能明確是在什麼操作上出現的,發生的時間

【JVM學習筆記】(一)jvm初體驗-記憶體溢位問題分析解決方案

####1、開始 建立Main類和Demo類,在Main類的main方法中建立List,並向List中無限建立Demo物件,造成記憶體溢位, 並輸出記憶體溢位錯誤檔案在專案目錄下,為了使等待時間減小,設定執行堆記憶體大小。 ####2、建立Demo類 package com.ch

系統技術非業餘研究 » Erlang節點互聯失敗原因分析以及解決方案

今天和項仲在部署新系統的時候發現節點間ping不成功的情況,類似 1> net_adm:ping(‘[email protected]’). pang 由於這個問題比較普遍,我就記錄下一步步的排除步驟. 首先從原理上分析下!由於erlang節點間通訊是透過tcp來進行的,所以我們

java 虛擬機器記憶體劃分,類載入過程以及物件的初始化

涉及關鍵詞: 虛擬機器執行時記憶體 java記憶體劃分 類載入順序  類載入時機  類載入步驟  物件初始化順序  構造程式碼塊順序 構造方法 順序 記憶體區域   java記憶體圖  堆 方法區 虛擬機器棧 本地方法棧 程式計數器  區域性變量表   棧幀  java堆 執行時常量池   直接記憶體

Java虛擬機器記憶體劃分分析

根據《Java虛擬機器規範(Java SE7版)》的規定,Java虛擬機器所管理的記憶體將會包括以下幾個執行時資料區域,如圖所示一、程式計數器        程式計數器是一塊較小的記憶體空間,他的作用可以看做是當前執行緒所執行的位元組碼的行號指示器。在虛擬機器的概念模型裡(僅

《深入理解Java虛擬機器》個人讀書總結——JAVA虛擬機器記憶體

《深入理解Java虛擬機器》個人讀書總結——JAVA虛擬機器記憶體 最近在讀《深入理解Java虛擬機器》,網上對Java虛擬機器的總結有很多,自己覺得自己也應該記錄一點個人的讀書總結,以便日後複習方便。 隨著開發工作的逐漸深入,對Java的理解不能止步於crud,Java不像C語言

jvm學習筆記(1)——java虛擬機器記憶體區域

一、java記憶體區域:      1、程式計數器(執行緒私有):     記憶體中較小的記憶體空間,可以當做當前執行緒所執行位元組碼的行號指示器。如分支、迴圈、跳轉、異常處理、執行緒恢復都需要依賴這個計數器完成。 2、java虛擬機

Java虛擬機器 記憶體管理與垃圾回收

java和C++之間有一堵由記憶體自動分配與垃圾回收所圍成的高牆,外面的人想進來,裡面的人想出去 主要內容 記憶體分佈 垃圾回收機制 垃圾收集器 Java記憶體分佈 當java虛擬機器執行程式時,會把由虛擬機器管理的記憶體劃分為不同的區域,他們的作用不同,建立和銷燬時間也不同,有的是虛擬

Java虛擬機器記憶體模型與執行緒

Java虛擬機器—記憶體模型與執行緒 Lyon Keep balance,Be a better man! ​關注他 3 人讚了該文章 前言: 本文主要介紹Java的記憶體模型和Java執行緒。 Java記憶體模型的主要目標是定義程式中各個變數的訪問規則,即在JVM

JVM系列第6講:Java 虛擬機器記憶體結構

看到這裡,我相信大家對於一個 Java 原始檔是如何變成位元組碼檔案,以及位元組碼檔案的含義已經非常清楚了。那麼接下來就是讓 Java 虛擬機器執行位元組碼檔案,從而得出我們最終想要的結果了。在這個過程中,Java 虛擬機器會載入位元組碼檔案,將其存入 Java 虛擬機器的記憶體空間中,之後進行一系列的初始化

JVM調優--------理解java虛擬機器記憶體模型

java虛擬機器記憶體模型是java程式執行的基礎,為了能使Java應用程式正常執行,JVM虛擬機器將記憶體資料分為程式計數器,虛擬機器棧,本地方法棧,Java堆和方法區 程式計數器用於存放下一條執行的指令;虛擬機器棧和本地方法棧用於存放函式呼叫堆疊資訊;java堆用於存放Java程式執行時所需

Confluence 提高Java虛擬機器記憶體

Confluence 提高Java虛擬機器記憶體 版本 系統:CentOS release 6.8 (Final)Java版本:1.8.0_162Confluence版本:6.8.5 問題描述 confluence記憶體使用率的配置都是預設的,相對會比較低,可以根據實際server的配置情況,升級記憶

JVM篇:淺談java虛擬機器記憶體模型

  博主最近嘗試著瞭解JVM,博主目前的一些理解,總之會隨著博主的深入瞭解慢慢完善吧 圖片來自網路 當JVM執行時,便會建立這五個區域,退出時銷燬。 JVM的五個區域:方法區、堆、棧(也可以稱為虛擬機器棧)、程式計數器、本地方法棧 博主在這裡說明一下:方法區概括了元空間

Java虛擬機器-記憶體管理

參考深入理解Java虛擬機器 執行時記憶體包括: 方法區(Method Area) 虛擬機器棧(VM Stack) 本地方法棧(Native Method Stack) 堆(Heap) 程式計數器(Program counter Register) 程式計數器

JAVA虛擬機器記憶體劃分學習

JAVA虛擬機器所管理的記憶體將分為以下幾個區:  1.程式計數器:主要包括程式的分支、迴圈、跳轉、異常處理等基礎功能;  2.棧:主要用於儲存區域性變數、方法出口、物件引用等資訊; 是執行緒私有的,生命週期與執行緒相同;  3.堆:主要儲存物件的例項;是執