注意:本系列博客,主要参考自以下四本书《分布式Java应用:基础与实践》《深入理解Java虚拟机(第二版)》《深入分析Java web技术内幕》《实战java虚拟机》1、为什么要了解JVM内存管理机制JVM自动的管理内存的分配与回收,这会在不知不觉中浪费很多内存,导致JVM花费很多时间去进行垃圾回收(GC)内存泄露,导致JVM内存最终不够用 2、JVM内存结构根据上图,JVM内存结构包括            
                
         
            
            
            
            最近排查一个线上java服务常驻内存异常高的问题,大概现象是:java堆Xmx配置了8G,但运行一段时间后常            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-12-29 11:32:17
                            
                                5927阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            JVM 基本的调优参数、内存的了解几个需要掌握的调优参数· -Xms 堆最小值。 · -Xmx 堆最大值。 同时-Xms与-Xmx 的单位默认字节都是以k、m做单位的。 通常这两个配置参数相等,避免每次空间不足,动态扩容带来的影响。 · -Xmn 新生代大小 · -Xss 每个线程池的堆栈大小。在jdk5以上的版本,每个线程堆栈大小为1m,jdk5以前的版本是每个线程池大小为256k。一般在相同物            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-02-26 16:17:41
                            
                                33阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1、什么是堆外内存?通常,我们在Java中创建的对象都处于堆内内存(heap)中,堆内内存是由JVM所管控的Java进程内存,并且它们遵循JVM的内存管理机制,JVM会采用垃圾回收机制统一管理堆内存。与之相对的是堆外内存,存在于JVM管控之外的内存区域,Java中对堆外内存的操作,依赖于Unsafe提供的操作堆外内存的native方法。2、为什么要使用堆外内存?对垃圾回收停顿的改善。由于堆外内存是            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-16 21:08:12
                            
                                379阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            0 实战参考FastJson内存泄漏1 现象及原因堆外内存java 8下是指除了Xmx设置的java堆(java 8以下版本还包括MaxPermSize设定的持久代大小)外,java进程使用的其他内存。主要包括:DirectByteBuffer分配的内存,JNI里分配的内存,线程栈分配占用的系统内存,jvm本身运行过程分配的内存,codeCache,java 8里还包括metaspace元数据空间            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-30 10:19:09
                            
                                319阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            去年我面试了一些程序员,等级从低到高都有。但是没有一个人能够说明白什么是堆外内存! 今天我们就一起来简单的说一说 Java 中的堆外内存。这一块可能 90% 的 Java 程序员都不清楚,希望你看过本文后,成为那 10% 中的大神级别的潜力股。 堆外内存是相对于堆内内存的一个概念。堆内内存是由 JVM 所管控的 Java 进程内存,我们平时在 Java 中创建的对象都处于堆内内存中,并且它们遵循            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-30 15:16:37
                            
                                115阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            [TOC]一、JVM内存的分配及垃圾回收JVM垃圾回收由于JVM会替我们执行垃圾回收,因此开发者根本不需要关心对象的释放。但是如果不了解其中的原委,很容易内存泄漏,只能两眼望天了!垃圾回收,大致可以分为下面几种:Minor GC:当新创建对象,内存空间不够的时候,就会执行这个垃圾回收。由于执行最频繁,因此一般采用复制回收机制。Major GC:清理年老代的内存,这里一般采用的是标记清除+标记整理机            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-07 15:53:40
                            
                                132阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Java的内存管理一直是一个很火的话题,今天聊一聊平常比较少关注的堆外内存,也叫直接内存,不懂不影响生活,懂了就很高级,有木有!!!看下图:1、堆外内存是个啥?堆外内存也叫直接内存,因为这部分内存就是机器的物理内存,够直接吧。直接内存并不是虚拟机运行时数据区的一部分,也不是Java 虚拟机规范中定义的内存区域。使用native 函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectB            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-16 20:45:02
                            
                                239阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            目录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阅读
                            
                                                                             
                 
                
                             
         
            
            
            
                JVM可以使用的内存分外2种:堆内存和堆外内存.    堆内存完全由JVM负责分配和释放,如果程序没有缺陷代码导致内存泄露,那么就不会遇到java.lang.OutOfMemoryError这个错误。    使用堆外内存,就是为了能直接分配和释放内存,提高效率。JDK5.            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-31 20:19:07
                            
                                111阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            堆内内存:1.一般情况下,一个新的对象创建在JVM内的堆上,并为其分配内存空间。堆空间由JVM垃圾回收器管理,称为堆内内存(on-heap memory)2.虚拟机会定期对垃圾内存进行回收,有时会进行一次彻底的回收Full GC3.彻底回收时,垃圾收集器会对所有分配的堆内内存进行完整的扫描,这意味一次垃圾收集对Java 应用造成的影响,跟堆的大小是成正比的,过大的堆会影响 Java 应用的性能&n            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-17 12:11:26
                            
                                451阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            堆内内存:1.一般情况下,一个新的对象创建在JVM内的堆上,并为其分配内存空间。堆空间由JVM垃圾回收器管理,称为堆内内存(on-heap memory)2.虚拟机会定期对垃圾内存进行回收,有时会进行一次彻底的回收Full GC3.彻底回收时,垃圾收集器会对所有分配的堆内内存进行完整的扫描,这意味一次垃圾收集对Java 应用造成的影响,跟堆的大小是成正比的,过大的堆会影响 Java 应用的性能&n            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-19 23:48:24
                            
                                258阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
                   堆内存根据生命周期进行分而治之,分区之后可以提高JVM垃圾收集的效率,更好地回收为了更好地分配。 如果在堆中无法分配内存,并且堆也无法再扩展时,将会抛出OutOfMemoryError异常。            HeapByteBuffer与DirectByteBuffer,在原理上            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-12-01 11:08:39
                            
                                90阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Java基础之数组队列及Java堆外内存学习笔记[图] 1.数组 1.1 数组基本概念: 数组是一个容器,可以存储同一数据类型的N个数据;数组是一个数据结构,是数据结构中访问速度最快的; 数组是直接通过下标进行定位; 数组是属于引用数据类型(数组名中存储的是内存首地址);数组本身只有有length属性(获取数组能存储的数据个数),但是有从Objuect父类继承的属性和方法。 1.2数组在内存中的存            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-25 17:53:26
                            
                                78阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            (以下对JVM内存参数的配置,可以对应到eclipse.ini文件中)先来看看参数的配置项内容:  -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M其中-vmargs指的是设置JVM参数,后面的参数就是JVM参数项。接下来我们结合JVM内存管理机制来对各参数进行解析:1.堆(Heap)和非堆(Non-heap)内存  按            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-30 14:26:34
                            
                                110阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1 、定位进程通过top命令查看最占用内存的进程,为pid为1389816的 java进程2、定位线程执行命令 : ps p 1389816 -L -o pcpu,pmem,pid,tid,time,tname,找出最耗用内存的线程3、分析jstack日志jstack -l 1389816 > /tmp/jstack.log,将进程中的线程详细信息printf "%x " 1389817 把            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-21 11:22:54
                            
                                116阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一、前言平时编程时,在 Java 中创建对象,实际上是在堆上划分了一块区域,这个区域叫堆内内存。使用这 -Xms -Xmx 来指定新生代和老年代空间大小的初始值和最大值,这初始值和最大值也被称为 Java 堆的大小,即 堆内内存大小。这个堆内内存完全受 JVM 管理,JVM 有垃圾回收机制,所以我们            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-16 17:56:50
                            
                                297阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            堆内内存java的内存分为堆内内存和堆外内存,在了解堆外内存之前,先看看堆内内存是啥,堆内内存是受jvm管控的,也就是说,堆内内存由jvm负责创建和回收;创建和回收都是自动进行的,不需要人为干预;什么是堆外内存堆外内存又叫直接内存,是和操作系统内存直接挂钩的,堆外内存不受jvm的管制,所以可以认为堆外内存是jvm以外的内存空间,虽然不受jvm管控,但是堆外内存还是在java进程里面的,而不是由系统            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-18 16:26:11
                            
                                155阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            引子今日项目中将springboot的相关监控指标对接了promethues,在网上找了找到了“jvm-micrometer_rev9”的grafana的前端模板,测试同事说展示的信息都要测试,吓我一身冷汗,我只不过做了一些配置而已,好家伙到时候测试那么多,于是乎我就把“jvm-micrometer_rev9”中的一些展示不出来的指标给删了嘿嘿。堆内存相关的指标含义含义还是比较好理解的,主要就是E            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-17 12:27:07
                            
                                269阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
              起因  运行在docker上的一个服务,在某个版本之后,占用的内存开始增长,直到docker分配的内存上限,但是并不会OOM。使用ps查看进程使用的内存和虚拟内存 ( Linux内存管理 )。除了虚拟内存比较高达到17GB以外,实际使用的内存RSS也夸张的达到了7GB,远远超过了-Xmx的设定。[root]$ ps -p 75 -o rss,vsz  
RSS    VSZ 7152568 1            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-10 00:05:41
                            
                                136阅读