JVM与直接内存分析

JVM源码分析之堆外内存(直接内存) 1、堆外内存定义 内存对象分配在JVM中堆以外的内存,也可以称为直接内存,这些内存直接受操作系统管理(而不是JVM),这样做的好处是能够在一定程度上减少垃圾回收对应用程序造成的影响。一般我们使用Unsafe和NIO包下ByteBuffer来创建堆外内存。 2、为什么使用堆外内存 1、减少了垃圾回收 使用堆外内存的话,堆外内存是直接受操作系统管理( 而不是虚拟机 )。这样做的结果就是能保持一个较小的堆内内存,以减少垃圾收集对应用的影响。 2、提升复制速度(io效率) 堆内内存由JVM管理,属于“用户态”;而堆 阅读详情

前言

之前在看netty的时候,不断的提到直接内存与零拷贝,所以就想看看JVM与直接内存的之间的关系;

环境准备

系统:macOS 11+
Jdk:jdk1.8
内存:16G

直接内存分析

1.直接内存与heap空间、meta空间之间的关系
Code-1:申请直接内存

//-Xmx2g -XX:+PrintGCDetails
public class BufferTest1 {

    private static final int BUFFER =  1024 * 1024 * 1024;//1GB

    public static void main(String[] args) throws InterruptedException {


        Thread.sleep(5000l);


        Scanner scanner = new Scanner(System.in);
        System.out.println("请求指示:");  
        scanner.next();


        //直接分配本地内存空间
        ByteBuffer byteBuffer = ByteBuffer.allocateDirect(BUFFER);
        System.out.println("直接内存分配完毕,请求指示!");

        scanner.next();


        System.out.println("直接内存开始释放!");
        byteBuffer = null;
        System.gc();


        scanner.next();
    }
}
可以发现直接内存 heap空间与meta空间都是没有影响的,但是对应进程占用的内存是有直接影响的。
2.直接内存最大内存
Code-2:多申请几个直接内存
//-Xmx2g -XX:+PrintGCDetails
public class BufferTest2 {

    private static final int BUFFER =  1024 * 1024 * 1024;//1GB
    private static final int BUFFER2 =  512 * 1024 * 1024;

    public static void main(String[] args) throws InterruptedException {

        Thread.sleep(5000l);


        Scanner scanner = new Scanner(System.in);
        System.out.println("请求指示:");
        scanner.next();


        //直接分配本地内存空间1
        ByteBuffer byteBuffer1 = ByteBuffer.allocateDirect(BUFFER);
        System.out.println("直接内存1分配完毕,请求指示!");


        scanner.next();


        ByteBuffer byteBuffer2 = ByteBuffer.allocateDirect(BUFFER2);
        System.out.println("直接内存2分配完毕,请求指示!");


        scanner.next();


        ByteBuffer byteBuffer3 = ByteBuffer.allocateDirect(BUFFER2);
        System.out.println("直接内存3分配完毕,请求指示!");


        scanner.next();


        System.out.println("直接内存开始释放!");
        byteBuffer1 = null;
        byteBuffer2 = null;
        byteBuffer3 = null;
        System.gc();


        scanner.next();
    }
}
请求指示:
1
直接内存1分配完毕,请求指示!
2
直接内存2分配完毕,请求指示!
3
[GC (System.gc()) [PSYoungGen: 10486K->1966K(76288K)] 10486K->1974K(251392K), 0.0027432 secs] [Times: user=0.01 sys=0.01, real=0.01 secs] 
[Full GC (System.gc()) [PSYoungGen: 1966K->0K(76288K)] [ParOldGen: 8K->1801K(175104K)] 1974K->1801K(251392K), [Metaspace: 4178K->4178K(1056768K)], 0.0069622 secs] [Times: user=0.02 sys=0.00, real=0.00 secs] 
Exception in thread "main" java.lang.OutOfMemoryError: Direct buffer memory
    at java.nio.Bits.reserveMemory(Bits.java:695)
    at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:123)
    at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311)
    at com.kaikela.demo2.home.BufferTest2.main(BufferTest2.java:42)
