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

JVM(HotSpot):直接内存及其使用建议

文章目录

  • 一、什么是直接内存?
  • 二、特点
  • 三、使用案例
  • 四、直接内存的管理

一、什么是直接内存?

Direct Memory:系统内存

普通IO,运行原理图
磁盘到系统内存,系统内存到jvm内存。
在这里插入图片描述
NIO,运行原理图
划分了一块区域,JVM和系统共享的内存区间,这样,就减少了一次IO操作。
在这里插入图片描述

二、特点

常见于 NIO 操作时,用于数据缓冲区
分配回收成本较高,但读写性能高
不受 JVM 内存回收管理

所以,我们可以在IO程序中,使用直接内存来优化程序的读写性能。

三、使用案例

关键代码:ByteBuffer.allocateDirect(_1Mb);

public class Demo1_9 {static final String FROM = "E:\\sbPSjI4tt10.mp4";static final String TO = "E:\\a.mp4";static final int _1Mb = 1024 * 1024;public static void main(String[] args) {io(); // io 用时:1535.586957 1766.963399 1359.240226directBuffer(); // directBuffer 用时:479.295165 702.291454 562.56592}private static void directBuffer() {long start = System.nanoTime();try (FileChannel from = new FileInputStream(FROM).getChannel();FileChannel to = new FileOutputStream(TO).getChannel();) {ByteBuffer bb = ByteBuffer.allocateDirect(_1Mb);while (true) {int len = from.read(bb);if (len == -1) {break;}bb.flip();to.write(bb);bb.clear();}} catch (IOException e) {e.printStackTrace();}long end = System.nanoTime();System.out.println("directBuffer 用时:" + (end - start) / 1000_000.0);}private static void io() {long start = System.nanoTime();try (FileInputStream from = new FileInputStream(FROM);FileOutputStream to = new FileOutputStream(TO);) {byte[] buf = new byte[_1Mb];while (true) {int len = from.read(buf);if (len == -1) {break;}to.write(buf, 0, len);}} catch (IOException e) {e.printStackTrace();}long end = System.nanoTime();System.out.println("io 用时:" + (end - start) / 1000_000.0);}
}

但是,直接内存,是不受JVM管理的
另外,我们显示调用gcJVM也不是立马就执行gc

而且,一般我们会在项目中禁用显示调用gc,因为,Full GC影响性能。
禁用参数:-XX:+DisableExplicitGC

四、直接内存的管理

底层是如何回收直接内存的?

