首页 > 系统相关 >JVM非运行时共享内存之直接内存

JVM非运行时共享内存之直接内存

时间:2024-05-15 15:42:32浏览次数:23  
标签:DirectBuffer 共享内存 JVM 内存 ByteBuffer 直接

  直接内存(Direct Memory) 并不是虚拟机运行时数据区的一部分。为何存在呢?观察下两图进行对比:  

                

                

  有没有似曾相识?!很多架构的设计都基于这种思想,提高性能和效率。NIO的Buffer提供一个可以直接访问系统物理内存的类——DirectBuffer。

                

  普通的ByteBuffer仍在JVM堆上分配内存,其最大内存受到最大堆内存的 限制。而DirectBuffer直接分配在物理内存中,并不占用堆空间。在访问普通的ByteBufferr时,系统总是会使用一个“内核缓冲区”进行操作。而DirectBuffer所处的位置,就相当于这个“内核缓冲区”。因此,使用DirectBuffer是一种更加接近内存底层的方法,所以它的速度比普通的ByteBuffer更快。

  通过使用堆外内存,可以带来以下好处:

     1. 改善堆过大时垃圾回收效率,减少停顿。Full GC时会扫描堆内存,回收效率和堆大小成正比。Native的内存,由OS负责管理和回收。

     2. 减少内存在Native堆和JVM堆拷贝过程,避免拷贝损耗,降低内存使用。

     3. 可突破JVM内存大小限制。

 

标签:DirectBuffer,共享内存,JVM,内存,ByteBuffer,直接
From: https://www.cnblogs.com/ilovebath/p/18193877

相关文章

  • python列出centos7内存使用前50的进程信息
    python代码,列出centos7系统内存使用排名前50的进程信息,按照内存使用大小从大到小排序。 importpsutil#获取系统内存信息total_memory=psutil.virtual_memory().total/(1024.0**3)#转换为GBavailable_memory=psutil.virtual_memory().available/......
  • 谈谈 JVM 垃圾回收机制
    前言垃圾回收需要思考三件事情,哪些内存需要回收?什么时候回收?如何回收?一、哪些内存需要回收JVM的内存区域中,程序计数器、虚拟机栈和本地方法栈的生命周期是随线程而生,随线程而灭的。这几个区域的内存分配和回收都具有确定性,不需要过多考虑回收问题,当方法或线程结束时,内存自......
  • .NET 缓存:内存缓存 IMemoryCache、分布式缓存 IDistributedCache(Redis)
    .NET缓存里分了几类,主要学习内存缓存、分布式缓存一、内存缓存IMemoryCache#1、Program注入缓存builder.Services.AddMemoryCache();2、相关方法及参数Get、TryGetValue、GetOrCreate、GetOrCreateAsync、Set、Remove,关键参数是过期时间,GetOrCreate、GetOrCreateAsync是通......
  • TEE 开发 禁止大内存TA加载
    我们会经常遇到一些TA,把自己的TA_STACK_SIZE和TA_HEAP_SIZE 设置的太大,从而无法成功被load的情况。因为taram一共就这些内存,但是TA的这两个宏配置是由用户去决定的,为了避免这些TAowner方便自己害了他人考虑,我们在可以做出如下限制。在bl32里面loadta的时候做......
  • jvm垃圾回收及内存分配
    目录0.垃圾收集器的相关JVM参数1.java垃圾回收器种类2.串行回收器3.并行回收器3.1ParNew回收器3.2ParallelGC回收器3.3ParallelOldGC回收器3.4CMS回收器CMS主要工作步骤CMS说明3.5G1回收器3.5.1新生代GC3.5.2G1的并发标记周期3.5.3混合回收3.5.4G1日志解析0.垃圾收......
  • idea jprofiler内存快照分析
    1、idea按照jprofiler插件setting->plugins->marketplace搜索jprofiler,安装并重启2、分析dump文件dump内存快照方式:jmap-dump:format=b,file=heapdump.phrof{jvm的pid}使用jprofiler导入dump文件导入成功3、jprofiler工具关注“BiggestObjects”、"GCroots"、"Packa......
  • 内存溢出问题分析与处理
    内存占用情况查询检查系统内存使用情况以GiB为单位进行显示remotecmd"free-g"1.total:物理内存总量(GiB)。2.used:当前已使用的物理内存量(不包括缓冲区和缓存)(GiB)。3.free:可用的物理内存量(GiB)。4.shared:被多个进程共享的内存量(GiB)。5.buff/cache:作为......
  • 内存
    内存内存的基本概念内存是用来存储数据的社保,它的存储熟读介于寄存器和硬盘之间内存是CPU唯一可以访问的打容量的存储设备!所有硬盘中的程序和数据必须调入内存之后方可被CPU执行!切记:CPU不能直接处理硬盘中的数据内存的问题是软件开发中最核心的问题之一!如内存的分配,内存的释......
  • Linux上执行内存中的脚本和程序
    在Linux中可以不需要有脚本或者二进制程序的文件在文件系统上实际存在,只需要有对应的数据在内存中,就有办法执行这些脚本和程序。原理其实很简单,Linux里有办法把某块内存映射成文件描述符,对于每一个文件描述符,Linux会在/proc/self/fd/<文件描述符>这个路径上创建一个对应描述符的......
  • golang进程通过共享内存和C++进程进行通信
    目录serverclientserverC++可以使用POSIX共享内存API来创建和管理共享内存server.cpp#include<fcntl.h>#include<sys/mman.h>#include<sys/stat.h>#include<unistd.h>#include<cstring>#include<iostream>constchar*S......