Heap
 PSYoungGen      total 76288K, used 1748K [0x0000000795580000, 0x000000079aa80000, 0x00000007c0000000)
  eden space 65536K, 2% used [0x0000000795580000,0x0000000795735018,0x0000000799580000)
  from space 10752K, 0% used [0x0000000799580000,0x0000000799580000,0x000000079a000000)
  to   space 10752K, 0% used [0x000000079a000000,0x000000079a000000,0x000000079aa80000)
 ParOldGen       total 175104K, used 1801K [0x0000000740000000, 0x000000074ab00000, 0x0000000795580000)
  object space 175104K, 1% used [0x0000000740000000,0x00000007401c2490,0x000000074ab00000)
 Metaspace       used 4218K, capacity 4674K, committed 4864K, reserved 1056768K
  class space    used 466K, capacity 494K, committed 512K, reserved 1048576K


Process finished with exit code 1
可以看出,直接内存大小不能超过jvm的最大限制(-Xmx),当然也可以限制直接内存的大小(-XX:MaxDirectMemorySize)。比如设置-XX:MaxDirectMemorySize=1g,那么上面的代码在执行第二次空间申请的时候就会报OOM。
3.直接内存与GC
上面的例子可以发现,我们在主动进行GC的时候,那我们可以设想一个场景,我们申请了一个很大直接内存,然后开始大量的创建对象,那么整个JVM内存的表现是怎么样的
Code-3:直接内存与GC
// -Xmx2g -XX:+PrintGCDetails
public class BufferTest {


    private static final int BUFFER =  1700 * 1024 * 1024;//1.6GB

    public static void main(String[] args) throws InterruptedException {


        Scanner scanner = new Scanner(System.in);
        System.out.println("请求指示:");
        scanner.next();

        //直接分配本地内存空间
        ByteBuffer byteBuffer = ByteBuffer.allocateDirect(BUFFER);
        System.out.println("直接内存分配完毕,请求指示!");

        scanner.next();

        List<TestObj> bigObj = new ArrayList<>();
        for (int n = 0; n < 5000000; n++) {
            bigObj.add(new TestObj(n));
        }

        System.out.println(bigObj);

        scanner.next();

        System.out.println("直接内存开始释放!");
        byteBuffer = null;
        System.gc();


        scanner.next();
    }
}
可以发现当创建对象的时候,发生GC的时候,申请的直接内存也会被回收。
请求指示:
1
直接内存分配完毕,请求指示!
2
[GC (Allocation Failure) [PSYoungGen: 65536K->10728K(76288K)] 65536K->34945K(251392K), 0.0276737 secs] [Times: user=0.17 sys=0.02, real=0.03 secs] 
[GC (Allocation Failure) [PSYoungGen: 76264K->10749K(76288K)] 100481K->92821K(251392K), 0.0606339 secs] [Times: user=0.41 sys=0.04, real=0.07 secs] 
[GC (Allocation Failure) [PSYoungGen: 68029K->10747K(76288K)] 150101K->142462K(251392K), 0.0662871 secs] [Times: user=0.47 sys=0.03, real=0.06 secs] 
[Full GC (Ergonomics) [PSYoungGen: 10747K->0K(76288K)] [ParOldGen: 131715K->141458K(285184K)] 142462K->141458K(361472K), [Metaspace: 9355K->9355K(1058816K)], 1.4972584 secs] [Times: user=8.48 sys=0.09, real=1.50 secs] 
[GC (Allocation Failure) [PSYoungGen: 65536K->10752K(128512K)] 206994K->203458K(413696K), 0.0623276 secs] [Times: user=0.34 sys=0.05, real=0.06 secs] 
1
直接内存开始释放!
[GC (System.gc()) [PSYoungGen: 101794K->10752K(128512K)] 294500K->288159K(413696K), 0.0895192 secs] [Times: user=0.55 sys=0.07, real=0.09 secs] 
[Full GC (System.gc()) [PSYoungGen: 10752K->0K(128512K)] [ParOldGen: 277407K->260989K(285184K)] 288159K->260989K(413696K), [Metaspace: 9526K->9526K(1058816K)], 1.1158031 secs] [Times: user=6.84 sys=0.02, real=1.12 secs] 
Heap
 PSYoungGen      total 128512K, used 3498K [0x0000000795580000, 0x000000079e080000, 0x00000007c0000000)
  eden space 117760K, 2% used [0x0000000795580000,0x00000007958ea8a0,0x000000079c880000)
  from space 10752K, 0% used [0x000000079d580000,0x000000079d580000,0x000000079e000000)
  to   space 512K, 0% used [0x000000079e000000,0x000000079e000000,0x000000079e080000)
 ParOldGen       total 285184K, used 260989K [0x0000000740000000, 0x0000000751680000, 0x0000000795580000)
  object space 285184K, 91% used [0x0000000740000000,0x000000074fedf5b8,0x0000000751680000)
 Metaspace       used 9540K, capacity 10054K, committed 10240K, reserved 1058816K
  class space    used 1103K, capacity 1211K, committed 1280K, reserved 1048576K