  • 使用了 Unsafe 对象完成直接内存的分配回收,并且回收需要主动调用 freeMemory 方法
  • ByteBuffer 的实现类内部,使用了 Cleaner (虚引用)来监测 ByteBuffer 对象,一旦
    ByteBuffer 对象被垃圾回收,那么就会由 ReferenceHandler 线程通过 Cleanerclean 方法调
    freeMemory 来释放直接内存
    在这里插入图片描述
    我们知道,不建议程序员显示调用gc,来回收JVM对象。
    但是,等待JVM自主的Full GC,又是不确定的。
    所以,还是,建议我们自己手动回收直接内存。
public class Demo1_27 {static int _1Gb = 1024 * 1024 * 1024;public static void main(String[] args) throws IOException {Unsafe unsafe = getUnsafe();// 分配内存long base = unsafe.allocateMemory(_1Gb);unsafe.setMemory(base, _1Gb, (byte) 0);System.in.read();// 释放内存unsafe.freeMemory(base);System.in.read();}public static Unsafe getUnsafe() {try {Field f = Unsafe.class.getDeclaredField("theUnsafe");f.setAccessible(true);Unsafe unsafe = (Unsafe) f.get(null);return unsafe;} catch (NoSuchFieldException | IllegalAccessException e) {throw new RuntimeException(e);}}
}

相关文章:

JVM(HotSpot):直接内存及其使用建议

文章目录 一、什么是直接内存?二、特点三、使用案例四、直接内存的管理 一、什么是直接内存? Direct Memory:系统内存 普通IO,运行原理图 磁盘到系统内存,系统内存到jvm内存。 NIO,运行原理图 划分了一块…...

centos7安装mysql5.7

1. 更新系统软件包 首先,确保您的系统是最新的。打开终端并运行: sudo yum update -y 2. 安装MySQL 5.7的YUM仓库 MySQL提供了自己的YUM仓库,您可以通过下载并安装官方提供的RPM包来添加这个仓库。 wget https://dev.mysql.com/get/mysql57-c…...

如何在JVS逻辑引擎中巧妙运用包含查询功能?

在实际业务场景中,数据查询是不可或缺的一环,包含查询在实际业务场景中经常用到,被广泛应用于各类业务系统中。当我们需要查询状态为指定几种状态的数据时,类似SQL语句中的IN查询就显得尤为重要。为了满足这一需求,在J…...

Spring Boot视频网站:安全与可扩展性设计

4 系统设计 4.1系统概要设计 视频网站系统并没有使用C/S结构,而是基于网络浏览器的方式去访问服务器,进而获取需要的数据信息,这种依靠浏览器进行数据访问的模式就是现在用得比较广泛的适用于广域网并且没有网速限制要求的B/S结构&#xff0c…...

深入理解 Flutter 鸿蒙版的 Stack 布局:适配屏幕与层叠样式布局

目录 写在前面 什么是 Stack 布局? Stack 的基本用法 Stack 布局的核心概念 屏幕适配与 Stack 布局 使用 MediaQuery 获取屏幕尺寸 使用 LayoutBuilder 进行自适应布局 高级层叠样式布局示例 1. 照片展示与文字描述 2. 动态调整层叠布局 写在最后 写在前…...

JavaScript中Number相关特性

目录 非 VIP 用户可前往公众号“前端基地”进行免费阅读 数值范围 小数注意问题 NaN isNaN()判断是不是NaN JavaScript可以表示的进制 数值扩展 非 VIP 用户可前往公众号“前端基地”进行免费阅读 数值范围 数字类型主要涵盖整数与小数。在数值范围方面,存在特…...

Redis中String类型数据扩容原理分析

大家好,我是 V 哥。在 Java 中,我们有动态数组ArrayList,当插入新元素空间不足时,会进行扩容,好奇 Redis 中的 String 类型,C 语言又是怎样的实现策略,带着疑问,咱们来了解一下。 最…...

智能码二维码zhinengma.cn在供应链管理中有哪些优势?

智能码二维码在供应链管理中具有以下优势: 一、提高信息透明度 通过为每个产品或包装分配唯一的二维码,可以实现供应链各环节信息的实时共享。这有助于提高供应链的信息透明度,让各方都能及时了解产品的状态和位置。 二、加强追溯能力 智…...

代理商培训新策略:利用内部知识库提升培训效果

在当今竞争激烈的市场环境中,代理商作为企业与终端消费者之间的桥梁,其专业能力和服务质量直接影响着企业的市场表现和品牌形象。因此,对代理商进行系统而高效的培训,提升其业务技能和服务水平,成为企业不可忽视的重要…...

Redis 哨兵模式下DB库操作审计

Redis Sentinel集群环境 主机版本模式NodeSentinelredis-sentinel-node-06.2.12哨兵MasterYesredis-sentinel-node-16.2.12哨兵SlaveYesredis-sentinel-node-26.2.12哨兵SlaveYes 架构设计 命令行&程序验证 1、在redis-sentinel-node-1上使用redis-cli 连接redis-sentine…...

latex公式输入-矩阵

矩阵输入: 例1 \begin{bmatrix}1& 4&3 &5 \\\frac{1}{4} &1& \frac{1}{2}& 2\\\frac{1}{3}&2&1& \frac{5}{3} \\\frac{1}{5}& \frac{1}{2}& \frac{3}{5}&1 \end{bmatrix} 运行结果: 例2 \begin{bm…...

NSSCTF-WEB-easy_eval

目录 前言 正文 思路 序列化构造 后渗透 思路点1:Redis 思路2:蚁剑插件绕过disable_functinons 结尾 作者的其他文章 前言 说是easy,实际很difficult 正文 思路 <?php class A{public $code "";function __call($method,$args){//最后执行命令eval($th…...

交通目标识别数据集YOLO 模型 ui界面✓图片数量15000,xml和txt标签都有 11类 交通道路车辆行人红黄绿数据集 红绿灯数据集 交通信号数据集

YOLO交通目标识别 数据集 模型 ui界面 ✓图片数量15000&#xff0c;xml和txt标签都有&#xff1b; ✓class&#xff1a;biker&#xff0c;car&#xff0c;pedestrian&#xff0c;trafficLight&#xff0c;trafficLight-Green&#xff0c;trafficLight-GreenLeft&#xff0c; tr…...

买卖股票的最佳时机 题解

买卖股票的最佳时机 问题描述 给定一个数组 prices&#xff0c;其中 prices[i] 表示第 i 天的股票价格。你只能选择某一天买入股票&#xff0c;并选择未来的某一天卖出股票&#xff0c;设计一个算法来计算你所能获取的最大利润。 限制条件&#xff1a; 只能进行一次交易&…...

微信小程序路由跳转的区别及其常见的使用场景

在微信小程序中&#xff0c;页面路由跳转的实现有几种常用方式&#xff0c;不同的跳转方式适用于不同的使用场景。下面是几种跳转方法的区别及其在实际项目中的应用场景。 1. wx.navigateTo 简介&#xff1a;保留当前页面并跳转到指定页面&#xff0c;最多保留10个页面的历史记…...

麒麟桌面版v10 SP1以docker方式安装达梦数据库

安装docker 0.切换root用户&#xff08;可以不切换&#xff0c;但要注意权限问题&#xff0c;我是用root&#xff09; ymym-pc:~/桌面$ whoami ym ymym-pc:~/桌面$ sudo -i rootym-pc:~# whoami root rootym-pc:~# 1.查看系统版本 [rootlocalhost opt]# cat /etc/os-release…...

KNN的 k 设置的过大会有什么问题

在KNN&#xff08;K-Nearest Neighbors&#xff09;算法中&#xff0c;K值的选择对模型的性能和预测结果有着重要影响。如果K值设置得过大&#xff0c;可能会出现以下问题&#xff1a; 欠拟合&#xff1a;当K值过大时&#xff0c;模型会考虑过多的邻近点实例&#xff0c;甚至会…...

Star Tower:智能合约的安全基石与未来引领者

在区块链技术的快速发展中&#xff0c;智能合约作为新兴的应用形式&#xff0c;正逐渐成为区块链领域的重要组成部分。然而&#xff0c;智能合约的可靠性问题一直是用户最为关心的焦点之一。为此&#xff0c;Star Tower以其强大的技术实力和全面的安全保障措施&#xff0c;为智…...

2024-NewStarCTF-WEEK1

web headach3 提示head&#xff0c;抓包查看响应头&#xff0c;得到flag flag值&#xff1a;flag{You_Ar3_R3Ally_A_9ooD_d0ctor} 会赢吗 第一段&#xff1a;源码里找到第一段flag&#xff0c;ZmxhZ3tXQTB3 第二段&#xff1a;分析可知需要在控制台调用revealFlag函数向服务…...

大数据面试题整理——Zookeeper

系列文章目录 大数据面试题专栏点击进入 文章目录 系列文章目录大数据面试题专栏点击进入 1. 什么是 Zookeeper&#xff1f;2. Zookeeper 的特点有哪些&#xff1f;3. Zookeeper 的数据模型是怎样的&#xff1f;4. Zookeeper 的工作流程是怎样的&#xff1f;5. Zookeeper 如何…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...