【缓冲区】数据库备份的衍生问题,缓冲区在哪里?JVMor操作系统?(二)
【缓冲区】数据库备份的衍生问题,缓冲区在哪里?JVMor操作系统?(二 完结)
缓冲区既属于操作系统,也属于 JVM,具体取决于你讨论的是哪个层面的缓冲区。下面我会详细解释这两者的区别和联系。
1. 操作系统级别的缓冲区
当你通过 Java 启动一个外部进程(例如 osrexp)时,操作系统会为这个进程分配资源,包括输入、输出和错误流的缓冲区。这些缓冲区是由操作系统管理的。
特点:
- 位置:位于操作系统的内核空间。
- 大小:由操作系统决定,通常是几 KB 到几十 KB。
- 作用:临时存储外部进程的输出数据,直到这些数据被读取或丢弃。
- 可见性:对用户和应用程序是透明的,无法直接访问或修改。
示例:
当你运行以下代码时:
Process process = new ProcessBuilder("osrexp", "-u", "SYSDBA/szoscar55").start();
操作系统会为 osrexp 进程分配以下缓冲区:
- 标准输出流(stdout):存储命令的正常输出。
- 标准错误流(stderr):存储命令的错误信息。
这些缓冲区是操作系统级别的,Java 程序通过 Process.getInputStream() 和 Process.getErrorStream() 从这些缓冲区中读取数据。
2. JVM 级别的缓冲区
当你通过 Java 读取外部进程的输出流时,JVM 会使用自己的缓冲区来存储从操作系统缓冲区中读取的数据。
特点:
- 位置:位于 JVM 的堆内存中。
- 大小:由 JVM 决定,通常是几 KB。
- 作用:提高读取效率,减少频繁的系统调用。
- 可见性:可以通过 Java 代码间接操作(例如使用
BufferedReader)。
示例:
当你使用以下代码读取外部进程的输出时:
try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {String line;while ((line = reader.readLine()) != null) {System.out.println(line);}
}
BufferedReader是 JVM 提供的一个缓冲读取器,它会从操作系统的缓冲区中读取数据,并存储在自己的缓冲区中。BufferedReader的默认缓冲区大小是 8192 字节(8 KB)。
3. 两者的关系
- 操作系统缓冲区:是外部进程输出数据的第一个存储位置。
- JVM 缓冲区:是 Java 程序从操作系统缓冲区中读取数据时的第二个存储位置。
数据流动过程:
- 外部进程(例如
osrexp)将输出数据写入操作系统的缓冲区。 - Java 程序通过
Process.getInputStream()从操作系统的缓冲区中读取数据。 - 读取的数据会被存储到 JVM 的缓冲区中(例如
BufferedReader的缓冲区)。 - Java 程序从 JVM 的缓冲区中获取数据并处理。
4. 如何验证缓冲区的存在?
验证操作系统缓冲区:
- 如果你不读取外部进程的输出流,操作系统的缓冲区会逐渐被填满,最终导致外部进程卡住。这是操作系统缓冲区存在的间接证据。
验证 JVM 缓冲区:
- 如果你使用
BufferedReader,可以通过调整缓冲区大小来观察性能变化。例如:
// 设置 BufferedReader 的缓冲区大小为 16 KB
try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()), 16384)) {String line;while ((line = reader.readLine()) != null) {System.out.println(line);}
}
- 通过调整缓冲区大小,你可以观察到读取效率的变化,这是 JVM 缓冲区存在的间接证据。
5. 总结
- 操作系统缓冲区:由操作系统管理,用于存储外部进程的输出数据。
- JVM 缓冲区:由 JVM 管理,用于提高读取外部进程输出数据的效率。
- 两者的关系:数据从操作系统缓冲区流向 JVM 缓冲区,最终被 Java 程序处理。
相关文章:
【缓冲区】数据库备份的衍生问题,缓冲区在哪里?JVMor操作系统?(二)
【缓冲区】数据库备份的衍生问题,缓冲区在哪里?JVMor操作系统?(二 完结) 缓冲区既属于操作系统,也属于 JVM,具体取决于你讨论的是哪个层面的缓冲区。下面我会详细解释这两者的区别和联系。 1. …...
如何免费使用稳定的deepseek
0、背景: 在AI辅助工作中,除了使用cursor做编程外,使用deepseek R1进行问题分析、数据分析、代码分析效果非常好。现在我经常会去拿行业信息、遇到的问题等去咨询R1,也给了自己不少启示。但是由于官网稳定性很差,很多…...
钉钉小程序(企业内部应用)开发--钉钉小程序web-view嵌套H5与小程序之间的通信(H5跳转钉钉小程序小程序postMessage)
钉钉小程序代码:嵌套H5 pages/login/index.axml <web-view src"{{urlH5}}" onMessage"test"></web-view> H5向小程序发送信息: H5代码: 通过以下代码我一直报错dd没有被定义 if (navigator.userAgent.to…...
超级免费/牛的图片格式转换工具jpg/jpeg/png
选择多次图片文件,并在所有图片选择完后进行批量转换。这种需求可以通过tkinter来实现,它是Python的标准GUI库,能够提供一个简洁的界面来选择文件和执行操作。您的代码要是网络运行不流畅可以试试它 下面是一个简单的GUI程序&a…...
毛泽东思想“活的灵魂”
关于毛泽东思想“活的灵魂”的构成及其内涵,综合历史文献与权威表述,核心内容整理如下: 一、毛泽东思想活的灵魂的权威定义 根据十一届六中全会《关于建国以来党的若干历史问题的决议》(1981年),毛泽东思想…...
RabbitMQ系列(三)基本概念之Consumer
在 RabbitMQ 中,Consumer(消费者) 是负责从队列(Queue)中获取并处理消息的客户端角色,其核心机制与功能如下: 一、Consumer 的定义与核心作用 消息处理终端 Consumer 通过订阅或拉取队列中的消…...
天梯L2-003 月饼
L2-003 月饼 - 团体程序设计天梯赛-练习集 def slove():n,m map(float,input().split())z list(map(float,input().split()))y list(map(float,input().split()))n int(n)d []for i in range(n):d.append([z[i],y[i]])d.sort(key lambda x:x[1]/x[0],reverse True)cnt…...
使用DeepSeek/ChatGPT等AI工具辅助编写wireshark过滤器
随着deepseek,chatgpt等大模型的能力越来越强大,本文将介绍借助deepseek,chatgpt等大模型工具,通过编写提示词,辅助生成全面的Wireshark显示过滤器的能力。 每一种协议的字段众多,流量分析的需求多种多样,…...
常用的AI文本大语言模型汇总
AI文本【大语言模型】 1、文心一言https://yiyan.baidu.com/ 2、海螺问问https://hailuoai.com/ 3、通义千问https://tongyi.aliyun.com/qianwen/ 4、KimiChat https://kimi.moonshot.cn/ 5、ChatGPThttps://chatgpt.com/ 6、魔塔GPT https://www.modelscope.cn/studios/iic…...
《深度剖析:特征工程—机器学习的隐秘基石》
在机器学习的宏大版图中,特征工程宛如一座隐藏在幕后却又至关重要的基石。它默默发挥着作用,将原始数据雕琢成模型能够有效学习和理解的形态,深刻影响着机器学习模型的性能与表现。 特征工程:机器学习的关键前奏 特征工程是运用…...
解决npm run dev报错
解决:Node.js 版本更新后与 OpenSSL 不兼容导致的npm报错“Error: error:0308010C:digital envelope routines::unsupported” 方法一:更改系统环境变量方法二:更改项目环境变量方法三:更换 Node.js 版本方法四:升级依…...
教你通过腾讯云AI代码助手,免费使用满血版deepseek r1,还可以自定义知识库!
大家好,今天教大家如何通过腾讯云AI代码助手,免费使用全世界最牛逼的deepseek大模型的deepseek r1满血版! 1. 环境准备 提前下载好下面任意的一款编程使用的代码编辑器 Visual Studio CodeJetBrains IDEsVisual Studio微信开发者工具 2. 下载安装 打…...
【C++/数据结构】栈的模拟实现
零.导言 栈是一种数据结构,在后续的学习中可能经常使用,因此我们今天就来学习如何实现栈,以更好地使用它。 一.栈的模拟实现 栈的形式如下: #include<iostream> #include<cassert>using namespace std;typedef int S…...
StarRocks 开发环境搭建踩坑指北之存算分离篇
前段时间碰到一个 StarRocks 物化视图的 bug: https://github.com/StarRocks/starrocks/issues/55301 但是这个问题只能在存算分离的场景下才能复现,为了找到问题原因我便尝试在本地搭建一个可以 Debug 的存算分离版本。 之前也分享过在本地 Debug StarRocks&#x…...
C++ Qt常见面试题(2):QT中的文件流(QTextStream)和数据流(QDataStream)的区别
在 Qt 中,QTextStream 和 QDataStream 是两种常用的流类,用于通过文件或其他 I/O 设备(如网络、内存)读写数据。虽然它们都可以用来操作数据,但它们的设计目标和使用场景不同。以下是它们的主要区别和适用场景的详细说明: 1. QTextStream:文本流 QTextStream 是一种专门…...
Linux驱动学习(三)--字符设备架构与注册
1.内核如何维护设备号的? chrdevs指针数组 在内核中有一个重要的全局变量:chrdevs指针数组,位于char_dev.c文件中 chrdevs指针数组的每一个成员指向一个char_device_struct结构体,该结构体中,最重要的变量是cdev指针…...
软件工程应试复习(考试折磨版)
针对学校软件工程考试,参考教材《软件工程导论(第6版)》1-8章 学习的艺术:不断地尝试,我一定会找到高效用的方法,让学习变成一门艺术,从应试备考中解救出我的时间同胞们。 好嘞!既然…...
【JAVAEE】多线程
【JAVAEE】多线程 一、进程1.1 进程的定义1.2 进程和线程的联系 二、线程2.1 JConsole工具2.2 创建线程2.2.1 Thread类,start(),run()2.2.2 继承Thread类2.2.3 实现Runnable接口2.2.4 匿名内部类2.2.5 使用…...
5.10 P-Tuning v2:多层级提示编码的微调革新
P-Tuning v2:多层级提示编码的微调革新 一、技术架构解析 #mermaid-svg-4Wy6vkXZi67hY9PZ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-4Wy6vkXZi67hY9PZ .error-icon{fill:#552222;}#mermaid-svg-4Wy6vkXZi67h…...
LLM中的Benchmark是什么
LLM中的Benchmark是什么 “DeepSeek推动价值重估Benchmark” DeepSeek这家公司或其相关技术的发展,促使Benchmark这家机构对相关资产或企业的价值进行重新评估。“Benchmark”在这里是一家研究机构或金融分析机构。 “Benchmark”常见的意思是“基准;水准点,基准点”,作…...
突破付费墙限制:从技术原理到个性化解决方案的完整指南
突破付费墙限制:从技术原理到个性化解决方案的完整指南 当你在研究某个专业领域的前沿动态时,是否曾因遇到"订阅后阅读全文"的提示而被迫中断探索?在信息获取成本日益增加的今天,如何合法合规地突破内容访问限制&#x…...
Element UI 日期选择器扩展:如何实现年份范围选择(附完整代码)
Element UI 日期选择器扩展:实现年份范围选择的高级方案 在数据分析和报表系统中,年份范围选择是一个常见但容易被忽视的功能需求。Element UI作为Vue生态中最受欢迎的UI组件库之一,其日期选择器虽然功能强大,却缺少原生的年份范围…...
RecursiveCharacterTextSplitter类解读
基于 LangChain 当前官方文档与官方源码/参考入口,RecursiveCharacterTextSplitter 可以这样理解: 文章目录1) 切分原理2) 关键参数3) 方法接口4) 适用边界5) 中文场景优化6)核心类方法的使用1. split_text(text: str) -> list[str]2. cre…...
别再给 Token 续费了:你的 Agent 架构才是最大的“吞金兽”
在 LLM 应用开发的圈子里,有一种心照不宣的焦虑:看着 Claude 或 Codex 的账单,那种心脏骤停的感觉。每当有开发者在 Twitter 上抱怨“三天烧光月度额度”时,评论区的建议往往乏善可陈——要么换个更便宜的模型,要么就咬…...
FairyGUI与Unity坐标转换实战:从屏幕到世界的完整指南
1. FairyGUI与Unity坐标系统差异解析 第一次用FairyGUI做Unity项目时,我被一个诡异的bug折磨了整整两天——明明按钮显示在屏幕中央,点击却总是对不准位置。后来才发现,这全是坐标系差异惹的祸。FairyGUI和Unity虽然都在处理屏幕上的UI元素&a…...
Janus-Pro-7B部署案例:NVIDIA T4显卡上稳定运行的7B多模态方案
Janus-Pro-7B部署案例:NVIDIA T4显卡上稳定运行的7B多模态方案 1. 多模态AI的新选择:Janus-Pro-7B 在AI技术快速发展的今天,多模态模型正成为新的热点。传统的AI模型往往只能处理单一类型的数据,要么是文字,要么是图…...
如何快速解决Windows热键冲突:Hotkey Detective终极使用指南
如何快速解决Windows热键冲突:Hotkey Detective终极使用指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你…...
AI 时代:祛魅、适应与重新定义德
指令替换 项目需求:将加法指令替换为减法 项目目录如下 /MyProject ├── CMakeLists.txt # CMake 配置文件 ├── build/ #构建目录 │ └── test.c #测试编译代码 └── mypass2.cpp # pass 项目代码 一,测试代码示例 test.c // test.c #includ…...
AIGlasses_for_navigation性能调优实战:剖析操作系统级资源监控
AIGlasses_for_navigation性能调优实战:剖析操作系统级资源监控 你是不是也遇到过这种情况?好不容易把AIGlasses_for_navigation模型部署起来了,跑起来却总觉得有点“卡”,要么是响应慢半拍,要么是处理复杂场景时感觉…...
从轮子直径到PID调参:编码器测速数据如何精准换算成实际速度(附单位换算避坑指南)
从脉冲到速度:编码器测速全流程实战指南 当你的机器人或智能车项目需要精确控制移动速度时,编码器测速的准确性直接决定了闭环控制的效果。但很多开发者都会遇到这样的困惑:为什么编码器读数看起来很大,但实际速度却与预期不符&am…...