4.直接内存+heap+metaspace=进程内存
​根据code-3的例子,我们翻过来思考,如果先将heap空间用完,在去申请直接内存是否还能够成功?
Code-4
public class BufferTest3 {

    private static final int BUFFER =  1740 * 1024 * 1024;//1.6GB

    public static void main(String[] args) throws InterruptedException {

        Scanner scanner = new Scanner(System.in);
        System.out.println("请求指示:");
        scanner.next();

        List<TestObj> bigObj = new ArrayList<>();
        for (int n = 0; n < 5000000; n++) {
            bigObj.add(new TestObj(n));
        }

        System.out.println(bigObj);

        scanner.next();

        //直接分配本地内存空间
        ByteBuffer byteBuffer = ByteBuffer.allocateDirect(BUFFER);
        System.out.println("直接内存分配完毕,请求指示!");

        scanner.next();

        System.out.println("直接内存开始释放!");
        byteBuffer = null;
        System.gc();


        scanner.next();
    }
}
可以看到java进程消耗的内存是3.6g已经超过了Xmx配置的大小,不过gc之后一样会被回收。

总结

1、直接内存申请的总和大小不能超过-Xmx配置的大小
2、直接内存申请的总和大小不能超过-XX:MaxDirectMemorySize配置的大小
3、直接内存申请的总和不能超过系统允许的最大值
4、gc可以将直接内存进行回收
5、直接内存虽然要小于-Xmx配置的大小,但是直接内存+heap+metaspace会大于-Xmx配置的大小
一篇文章掌握整个JVM,JVM超详细解析!!!(持续更新中) 一篇文章掌握整个JVM,JVM超详细解析!!!(持续更新中) JVM内存模型 JVM内存模型包括:虚拟机栈、堆、方法区、程序计数器、本地方法栈 堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或 阅读详情

相关推荐

从零开始:kohya_ss环境部署与LoRA/SDXL模型训练实战指南

本文提供了一份详细的kohya_ss环境部署与模型训练实战指南。从零开始,手把手教你使用Conda创建虚拟环境、安装依赖并启动Web GUI界面。核心内容涵盖高质量数据集的准备方法,并重点解析了如何使用kohya_ss工具进行LoRA模型和SDXL模型的微调训练,包括关键参数配置与常见报错解决方案,帮助初学者快速上手AI绘画模型定制。

weixin_29162439的博客 534

【JVM】详解直接内存

下面是 《深入理解 Java 虚拟机 第三版》2.2.7 小节 关于 Java 直接内存的描述。直接内存(Direct Memory)并不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。但是这部分内存也被频繁地使用,而且也可能导致异常出现,所以我们放到这里一起讲解。在 JDK 1.4 中新加入了类,引入了一种基于通道(Channel)与缓冲区(Buffer)的 I/O 方式,它可以使用 Native 函数库直接分配堆外内存,然后通过一个存储在 Java 堆里面的。

沉迷写代码的程序猿的博客 3749

基于ResNet-50的猫狗分类训练

基于ResNet-50的猫狗分类python训练

weixin_46352497的博客 1004

JVM-直接内存(四)

