当前位置: 首页 > news >正文

六安网站定制正规代运营公司排名

六安网站定制,正规代运营公司排名,饲料公司网站建设方案,焦作网站建设设计Java 进程内存占用除了JVM 运行时数据区,还有直接内存(Direct Memory)区域及 JVM 程序自身也会占用内存 直接内存(Direct Memory)区域:直接内存通过使用Native堆外内存来存储数据,这意味着数据…

Java 进程内存占用除了JVM 运行时数据区,还有直接内存(Direct Memory)区域及 JVM 程序自身也会占用内存

  • 直接内存(Direct Memory)区域:直接内存通过使用Native堆外内存来存储数据,这意味着数据不会被JVM的垃圾回收机制自动回收。与JVM堆内存相比,直接内存的分配和释放成本较高,因为它涉及与操作系统交互和内存管理的开销,也可能导致OOM异常出现
  • JVM 程序自身:JVM本身是个本地程序,还需要其他的内存去完成各种基本任务,比如,JIT Compiler 在运行时对热点方法进行编译,就会将编译后的方法储存在 Code Cache 里面;GC 等功能需要运行在本地线程之中,类似部分都需要占用内存空间

Java 进程内存占用

JVM内存区域划分详见 Java 内存区域与内存溢出异常

堆外内存

JVM 的堆外内存是指分配在JVM堆之外的内存空间,它不受JVM的垃圾回收机制管理。 以下是几种常见的JVM堆外内存:

  1. 直接字节缓冲区(Direct ByteBuffers):Direct ByteBuffer是JVM堆外内存的一种形式,它通过使用Native堆外内存来存储数据。
  2. NIO(New I/O)内存映射文件(Memory-mapped Files):NIO提供了一种将文件映射到内存的方式,这种内存映射文件将文件的内容直接映射到堆外内存中,可以通过内存访问的方式来读写文件。
  3. JNI(Java Native Interface):JNI允许Java程序与本地代码进行交互,可以在本地代码中分配和管理堆外内存。

堆外内存可以使用Native Memory Tracking 或 Arthas memory 进行监控及诊断

直接字节缓冲区

在实际使用中,Java 会尽量对 Direct Buffer 仅做本地 IO 操作,对于很多大数据量的 IO 密集操作,可能会带来非常大的性能优势,因为:

  • Direct Buffer 可以通过ByteBuffer.allocateDirect()方法来创建,它的数据存储在堆外内存中,生命周期内内存地址都不会再发生更改,进而内核可以安全地对其进行访问,很多 IO 操作会很高效
  • 减少了堆内对象存储的可能额外维护工作,所以访问效率可能有所提高

Direct Buffer 创建和销毁过程中,都会比一般的堆内 Buffer 增加部分开销,所以通常都建议用于长期使用、数据较大的场景。

可以使用JVM参数设定直接内存限制

-XX:MaxDirectMemorySize=512M

大多数垃圾收集过程中,都不会主动收集 Direct Buffer,它的垃圾收集过程,就是基于 Cleaner(一个内部实现)和幻象引用(PhantomReference)机制,其本身不是 public 类型,内部实现了一个 Deallocator 负责销毁的逻辑。对它的销毁往往要拖到full GC的时候,所以使用不当很容易导致OutOfMemoryError

Direct Buffer 回收方式:

  • 在应用程序中,显式地调用System.gc()来强制触发。
  • 另外一种思路是,在大量使用 Direct Buffer 的部分框架中,框架会自己在程序中调用释放方法(Netty 就是这么做的,有兴趣可以参考其实现PlatformDependent0)
  • 重复使用 Direct Buffer

NIO

Java NIO(New I/O)是Java提供的一套用于高效处理I/O操作的API,引入自JDK 1.4版本。相对于传统的Java I/O(IO流)API,Java NIO提供了更灵活、更高效的非阻塞I/O操作方式,适用于构建高性能的网络应用程序。

Java NIO的核心概念包括以下几个部分:

  • 通道(Channel):通道是数据源和数据目标之间的连接,可以通过通道读取和写入数据。通道可以是双向的,可以从通道中读取数据,也可以向通道中写入数据
  • 缓冲区(Buffer):缓冲区是一个固定大小的数据容器,用于存储读取和写入的数据。通过缓冲区可以更高效地读写数据,避免频繁的数据拷贝操作。缓冲区可以读取和写入不同类型的数据,如字节、字符、整数等
  • 选择器(Selector):选择器是用于多路复用非阻塞I/O操作的组件。可以通过选择器同时管理多个通道,使得单线程可以处理多个通道的I/O操作,提高系统的性能和吞吐量

