当前位置: 首页 > 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 如何…...

Jessibuca播放器在低代码平台中的集成实践:5分钟为你的应用添加实时视频能力

Jessibuca播放器在低代码平台中的集成实践&#xff1a;5分钟为你的应用添加实时视频能力 当企业需要快速构建内部管理系统或行业解决方案时&#xff0c;低代码平台正成为提升开发效率的利器。而视频能力作为现代应用的基础需求&#xff0c;如何在不编写复杂代码的情况下实现专业…...

别再手动合并代码了!用Docker Compose 5分钟搞定Gitea私有Git服务器(附PostgreSQL配置)

5分钟极速搭建Gitea私有Git服务&#xff1a;Docker Compose与PostgreSQL黄金组合 还在用网盘同步代码&#xff1f;或是把项目文件夹压缩后通过聊天软件传来传去&#xff1f;作为经历过这些"原始管理方式"的开发者&#xff0c;我完全理解手动合并冲突时的崩溃感——上…...

三大AI-IDE实战:如何用OneCode注解快速生成电商后台管理系统(附避坑指南)

三大AI-IDE实战&#xff1a;如何用OneCode注解快速生成电商后台管理系统&#xff08;附避坑指南&#xff09; 电商后台管理系统作为企业数字化转型的核心枢纽&#xff0c;其开发效率直接影响业务迭代速度。传统开发模式下&#xff0c;表单、列表、权限等模块的重复编码消耗了团…...

游戏外挂开发实战:用C#和Cheat Engine读取内存实现自动补血(附完整代码)

游戏内存数据解析与自动化操作的技术实现 在数字娱乐领域&#xff0c;游戏开发与逆向工程一直是两个相互促进的技术方向。了解游戏内部数据结构和运行机制&#xff0c;不仅有助于开发者优化产品&#xff0c;也能帮助技术爱好者深入理解计算机系统的工作原理。本文将探讨一种通过…...

【PAT甲级真题】- Shopping in Mars (25)

题目来源 Shopping in Mars (25) 题目描述点击链接自行查看 注意点&#xff1a; 输出时按照区间左端点从小到大输出 思路简介 简单的滑动窗口 我做了一个小处理 因为题目实际上要求找的是大于等于目标值的区间 所以移动左指针的条件写成 l>r&&sum>m 这样我认…...

MATLAB计时函数全解析:从tic/toc到cputime,新手到高手必知的效率工具箱

MATLAB计时函数全解析&#xff1a;从tic/toc到cputime&#xff0c;新手到高手必知的效率工具箱 在数据科学与工程领域&#xff0c;代码执行效率直接影响研究进度与项目成败。想象这样一个场景&#xff1a;你的仿真模型运行了8小时后突然崩溃&#xff0c;却无法定位性能瓶颈&am…...

别再死记硬背了!用‘抽奖游戏’和‘股票涨跌’轻松搞懂马尔可夫链的几种变体

用生活故事解锁马尔可夫链的三种高级玩法 想象你正站在商场抽奖转盘前&#xff0c;每次转动都可能改变你的命运——这像极了马尔可夫链中状态的随机跃迁。但真实世界远比简单转盘复杂&#xff1a;朋友的喜怒无常像隐藏在表情背后的秘密&#xff08;隐马尔可夫模型&#xff09;…...

从GDF到特征矩阵:基于MNE的BCI Competition IV 2a运动想象数据全流程预处理指南

1. 从GDF到特征矩阵&#xff1a;BCI数据预处理的完整路线图 当你第一次拿到BCI Competition IV 2a数据集时&#xff0c;面对GDF格式的原始EEG数据可能会感到无从下手。这套数据记录了9名受试者在执行四类运动想象任务&#xff08;左手、右手、双脚、舌头&#xff09;时的脑电活…...

VibeVoice语音合成效果展示:印度英语in-Samuel_man技术讲座样例

VibeVoice语音合成效果展示&#xff1a;印度英语in-Samuel_man技术讲座样例 1. 真实语音合成效果体验 今天我要带大家体验一个让人惊艳的语音合成技术——VibeVoice实时语音合成系统。这不是普通的文字转语音工具&#xff0c;而是一个能够生成极其自然、富有表现力的人工智能…...

终极CoreUI Bootstrap管理模板:5个导航组件实战技巧提升用户体验

终极CoreUI Bootstrap管理模板&#xff1a;5个导航组件实战技巧提升用户体验 【免费下载链接】coreui-free-bootstrap-admin-template coreui/coreui-free-bootstrap-admin-template: CoreUI-Free-Bootstrap-Admin-Template 是一套免费的Bootstrap 4/5管理模板&#xff0c;包含…...