一、定义 属于操作系统,常见于NIO操作时,用于数据缓冲区 分配回收成本较高,但读写性能高 不受JVM内存回收管理 二、读写流程 正常的文件IO流读写过程: 使用了DirectBuffer读写过程(直接内存): 直接内存是操作系统和Java代码都可以访问的一块区域,无需将代码从系统内存复制到Java堆内存,从而提高了效率。 直接内存也会导致内存溢出: public class Main { static int _100MB = 1024 * 1024 * 100; public

weixin_41979002的博客 1011

CANoe软件之离线报文回放与分析实战

本文详细介绍了如何使用CANoe软件进行离线报文回放与分析,帮助工程师将现场故障数据转化为可反复研究的实验室资源。通过实战步骤,指导如何搭建分析工程、加载DBC文件解码信号,并利用Trace和Graphics窗口进行深度数据筛选与图形化分析,从而高效定位汽车电子故障,是提升诊断效率的关键技能。

weixin_29227585的博客 527

微信数据库读取解密脚本 聊天记录查看工具,支持所有微信版本,后期将支持企业微信[Windows]

(1)获取微信昵称、微信账号、微信手机号、微信邮箱、微信KEY的基址偏移(2)获取微信的微信昵称、微信账号、微信手机号、微信邮箱、微信KEY、微信原始ID(wxid_******)(3)获取微信文件夹路径(4)支持查看聊天记录查看(5)根据key解密微信数据库(6)提供数据库部分字段说明(7)支持微信多开场景,获取多用户信息等(8)微信需要登录状态才能获取数据库密钥(9)支持导出聊天记录为html,备份微信聊天记录,方便查看(10)合并多个数据库,方便查看。

weixin_43101935的博客 1万+

常见的JVM内存问题以及分析工具

内存溢出(OutOfMemory,简称OOM)主要是某一堆内存空间耗尽的时候会出现。导致出现OOM的原因有很多,这里总结一下常见的一些:包括堆溢出、直接内存溢出、永久区溢出等,并介绍一下常的堆分析工具。 1.栈溢出 java栈是一块线程私有的内存空间。如果说,java堆与程序数据密切相关,那java栈就与线程执行密切相关。线程的执行的基本行为是函数的调用,而每一次调用都是都是栈帧出入栈

听雪楼 2301

工业质检实战:用海康VisionMaster的BLOB分析搞定PCB焊点缺陷检测

本文详细介绍了如何利用海康VisionMaster平台的BLOB分析技术,构建一套针对PCB焊点缺陷的自动化视觉检测方案。文章从核心原理出发,重点阐述了如何通过动态阈值分割和模板匹配定位,克服工业现场光照不均、位置偏移等挑战,实现虚焊、漏焊等缺陷的精准、稳定检测,并提供了实战调优与系统集成的关键思路。

weixin_29091105的博客 560

[SonarQube]Scanners内存溢出

问题现象: 执行扫描时出现内存不足: SonarQube java.lang.OutOfMemoryError: GC overhead limit exceeded java.lang.OutOfMemoryError: Java heap space 解决方案: 1、停止sonarqube 2、调整ONAR_SCANNER的内存大小 vim /etc/profile export SONA...

Gblfy_Blog 7026

手把手教你用VSCode+MCUXpresso搭建i.MX RT1062开发环境(附RT-Thread Nano移植)

本文详细介绍了如何使用VSCode和MCUXpresso工具链搭建i.MX RT1062开发环境,包括工具链安装、工程配置、调试技巧以及RT-Thread Nano实时操作系统的移植方法。通过实战步骤和优化建议,帮助开发者快速掌握这款高性能Cortex-M7 MCU的开发流程,提升嵌入式开发效率。

weixin_27014595的博客 391

【浙大翁恺】C语言习题

/* 02-0. 整数四则运算(10) 本题要求编写程序,计算2个正整数的和、差、积、商并输出。 题目保证输入和输出全部整型范围内。 输入格式: 输入在一行中给出2个正整数A和B。 输出格式: 在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。 输入样例: 3 2 输出样例: 3 + 2 = 5 3 - 2 = 1 3 * 2 = 6 3 / 2 =.

qq_43600867的博客 5850

直接内存与 JVM 源码分析

直接内存与 JVM 源码分析 直接内存(堆外内存) 直接内存有一种叫法,堆外内存。 直接内存(堆外内存)指的是 Java 应用程序通过直接方式从操作系统中申请的内存。这个差别与之前的堆、栈、方法区,那些内存都是经过了虚拟化。所 以严格来说,这里是指直接内存。 直接内存有哪些?  使用了 Java 的 Unsafe 类,做了一些本地内存的操作;  Netty 的直接内存(Direct Memory),底层会调用操作系统的 malloc 函数。  JNI 或者 JNA 程序,直接操纵了本地内存,比如一些

qq_40661791的博客 301

[Dify实战] 招聘筛简历机器人:自动筛选、排序、生成面试要点-带绑定资源

摘要:本文介绍了如何利用Dify优化简历筛选流程,解决人工筛选耗时、标准不统一等问题。通过结构化输出"评分+亮点+风险+面试关注点",将主观判断转化为规则化流程。关键步骤包括:设计标准化Prompt、配置权重排序策略、确保公平合规性、与ATS系统对接,以及持续优化评估指标。该方法能显著提升筛选效率(缩短招聘周期)、增强一致性(避免主观偏差),并为面试官提供结构化参考信息,最终实现更高效精准的人才筛选。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 581

【JVM实践】(10)内存模型直接内存分析与实战

堆外存储:通过Native方法分配的物理内存管理方式:通过Java对象引用管理,不受GC控制核心类库主要用途零拷贝网络传输大文件内存映射跨进程共享内存。

因为热爱,所以付出 1148

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

JVM 直接内存概念分析(十一)

今天分析JVM直接内存问题:首先什么是直接内存。 1、直接内存(堆外内存) 直接内存有一种叫法,堆外内存。 直接内存(堆外内存)指的是 Java 应用程序通过直接方式从操作系统中申请的内存。这个差别与之前的堆、栈、方法区,那些内存都是经过了虚拟化。所 以严格来说,这里是指直接内存。 2、直接内存有哪些? 使用了 Java 的 Unsafe 类,做了一些本地内存的操作; Netty 的直接内存(Direct Memory),底层会调用操作系统的 malloc 函数; ...

nandao158的博客 1202

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

每天分享一个小知识——JVM之直接内存溢出原理分析

直接内存溢出常见于高频I/O或框架隐式分配场景,特征为堆内存正常但进程总内存高。通过合理配置、监控工具及代码审查,可有效预防。例如,Netty应用中需结合业务负载调整内存参数,并及时清理无用的ByteBuffer💡 你的每个关注,都是我们共同进步的燃料!⬇️ 下期预告:《每天分享一个小知识——垃圾收集器与内存分配策略。

weixin_44343315的博客 690

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【JVM技术专题】较为深度的分析JVM的直接内存「上篇」

1. 常见于NIO操作时,用于数据缓冲区(ByteBuffer.allocate),当然也可以采用Unsafe类进行native方法运作进行申请直接内存。 2. 分配回收成本较高(属于操作系统内存),但读写性能高。(因为直接内存不需要经过JVM解释器进行地址映射转换到系统真正内存,故此读写速度会比堆内存在快很多,但是申请和回收机制角度而言复杂,因为属于直接由操作系统进行管理,而非JVM直接进行管理。

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。 814

直接内存与JVM源码分析

JVM系列文章目录 初识JVM 深入理解JVM内存区域 玩转JVM对象和引用 JVM分代回收机制和垃圾回收算法 细谈JVM垃圾回收与部分底层实现 Class文件结构及深入字节码指令 玩转类加载和类加载器 方法调用的底层实现 Java语法糖及底层实现 GC调优基础知识工具篇之JDK自带工具 GC调优基础知识工具篇之Arthas与动态追踪技术 JVM调优之内存优化与GC优化 JVM调优之预估调优与问题排查 直接内存与JVM源码分析 直接内存与JVM源码分析JVM系列文章目录前言直接内存Java中直接内存的方式

羽毛的博客 624

直接内存泄漏与JVM源码分析

直接内存(堆外内存) 直接内存(堆外内存)指的是 Java 应用程序通过直接方式从操作系统中申请的内存。这个差别与之前的堆、栈、方法区,那些内存都是经过了虚拟化。所以严格来说,这里是指直接内存。 直接内存有哪些?  使用了 Java 的 Unsafe 类,做了一些本地内存的操作;  Netty 的直接内存(Direct Memory),底层会调用操作系统的 malloc 函数。  JNI 或者 JNA 程序,直接操纵了本地内存,比如一些加密库; JNI 是 Java Native Interface

bug_come的博客 511

JVM 调优实战 - JVM 直接内存概念分析

JVM 直接内存,也称为堆外内存,是 JVM 运行时环境中的一种内存分配方式,它与 Java 堆内存不同。在进行 JVM 调优时,理解直接内存的概念是非常重要的。直接内存通常通过 NIO(New I/O)来分配和操作,主要用于高性能 I/O 操作,如网络通信和文件 I/O。相比于堆内存,直接内存的分配和释放开销较小,而且可以通过零拷贝技术来提高 I/O 操作的效率。总的来说,理解直接内存的概念,并根据实际情况进行合理的调优,对于提高 JVM 应用的性能和稳定性都非常重要。

qq_33240556的博客 431

JVM 调优实战 - 实战分析解决 JVM 直接内存泄漏问题

通过以上步骤,可以有效地分析和解决 JVM 直接内存泄漏问题,提高应用的稳定性和可靠性。

qq_33240556的博客 379

java直接内存为什么快_直接内存与 JVM 源码分析

直接内存(堆外内存)直接内存有一种叫法,堆外内存。直接内存(堆外内存)指的是 Java 应用程序通过直接方式从操作系统中申请的内存。这个差别与之前的堆、栈、方法区,那些内存都是经过了虚拟化。所以严格来说,这里是指直接内存。直接内存有哪些? 使用了 Java 的 Unsafe 类,做了一些本地内存的操作; Netty 的直接内存(Direct Memory),底层会调用操作系统的 malloc ...

weixin_28221501的博客 550

jvm 堆外内存_JVM源码分析之堆外内存(直接内存)

1、堆外内存定义内存对象分配在JVM中堆以外的内存,也可以称为直接内存,这些内存直接受操作系统管理(而不是JVM),这样做的好处是能够在一定程度上减少垃圾回收对应用程序造成的影响。一般我们使用Unsafe和NIO包下ByteBuffer来创建堆外内存。2、为什么使用堆外内存1、减少了垃圾回收使用堆外内存的话,堆外内存是直接受操作系统管理( 而不是虚拟机 )。这样做的结果就是能保持一个较小的堆内内存...

weixin_39589511的博客 285

实战分析解决 JVM 直接内存泄漏问题(十二)

今天解决直接内存内内泄漏问题: 1、内存泄漏问题解决 : linux环境这个程序可以访问服务器的 8888 端口,这将会把内存使用的阈值增加到 85%,我们的程序会逐渐把这部分内存占满 curl http://127.0.0.1:8888/ 特意这么做也是为了方便你的观察,通过内存的增长我们可以大致知道问题的点。 2、问题关键点 GZIPInputStream 使用 Inflater 申请堆外内存、我们没有调用 close() 方法来主动释放。如果忘记关闭,...

nandao158的博客 444

元空间和直接内存_万字精美图文,带你掌握 JVM 内存布局及细节分析

来自:掘金,作者:Richard_Yi链接:https://juejin.im/post/5e0708baf265da33c34e495b前言本JVM系列属于本人学习过程当中总结的一些知识点,目的是想让读者更快地掌握JVM相关的知识要点,难免会有所侧重,若想要更加系统更加详细的学习JVM知识,还是需要去阅读专业的书籍和文档。本文主题内容:1、JVM 内存区域概览2、堆区的空间分配是怎么样?堆溢出的...

weixin_39960920的博客 106
上一篇: 关于Nginx文章迁移
下一篇: java直接内存的读写操作
sinom21
博客等级 码龄19年 22粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sinom21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值