NIO提供了一种将文件映射到内存的方式,这种内存映射文件将文件的内容直接映射到堆外内存中。这种方式在处理大型文件时可以提供更高的性能和效率

JNI

使用JNI(Java Native Interface)可以在Java程序中通过调用本地代码来使用JVM堆外内存。JNI提供了一种机制,使得Java程序可以与本地代码进行交互,调用本地代码中的函数和访问本地内存

通过JNI,Java程序可以直接访问和操作本地内存,例如在C或C++中使用malloc()free()函数进行内存分配和释放

JNI操作JVM堆外内存具体步骤
  1. 定义本地方法:在Java类中声明本地方法,使用native关键字标记。
public class NativeMemoryExample {public native void allocateMemory(int size);public native void freeMemory();
}
  1. 生成本地方法的头文件:使用Java的javac命令编译Java源文件,然后使用javah命令生成本地方法的头文件。
javac NativeMemoryExample.java
javah NativeMemoryExample

这将生成名为NativeMemoryExample.h的头文件

  1. 实现本地方法:在本地代码中实现Java类中声明的本地方法。在本地方法中可以使用C/C++等编程语言来操作堆外内存
#include "NativeMemoryExample.h"
#include <stdlib.h>JNIEXPORT void JNICALL Java_NativeMemoryExample_allocateMemory(JNIEnv *env, jobject obj, jint size) {void *buffer = malloc(size);// 使用buffer进行堆外内存操作
}JNIEXPORT void JNICALL Java_NativeMemoryExample_freeMemory(JNIEnv *env, jobject obj) {// 释放之前分配的堆外内存free(buffer);
}
  1. 编译本地代码:使用C/C++编译器将本地代码编译为共享库(或动态链接库)
gcc -shared -fpic -o libNativeMemoryExample.so NativeMemoryExample.c
  1. 加载本地库:在Java程序中使用System.loadLibrary()方法加载本地库
public class Main {static {System.loadLibrary("NativeMemoryExample");}public static void main(String[] args) {NativeMemoryExample example = new NativeMemoryExample();example.allocateMemory(1024);  // 调用本地方法分配堆外内存// ...example.freeMemory();  // 调用本地方法释放堆外内存}
}

通过以上步骤,Java程序可以使用JNI调用本地方法,在本地代码中进行对JVM堆外内存的分配和释放操作。需要注意的是,在使用JNI时应谨慎管理内存,避免内存泄漏和溢出,确保正确地释放分配的堆外内存


参考资料:

  1. Java Native Interface
  2. Direct Buffer
  3. Native Memory Tracking
http://www.ds6.com.cn/news/109826.html

相关文章:

  • 苏州吴中区专业做网站沈阳百度推广优化
  • 南宁微网站制作汽车网络营销的方式有哪些
  • 页面设计要怎么做徐州seo排名公司
  • 郑州手机网站建设多少钱短视频推广策略
  • 电商网站建设系统优化设计答案大全英语
  • 深圳seo整站优化承接网站设计规划
  • wordpress能放视频播放器seo关键词排名
  • 做网站公司哪个好在线网站排名工具
  • 深圳微信分销网站建设关键词优化外包
  • 深圳手机报价网站成品网站建站空间
  • 网站的pr天津seo网络营销
  • ui设计较好的网站优化营商环境存在问题及整改措施
  • 如何隐藏网站统计seo排名优化工具推荐
  • 动态网站开发基础教程北京seo经理
  • 佛山外贸网站制作百度智能云建站
  • 怀化本地网站如何做网站 新手 个人 教程
  • 北京 做网站比较有名的免费拓客软件
  • 手机输入网址怎么输入seo培训教程
  • 如何把网站的文字编辑安装百度到桌面
  • 如何做一个网站的seogoogle网站推广
  • 网站开发 验收模板排名优化培训
  • 做网站的哪家比较好引擎搜索对人类记忆的影响
  • 网站建设时时彩江苏seo外包
  • 网站 美化自动app优化下载
  • 房产网怎么查到房产专业黑帽seo
  • 整个网站都在下雪特效怎么做企业管理培训课程视频
  • 宁远县建设局网站东莞疫情最新消息今天新增
  • 做网站虚拟主机哪里有旅游seo整站优化
  • php可以做移动端网站seo外包优化
  • 做网站需注意什么中国今天刚刚发生的新闻