# HBase堆外内存科普
## 引言
HBase是一个基于Hadoop的分布式数据库,它提供了高可靠性、高性能、支持大规模数据存储和处理的能力。在HBase中,数据是以行列的形式存储,并且可以进行快速的插入、更新和查询操作。为了提高性能,HBase可以将部分数据存储在堆外内存中,这样可以避免Java堆内存的垃圾回收开销,提高系统的吞吐量和响应速度。
在本文中,我们将介绍HBase堆外内存的            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-10-11 07:45:51
                            
                                77阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Hbase1.2:Hbase数据模型、HBase逻辑结构、HBase基础数据模型、HBase基础数据模型拆分、HBase物理存储结构、HBase数据模型相关名词概念HBase数据模型HBase逻辑结构HBase基础数据模型HBase基础数据模型拆分:1.横向拆分HBase基础数据模型拆分:2.纵向拆分HBase物理存储结构HBase数据模型相关名词概念Name SpaceTableRowColu            
                
         
            
            
            
            由于最近项目中需要使用Hbase表,并且对其进行查询操作,因而我们先来了解下Hbase表的存储结构和原理。首先熟悉下hbase表的设计:1 、hbase表设计:hbase使用三维有序存储,三维是指:rowkey(行主键),column key(columnFamily+qualifier),timestamp(时间戳)。我们知道rowkey是行的主键,而且hbase只能指定rowkey,或者一个r            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-08-07 12:30:27
                            
                                52阅读
                            
                                                                             
                 
                
                             
         
            
            
            
                   
        		
		一.溢出现象单台服务器刚发布时 java 进程占用3g,以一天5%左右的速度增长,一定时间过后进程占用接近90%,触发服务器报警,而此时 Old 区占用在 50%,未触发 CMS GC,而导致堆外内存溢出。异常堆栈:top 命令查看进程占用:机器为 8核16G,JVM配置如下:-Xms8g -Xmx8g -Xmn3g -Xss512k -XX:Metas            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-03-30 12:28:51
                            
                                1834阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            下文所说的 hbase client 版本,如无特指,则皆为 1.2.3。之前项目中出现堆外内存溢出(排查过程),虽然已经解决了问题,但当时没有深究底层的原理,最近抽空从底层入手,深入研究了 hbase client 读写源码,配合 jmeter 压测特定接口,并使用 mat 等工具分析,最终定位到了 hbase 堆外内存溢出的根本原因,本次就梳理下完整的过程,以及涉及的一些原理,防止以后踩坑。            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-25 11:54:19
                            
                                60阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
                   Java工程中内存管理总是一个绕不过去的知识模块,无论HBase、Flink还是Spark等,如果使用的JVM堆比较大同时对读写延迟等性能有较高要求,一般都会选择自己管理内存,而且一般都会选择使用部分堆外内存。HBase系统中有两块大的内存管理模块,一块是MemStore ,一块是BlockCache,这两块内存的管理在HBase的版本迭代过程            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-13 19:50:30
                            
                                52阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            文章目录概要1. 前言2. 堆内和堆外内存2.1 堆内内存(On-heap Memory)2.1.1 堆内内存的申请与释放2.1.2 堆内内存优缺点分析2.1.3 堆内内存分区(静态方式,弃)2.1.4 堆内内存分区(统一方式,现)2.2 堆外内存(Off-heap Memory)2.2.1 堆外内存的启用2.2.2 堆外内存的优缺点2.2.3 堆外内存分区(静态方式,弃)2.2.4 堆外内存分            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-11-17 23:29:25
                            
                                110阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            # Java堆、非堆和堆外
Java是一种面向对象的编程语言,其内存管理由Java虚拟机(JVM)负责。在Java中,内存分为不同的区域,其中包括Java堆、非堆和堆外。本文将介绍这些内存区域的概念和特点,并通过代码示例加以说明。
## Java堆
Java堆是Java虚拟机管理的内存区域之一,用于存储对象实例。所有通过`new`关键字创建的对象都会分配在堆中。Java堆的大小可以通过虚拟机            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-11-15 10:09:39
                            
                                59阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、 问题定位篇1.具体步骤定位内存泄漏类型II. 定位发生泄漏的具体方法III. 定位使用泄漏方法的具体堆栈2.实操过程压测,发现后台程序占用内存超过80%,8G内存占用超过6G,如图4.4所示。遂怀疑内存存在泄漏。 图4.4 压测一段时间后内存占用图示         然后使用MAT对进程dump堆栈进行            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-05-25 13:44:41
                            
                                133阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            最近工作中碰到了内存泄漏的问题emmm, 这曲线还真挺恐怖的。分析&解决过程:一、 为啥没有fullGCps -ef 看了下虚拟机参数,发现堆空间就开了8g,这曲线都涨到14g了,问了下同事,曲线显示的是进程内存(堆内内存+堆外内存),所以下面就分别看下堆内内存和堆外内存的情况了。二、 堆内内存的情况1. 先理解下内存模型内存模型
