深入理解Java堆外記憶體
關於堆記憶體(Heap),相信作為 Java 開發者的你已經早有耳聞,但是,你瞭解堆外記憶體(Off Heap)嗎?
堆記憶體完全由 JVM 負責分配和釋放,如果程式存在缺陷,有可能導致記憶體洩漏而溢位,丟擲 OOM 異常: java.lang.OutOfMemoryError。
除了堆記憶體,Java 還可以使用堆外記憶體,也稱直接記憶體(Direct Memory)。顧名思義,堆外記憶體是在 JVM Heap 之外分配的記憶體塊,並不是 JVM 規範中定義的記憶體區域。
堆外記憶體可直接分配和釋放,減少 GC 暫停時間,提高效率;可擴充套件,支援程序間共享,節省堆記憶體到堆外記憶體的拷貝等特點。如果程式存在缺陷,同樣有可能導致堆外記憶體洩漏而溢位:OutOfDirectMemoryError。
作為 Java 開發者,堆外記憶體不應該成為你的盲點,本場 Chat 值得一看。
本場 Chat 您將學到以下內容:
- 什麼是堆外記憶體?
- 堆外記憶體額度控制
- 堆外記憶體建立過程原理解讀
- JVM GC 機制回收堆外記憶體原理。
- 堆外記憶體主動回收原理。
相關推薦
深入理解Java堆外記憶體
關於堆記憶體(Heap),相信作為 Java 開發者的你已經早有耳聞,但是,你瞭解堆外記憶體(Off Heap)嗎? 堆記憶體完全由 JVM 負責分配和釋放,如果程式存在缺陷,有可能導致記憶體洩漏而溢位,丟擲 OOM 異常: java.lang.OutOfMemor
Java堆外記憶體使用
JVM內部會把所有記憶體分成Java使用的堆記憶體和Native使用的記憶體,它們之間是不能共享的,就是說當你的Native記憶體用完了時,如果Java堆又有空閒記憶體,這時Native會重新向Jvm申請,而不是直接使用Java堆記憶體。 使用堆外記憶體,就是為了能直接分配和釋放記憶體,提高
Java——堆外記憶體詳解
記憶體是好東西,我們常聽堆記憶體,很多人卻不知道還有一個堆外記憶體。 那這兩個都是個啥玩意呢?且讓本帥博主今天給你好好說道說道。 一、堆內記憶體 那什麼東西是堆記憶體呢?我們來看看官方的說法。 “Java 虛擬機器具有一個堆(Heap),堆是執行時資料區域,所
Java堆外記憶體溢位問題排查,top命令下java服務res值上升
前幾天寫了一套java服務用於對接視訊單位的sdk介面,但是專案環境測試的時候出現了問題: 在linux環境下使用top命令檢視java命令的mem比值一直在緩慢的增加,第二天出現了服務宕機的情況,生成hs_err的log
Java堆外記憶體排查小結
簡介JVM堆外記憶體難排查但經常會出現問題,這可能是目前最全的JVM堆外記憶體排查思路。通過本文,你應該瞭解:pmap 命令gdb 命令perf 命令記憶體 RSS、VSZ的區別java NMT起因這幾天遇到一個比較奇怪的問題,覺得有必要和大家分享一下。我們的一個服務,執行在
google-perftools 分析JAVA 堆外記憶體
原文轉自:http://koven2049.iteye.com/blog/1142768,所有權利歸原作者所有 最近線上執行的hbase發現分配了16g記憶體,但是實際使用了22g,堆外記憶體達到6g。感覺非常詭異。堆外記憶體用一般的工具很難檢視,可以通過google-pe
Netty之Java堆外記憶體掃盲貼
Java的堆外記憶體本來是高貴而神祕的東西,只在一些快取方案的收費企業版裡出現。但自從用了Netty,就變成了天天打交道的事情,畢竟堆外記憶體能減少IO時的記憶體複製,不需要堆記憶體Buffer拷貝一份到直接記憶體中,然後才寫入Socket中;而且也沒了煩人的GC。 好
Netty之Java堆外記憶體掃盲
Java的堆外記憶體本來是高貴而神祕的東西,只在一些快取方案的收費企業版裡出現。但自從用了Netty,就變成了天天打交道的事情,畢竟堆外記憶體能減少IO時的記憶體複製,不需要堆記憶體Buffer拷貝一份到直接記憶體中,然後才寫入Socket中;而且也沒了煩人的GC。 好
java堆外記憶體
簡介 誰在使用堆外記憶體:執行緒棧,應用程式程式碼,NIO快取 什麼東西需要池化,昂貴的物件:執行緒,資料庫連線池, socket。 好處: 理論上能減少GC時間, 提高效率 JDK5.0之後,程式碼中能直接操作本地記憶體的方式有2種:使用未公開的Uns
深入理解java虛擬機器-記憶體管理、異常處理
深入理解Java虛擬機器:JVM高階特性與最佳實踐 閱讀筆記(記憶體原理、異常處理): 1. Jvm執行時,記憶體劃分如圖所示: 2. 程式計數器: Jvm將這個計數看作當前執行緒執行某條位元組碼的行數,會根據計數器的值來選取需
java堆外記憶體洩漏
問題描述 最近有個系統在做壓力測試, 環境配置: 4核CPU 8g記憶體 jdk1.6.0_25,jvm配置-server -Xms2048m -Xmx2048m 出現問題如下 執行併發300人,壓測持續1個小時記憶體使用率從20%上升到100%,tps從11
深入理解Java虛擬機器--記憶體分配規則
新生代GC(Minor GC):指發生在新生代的垃圾回收動作,因此區域物件大多朝生夕死,所以Minor GC非常頻繁,一般回収速度也比較快 老年代GC(Major GC/Full GC):指發生在老年
超乾貨!Cassandra Java堆外記憶體排查經歷全記錄
背景 最近準備上線cassandra這個產品,同事在做一些小規格ECS(8G)的壓測。壓測時候比較容易觸發OOM Killer
深入理解Java之JVM堆記憶體分配
Java堆是被所有執行緒共享的一塊記憶體區域,所有物件和陣列都在堆上進行記憶體分配。為了進行高效的垃圾回收,虛擬機器把堆記憶體劃分成新生代、老年代和永久代(1.8中無永久代,使用metaspace實現)三塊區域。 Java把記憶體分成兩種:棧記憶體和堆記憶
深入理解Java的堆記憶體和執行緒記憶體
我們都知道Java物件都是在堆中建立的(開啟逃逸分析的情況除外),我們也知道比如一個執行緒中有一段這樣的程式碼:public class A{ public int xxx;} A a = new A();會在堆中建立一個物件,並引用a 指向了堆中物件的記憶體地址,也就是主
《深入理解Java虛擬機器》個人讀書總結——JAVA虛擬機器記憶體
《深入理解Java虛擬機器》個人讀書總結——JAVA虛擬機器記憶體 最近在讀《深入理解Java虛擬機器》,網上對Java虛擬機器的總結有很多,自己覺得自己也應該記錄一點個人的讀書總結,以便日後複習方便。 隨著開發工作的逐漸深入,對Java的理解不能止步於crud,Java不像C語言
深入理解Java虛擬機器總結一垃圾收集器與記憶體分配策略(二)
深入理解Java虛擬機器總結一垃圾收集器與記憶體分配策略(二) 垃圾回收概述 如何判定物件為垃圾物件 垃圾回收演算法 垃圾收集器詳解 記憶體分配策略 垃圾回收概述 如何判定物件為垃圾物件 引用計數法: 在物件
讀薄《深入理解 JAVA 虛擬機器》Java記憶體分配策略
記憶體分配規則不是固定的,取決於當前使用的是哪一種垃圾收集器以及虛擬機器配置。 物件優先在 Eden 上分配 大多數情況下,物件分配在 Eden 上,當記憶體不足的時候觸發一次 Minor GC。 大物件分配進老年代 需要連續記憶體空間的物件,最典型的是很長的字串已經陣列,寫程式的時候應該避免生命週期
讀薄《深入理解 JAVA 虛擬機器》Java記憶體區域
很早之前看了《深入理解 JAVA 虛擬機器》並寫下了讀書筆記。最近在結合一些其他資料整理部落格。希望能幫助到其他人抓住書的重點。 Java執行時資料區域 Java執行時資料區域 白色為執行緒獨佔的,灰色為執行緒共享的。 Java在執行的時候會把他所管理的記憶體劃分為若干區域,經常有人把記憶體區域分為
學習筆記1:深入理解Java虛擬機器——JVM高階特性與最佳實踐_OOM(記憶體溢位)_虛擬機器引數設定_MAT
eclipse中設定debug標籤頁的vm引數 1,Run->Debug configurations->Java Application 2,選中已經寫好的專案 3,Arguments->VM arguments 4,在VM arguments 裡面就可以對虛擬機器的