// https://mp.weixin.qq.com/s            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-29 11:33:51
                            
                                159阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            调节executor堆外内存 
 spark底层shuffle的传输方式是使用netty传输,netty在进行网络传输的过程会申请堆外内存,所以使用了堆外内存! 
 什么时候需要调节Executor的堆外内存大小? 
 当出现一下异常时: 
 shuffle file cannot find,executor lost、task lost,out of m            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-05 20:02:00
                            
                                78阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            去年我面试了一些程序员,等级从低到高都有。但是没有一个人能够说明白什么是堆外内存! 今天我们就一起来简单的说一说 Java 中的堆外内存。这一块可能 90% 的 Java 程序员都不清楚,希望你看过本文后,成为那 10% 中的大神级别的潜力股。 堆外内存是相对于堆内内存的一个概念。堆内内存是由 JVM 所管控的 Java 进程内存,我们平时在 Java 中创建的对象都处于堆内内存中,并且它们遵循            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-30 15:16:37
                            
                                115阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            Java的内存管理一直是一个很火的话题,今天聊一聊平常比较少关注的堆外内存,也叫直接内存,不懂不影响生活,懂了就很高级,有木有!!!看下图:1、堆外内存是个啥?堆外内存也叫直接内存,因为这部分内存就是机器的物理内存,够直接吧。直接内存并不是虚拟机运行时数据区的一部分,也不是Java 虚拟机规范中定义的内存区域。使用native 函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectB            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-16 20:45:02
                            
                                237阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            目录1.什么是堆外内存?2.堆外内存有什么优势?3.堆外内存的使用3.1堆外内存的设置3.2堆外内存的创建3.3堆外内存的回收3.3.1自动回收3.3.2手动回收1.什么是堆外内存?堆外内存和堆内内存是两个相对的概念,其中堆内内存(on-heap memory)是我们平常工作中接触比较多的。Java中分配的非空对象都是由Java虚拟机的垃圾收集器管理的,都是放在堆内内存。我们可以通过jvm参数-X            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-17 21:20:40
                            
                                139阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            JDK堆外内存使用jdk:Java开发工具包 (Java Development Kit ) 的缩写 1、堆内内存(on-heap memory) 堆外内存和堆内内存是相对的二个概念,其中堆内内存Java虚拟机内存 2、堆外内存(off-heap memory) 和堆内内存相对应,堆外内存就是把内存对象分配在Java虚拟机的堆以外的内存,这些内存直接受本地系统管理(而不是虚拟机),这样做的结果就是            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-21 14:03:09
                            
                                123阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            [TOC]一、JVM内存的分配及垃圾回收JVM垃圾回收由于JVM会替我们执行垃圾回收,因此开发者根本不需要关心对象的释放。但是如果不了解其中的原委,很容易内存泄漏,只能两眼望天了!垃圾回收,大致可以分为下面几种:Minor GC:当新创建对象,内存空间不够的时候,就会执行这个垃圾回收。由于执行最频繁,因此一般采用复制回收机制。Major GC:清理年老代的内存,这里一般采用的是标记清除+标记整理机            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-07 15:53:40
                            
                                132阅读
                            
                                                                             
                 
                
                             
         
            
            
            
                JVM可以使用的内存分外2种:堆内存和堆外内存.    堆内存完全由JVM负责分配和释放,如果程序没有缺陷代码导致内存泄露,那么就不会遇到java.lang.OutOfMemoryError这个错误。    使用堆外内存,就是为了能直接分配和释放内存,提高效率。JDK5.            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-31 20:19:07
                            
                                111阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一:堆外内存是什么?在JAVA中,JVM内存指的是堆内存。机器内存中,不属于堆内存的部分即为堆外内存。堆外内存就是把内存对象分配在Java虚拟机的堆以外的内存,也被称为直接内存。堆外内存并不神秘,在C语言中,分配的就是机器内存,和本文中的堆外内存是相似的概念。在JAVA中,可以通过Unsafe和NIO包下的ByteBuffer来操作堆外内存。Unsafe类操作堆外内存sun.misc.Unsafe            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-02 20:24:50
                            
                                113阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            引子今日项目中将springboot的相关监控指标对接了promethues,在网上找了找到了“jvm-micrometer_rev9”的grafana的前端模板,测试同事说展示的信息都要测试,吓我一身冷汗,我只不过做了一些配置而已,好家伙到时候测试那么多,于是乎我就把“jvm-micrometer_rev9”中的一些展示不出来的指标给删了嘿嘿。堆内存相关的指标含义含义还是比较好理解的,主要就是E            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-17 12:27:07
                            
                                269阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            JVM管理两种类型的内存,堆和非堆。堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的。它和堆不同,运行期内GC不会释放空间。     一、内存溢出类型       1、java.lang.OutOfMemoryError: PermGen space            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-14 12:04:31
                            
                                56阅读