jmap使用
常用命令
jmap -heap PID
jmap -histo PID | head -20
jmap -dump:format=b,file=heap_dump.hprof PID
jmap
是 Java 开发工具包(JDK)提供的一个命令行工具,用于生成 Java 进程的内存映射信息。它可以帮助开发者分析 Java 堆内存的使用情况、生成堆转储文件(Heap Dump),以及查看类的内存分布等。
1. jmap 的作用
-
生成堆转储文件:将 Java 堆内存的快照保存到文件中,用于后续分析。
-
查看堆内存摘要:显示堆内存的使用情况,如对象数量、占用空间等。
-
查看类加载器信息:显示类加载器的统计信息。
-
查看永久代(PermGen)或元空间(Metaspace)信息:显示永久代或元空间的使用情况。
2. jmap 的使用方法
2.1 基本语法
bash
复制
jmap [options] <pid>
-
<pid>
:Java 进程的进程 ID。 -
[options]
:可选参数,用于控制输出内容或生成堆转储文件。
2.2 常用选项
-
-heap
:显示堆内存的摘要信息。 -
-histo
:显示堆内存中对象的直方图(按类和占用空间排序)。 -
-dump
:生成堆转储文件(Heap Dump)。 -
-finalizerinfo
:显示等待终结的对象信息。 -
-clstats
:显示类加载器的统计信息。 -
-F
:强制生成堆转储文件(适用于进程无响应的情况)。
3. 使用示例
3.1 获取 Java 进程的 PID
在生成堆转储文件之前,需要先获取 Java 进程的 PID。可以使用以下命令:
bash
复制
jps -l
输出示例:
复制
12345 com.example.Main 67890 sun.tools.jps.Jps
-
12345
是目标 Java 进程的 PID。
3.2 生成堆内存摘要
使用 -heap
选项显示堆内存的摘要信息:
bash
复制
jmap -heap 12345
输出示例:
复制
Attaching to process ID 12345, please wait... Debugger attached successfully. Server compiler detected. JVM version is 11.0.12+7using thread-local object allocation. Parallel GC with 4 thread(s)Heap Configuration:MinHeapFreeRatio = 40MaxHeapFreeRatio = 70MaxHeapSize = 1048576000 (1000.0MB)NewSize = 34865152 (33.25MB)MaxNewSize = 174587904 (166.5MB)OldSize = 699400192 (667.0MB)NewRatio = 2SurvivorRatio = 8MetaspaceSize = 21807104 (20.796875MB)CompressedClassSpaceSize = 1073741824 (1024.0MB)MaxMetaspaceSize = 17592186044415 MBG1HeapRegionSize = 0 (0.0MB)Heap Usage: PS Young Generation Eden Space:capacity = 268435456 (256.0MB)used = 268435456 (256.0MB)free = 0 (0.0MB)100.0% used From Space:capacity = 268435456 (256.0MB)used = 268435456 (256.0MB)free = 0 (0.0MB)100.0% used To Space:capacity = 268435456 (256.0MB)used = 0 (0.0MB)free = 268435456 (256.0MB)0.0% used PS Old Generationcapacity = 699400192 (667.0MB)used = 699400192 (667.0MB)free = 0 (0.0MB)100.0% used
3.3 生成对象直方图
使用 -histo
选项显示堆内存中对象的直方图:
bash
复制
jmap -histo 12345
输出示例:
复制
num #instances #bytes class name ----------------------------------------------1: 10000 10000000 java.lang.String2: 5000 5000000 java.util.HashMap$Node3: 2000 2000000 java.lang.Object
3.4 生成堆转储文件
使用 -dump
选项生成堆转储文件:
bash
复制
jmap -dump:format=b,file=heap_dump.hprof 12345
-
将堆转储文件保存为
heap_dump.hprof
。
3.5 强制生成堆转储文件
如果 Java 进程无响应,可以使用 -F
选项强制生成堆转储文件:
bash
复制
jmap -dump:format=b,file=heap_dump.hprof -F 12345
3.6 查看类加载器信息
使用 -clstats
选项显示类加载器的统计信息:
bash
复制
jmap -clstats 12345
4. 堆转储文件的分析
生成的堆转储文件(.hprof
)可以使用以下工具进行分析:
-
Eclipse MAT(Memory Analyzer Tool):功能强大的堆转储分析工具。
-
VisualVM:JDK 自带的图形化分析工具。
-
JProfiler:商业化的 Java 性能分析工具。
5. 使用场景
5.1 内存泄漏分析
-
通过堆转储文件分析对象的引用关系,找出内存泄漏的原因。
5.2 内存使用优化
-
查看堆内存中对象的分布,优化内存使用。
5.3 类加载器问题诊断
-
查看类加载器的统计信息,诊断类加载器相关的问题。
6. 总结
-
jmap
是 Java 开发者必备的诊断工具,用于生成堆转储文件和查看堆内存信息。 -
通过分析堆转储文件,可以诊断内存泄漏、优化内存使用等。
-
结合其他 JDK 工具(如
jps
、jstack
、jstat
),可以更全面地分析和调优 Java 应用程序。
通过掌握 jmap
的使用方法和堆转储文件的分析技巧,可以快速定位和解决 Java 应用程序的内存问题!
堆内存分析
根据你提供的 Heap Configuration(堆配置)信息,我们可以分析并解释各个参数的含义及其对 JVM 内存管理的影响。这里主要是关于堆内存、元空间和 G1 垃圾回收器的配置。
1. MinHeapFreeRatio = 40
- 含义:堆的最小空闲比例,表示堆的空闲内存比例不能低于该值,否则 JVM 会触发垃圾回收。值为
40
表示堆空闲内存的比例不能小于 40%。 - 影响:当堆的空闲空间低于此阈值时,JVM 会增加堆大小或进行垃圾回收来保证空闲空间不低于 40%。
2. MaxHeapFreeRatio = 70
- 含义:堆的最大空闲比例,表示堆的空闲内存比例不能超过该值。值为
70
表示堆空闲内存的比例不能超过 70%。 - 影响:如果堆的空闲空间超过此阈值,JVM 会缩小堆的大小,以优化内存使用。
3. MaxHeapSize = 1048576000 (1000.0MB)
- 含义:JVM 堆的最大大小,单位为字节。这里的
1048576000
字节等于 1000 MB。 - 影响:这是堆内存的上限,JVM 在运行过程中会尝试将堆的使用量控制在这个最大值之内。超出这个限制时,JVM 可能会触发垃圾回收或抛出
OutOfMemoryError
错误。
4. NewSize = 34865152 (33.25MB)
- 含义:年轻代(Young Generation)的初始大小。值为
34865152
字节,即 33.25MB。 - 影响:年轻代内存初始时分配为 33.25MB。这个值会影响到年轻代垃圾回收的频率和效率。较小的年轻代可能会导致更频繁的垃圾回收。
5. MaxNewSize = 174587904 (166.5MB)
- 含义:年轻代的最大大小。值为
174587904
字节,即 166.5MB。 - 影响:年轻代内存的最大容量为 166.5MB。超出这个大小后,JVM 会在年轻代内存达到最大值时进行垃圾回收。
6. OldSize = 699400192 (667.0MB)
- 含义:老年代(Old Generation)的初始大小。值为
699400192
字节,即 667MB。 - 影响:初始的老年代大小为 667MB。如果老年代空间满了,会触发 Full GC(完全垃圾回收)。
7. NewRatio = 2
- 含义:年轻代与老年代内存的大小比例。值为
2
表示年轻代的内存大小是老年代的 1/2。 - 影响:该配置影响了年轻代和老年代的内存比例。较大的
NewRatio
值意味着年轻代较小,反之则意味着年轻代较大。年轻代过小可能导致频繁的年轻代 GC。
8. SurvivorRatio = 8
- 含义:Survivor 区域之间的内存大小比例。表示每个 Survivor 区的大小是 Eden 区的 1/8。
- 影响:较小的 Survivor 区会导致对象较快地进入老年代,而较大的 Survivor 区则可能延迟对象进入老年代。合理的 Survivor 区大小有助于减少对象晋升到老年代的频率。
9. MetaspaceSize = 21807104 (20.8MB)
- 含义:元空间(Metaspace)的初始大小。值为
21807104
字节,即 20.8MB。 - 影响:元空间用于存放类元数据(类的结构信息)。JVM 会根据需要动态调整该空间的大小,但初始值为 20.8MB。
10. CompressedClassSpaceSize = 1073741824 (1024.0MB)
- 含义:Compressed Class Space 的大小,通常为 1GB(1024MB)。该空间用于存储类的压缩形式,提高内存效率。
- 影响:在启用了压缩类指针时,类的元数据会存放在该区域。较大的
CompressedClassSpaceSize
提高了对大规模类加载的支持。
11. MaxMetaspaceSize = 17592186044415 MB
- 含义:元空间的最大大小。值为
17592186044415
MB,几乎是无限大(这是一个非常大的数字,理论上表示没有限制)。 - 影响:这意味着元空间的最大大小几乎没有限制,JVM 可以根据需要动态扩展元空间,直到系统内存耗尽为止。
12. G1HeapRegionSize = 0 (0.0MB)
- 含义:G1 垃圾回收器的堆区域大小。值为
0
表示没有启用 G1 垃圾回收器。 - 影响:G1 回收器的堆区域大小设置为
0
,意味着该 JVM 配置并没有使用 G1 垃圾回收器(可能使用的是默认的垃圾回收策略,如 Parallel GC 或 CMS)。
总结:
- 堆内存管理:堆的最大大小为 1GB,其中年轻代和老年代的比例是 2:1,且年轻代的初始大小为 33.25MB,最大为 166.5MB。通过
MinHeapFreeRatio
和MaxHeapFreeRatio
来控制堆的空闲内存比例,保持合理的内存使用。 - 元空间:元空间的初始大小为 20.8MB,并且最大值几乎无限制,允许 JVM 动态扩展元空间以存储类元数据。
- 垃圾回收器:从配置来看,这个 JVM 可能没有启用 G1 垃圾回收器(
G1HeapRegionSize = 0
),而是可能使用其他垃圾回收策略。
这些配置影响了 JVM 的内存管理策略、垃圾回收频率以及程序的性能。合理的堆内存配置可以提高 JVM 应用程序的性能,减少垃圾回收的停顿时间。
相关文章:
jmap使用
常用命令 jmap -heap PID jmap -histo PID | head -20 jmap -dump:formatb,fileheap_dump.hprof PID jmap 是 Java 开发工具包(JDK)提供的一个命令行工具,用于生成 Java 进程的内存映射信息。它可以帮助开发者分析 Java 堆内存的使用情况…...
Android的MQTT客户端实现
在 Android 平台上实现 MQTT 客户端的完整技术方案,涵盖基础实现、安全连接、性能优化和最佳实践: 一、技术选型与依赖配置 推荐库 Eclipse Paho Android Service(官方维护,支持后台运行) gradle 复制 // build.gradl…...
Vue.js 如何自定义主题和样式
Vue.js 如何自定义主题和样式 今天我们来聊聊如何在 Vue 项目中自定义主题和样式。无论是你想让自己的应用看起来独一无二,还是想快速适配设计稿,自定义主题和样式都是必不可少的一环。下面我将和大家分享几种常见的自定义方法和技巧。 为什么要自定义…...
强化学习 DPO 算法:基于人类偏好,颠覆 PPO 传统策略
目录 一、引言二、强化学习基础回顾(一)策略(二)价值函数 三、近端策略优化(PPO)算法(一)算法原理(二)PPO 目标函数(三)代码示例&…...
线上HBase client返回超时异常分析 HBase callTimeout=60000
问题现象 HBase client直接返回超时异常 HBase callTimeout=60000, callDuration=60301: row ‘12649160863966c2790195059018040900010003320’ on table ‘Z_UPA’ at region=Z_UPA,1213d1a56,1184027415643. ba7224f83dbb09591a74b7059f17., hostname=abcd,60020,891863950…...
CTF中特别小的EXE是怎么生成的
我们在打CTF时候,出题的爷爷们给出的exe都很小 就10k左右,有的甚至就5k,那时候我很郁闷啊。现在我也能了啊哈哈 不多bb按如下操作: 我们来看看正常的release生成的代码# Copy #include "windows.h" int main(){ Messa…...
Python 字典(一个简单的字典)
在本章中,你将学习能够将相关信息关联起来的Python字典。你将学习如何访问和修改字典中的信息。鉴于字典可存储的信息量几乎不受限制,因此我们会演示如何遍 历字典中的数据。另外,你还将学习存储字典的列表、存储列表的字典和存储字典的字典。…...
爬虫技巧汇总
一、UA大列表 USER_AGENT_LIST 是一个包含多个用户代理字符串的列表,用于模拟不同浏览器和设备的请求。以下是一些常见的用户代理字符串: USER_AGENT_LIST [Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0),Mozilla…...
SCT2A15一款5.5V-100V 1.8A峰值电流限制 高效率非同步降压DCDC转换器,SOT23-6L封装
SCT2A15是一款异步降压转换器,输入电压范围从5.5V到100V,可适应各种降压应用,是汽车、工业和照明应用的理想选择。 SCT2A15集成了975mΩ高侧MOSFET,峰值输出电流在Vin<60V时限制为1.8A,可支持高峰值电流的应用。 SC…...
数据结构——二叉树
好,上一篇我们已经讲过了堆,也已经了解了二叉树的基础知识后,我们今天来实现二叉树的相关代码。 由于初始二叉树,由于现在对二叉树结构掌握还不够深入,为了降低学习成本,此处我们来手动快速创建一棵简单的二…...
六、 通用异步收发器UART
6.1 UART简介 UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)是一种用于异步串行通信的硬件设备。它通过两根信号线(TX 和 RX)实现全双工通信,广泛应用于微控制器、计算机和外设之…...
基于Kotlin中Flow扩展重试方法
最近项目中统一采用Kotlin的Flow来重构了网络请求相关代码。 目前的场景是,接口在请求的时候需要一个accessToken值,因为此值会过期或者不存在,需要刷新,因此最终方案是在使用Flow请求的时候先获取accessToken值然后再进行接口请求…...
在 Open WebUI+Ollama 上运行 DeepSeek-R1-70B 实现调用
在 Open WebUI Ollama 上运行 DeepSeek-R1-70B 实现调用 您可以使用 Open WebUI 结合 Ollama 来运行 DeepSeek-R1-70B 模型,并通过 Web 界面进行交互。以下是完整的部署步骤。 1. 安装 Ollama Ollama 是一个本地化的大模型管理工具,它可以在本地运行 …...
速度超越DeepSeek!Le Chat 1100tok/s闪电回答,ChatGPT 4o和DeepSeek R1被秒杀?
2023年,当全球科技界还在ChatGPT引发的AI狂潮中沉浮时,一场来自欧洲的"静默革命"正悄然改变游戏规则。法国人工智能公司Mistral AI推出的聊天机器人Le Chat以"比ChatGPT快10倍"的惊人宣言震动业界,其背后承载的不仅是技术…...
如何使用C++将处理后的信号保存为PNG和TIFF格式
在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示。C提供了多种库来处理图像数据,本文将介绍如何使用stb_image_write库保存为PNG格式图像以及使用OpenCV库保存为TIFF格式图像。 1. PNG格式保存 使用stb_ima…...
2 CXX-Qt #[cxx_qt::bridge] 宏指南
#[cxx_qt::bridge] 宏是用于在 Rust 中创建一个模块,该模块能够桥接 Rust 和 Qt(通过 C)之间的交互。它允许你将 Rust 类型暴露给 Qt 作为 QObject、Q_SIGNAL、Q_PROPERTY 等,同时也能够将 Qt 的特性和类型绑定到 Rust 中…...
PHP函数介绍—get_headers(): 获取URL的响应头信息
概述:在PHP开发中,我们经常需要获取网页或远程资源的响应头信息。PHP函数get_headers()能够方便地获取目标URL的响应头信息,并以数组形式返回。本文将介绍get_headers()函数的用法,以及提供一些相关的代码示例。 get_headers()函…...
C#树图显示目录下所有文件以及文件大小(使用Stack元组来替换递归)
接上篇 C#树图显示目录下所有文件以及文件大小_c# 查看文件夹里面有多少文件-CSDN博客 上一篇我们使用递归的方法来实现绑定目录和文件到树图中,关键程序代码如下: 这里我们使用Stack的方式非递归方法来实现绑定目录和文件到树图: /// <summary>/// 递归方法ÿ…...
计算机毕业设计Python+Spark知识图谱医生推荐系统 医生门诊预测系统 医生数据分析 医生可视化 医疗数据分析 医生爬虫 大数据毕业设计 机器学习
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
机器学习:朴素贝叶斯分类器
贝叶斯决策论是概率框架下实施决策的基本方法,对分类任务来说,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。 贝叶斯定理是贝叶斯决策论的基础,描述了如何根据新的证据更新先验概率,贝叶斯定理&…...
解决 keep-alive 缓存组件中定时器干扰问题
当使用 keep-alive 缓存组件时,组件中的定时器可能会在组件被缓存后继续运行,从而干扰其他组件的逻辑。为了避免这种情况,可以通过以下方法解决: 1. 在组件的 deactivated 钩子中清理定时器 keep-alive 为缓存的组件提供了 acti…...
1-portal认证功能
很多时候公共网络需要提供安全认证功能,比如我们去星巴克或者商场、酒店,我们连接wifi上网的时候, 需要认证后才可以上网。 用户可以主动访问已知的Portal认证网站,输入用户名和密码进行认证,这种开始Portal认证的方式…...
Kafka 的消费offset原来是使用ZK管理,现在新版本是怎么管理的?
目录 基于 ZooKeeper 管理消费 offset 原理 缺点 新版本基于内部主题管理消费 offset 原理 优点 示例代码(Java) 在 Kafka 早期版本中,消费者的消费偏移量(offset)是存储在 ZooKeeper 中的,但由于 ZooKeeper 并不适合高频读写操作,从 Kafka 0.9 版本开始,消费偏…...
LabVIEW图像水印系统
图像水印技术在数字图像处理中起着重要作用,它能够保护图像的版权、确保图像的完整性,并提供额外的信息嵌入。本项目旨在利用LabVIEW开发一个图像水印系统,实现图像水印的嵌入和提取功能,为数字图像处理提供便捷的工具。 一、项目…...
Bash (Bourne-Again Shell)、Zsh (Z Shell)
文章目录 1. 历史背景2. 主要区别3. 功能对比自动补全插件和主题路径扩展提示符定制 4. 性能5. 使用场景6. 如何切换 Shell7. 总结 以下是 Bash 和 Zsh 之间的主要区别,列成表格方便对比: 特性BashZsh默认Shell大多数Linux发行版默认ShellmacOS默认She…...
iOS AES/CBC/CTR加解密以及AES-CMAC
感觉iOS自带的CryptoKit不好用,有个第三方库CryptoSwift还不错,好巧不巧,清理过Xcode缓存后死活下载不下来,当然也可以自己编译个Framework,但是偏偏不想用第三方库了,于是研究了一下,自带的Com…...
蓝桥杯算法日记|贪心、双指针
3412 545 2928 2128 贪心学习总结: 1、一般经常用到sort(a,an);【a[n]】排序,可以给整数排,也可以给字符串按照字典序排序 2、每次选最优 双指针 有序数组、字符串、二分查找、数字之和、反转字…...
浅谈Java Spring Boot 框架分析和理解
Spring Boot是一个简化Spring开发的框架,它遵循“约定优于配置”的原则,通过内嵌的Tomcat、Jetty或Undertow等容器,使得开发者能够快速构建独立运行的、生产级别的基于Spring框架的应用程序。Spring Boot包含了大量的自动配置功能,…...
【系统架构设计师】操作系统 ③ ( 存储管理 | 页式存储弊端 - 段式存储引入 | 段式存储 | 段表 | 段表结构 | 逻辑地址 的 合法段地址判断 )
文章目录 一、页式存储弊端 - 段式存储引入1、页式存储弊端 - 内存碎片2、页式存储弊端 - 逻辑结构不匹配3、段式存储引入 二、段式存储 简介1、段式存储2、段表3、段表 结构4、段内地址 / 段内偏移5、段式存储 优缺点6、段式存储 与 页式存储 对比 三、逻辑地址 的 合法段地址…...
网络编程-day4-TPC之文件传输
服务器 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> #include <semaphore.h> #includ…...
定制化APP:开启企业数字化转型新未来
在当今快速发展的数字时代,企业的生存与发展不仅依赖于其传统的运营模式,更需要借助创新的技术手段来提升效率、优化服务并创造价值。而定制化的移动应用程序(简称“定制化APP”)正是实现这一目标的重要工具之一。通过量身定制的应用程序,企业能够更好地满足自身独特的业务…...
JS宏进阶:XMLHttpRequest对象
一、概述 XMLHttpRequest简称XHR,它是一个可以在JavaScript中使用的对象,用于在后台与服务器交换数据,实现页面的局部更新,而无需重新加载整个页面,也是Ajax(Asynchronous JavaScript and XML)…...
点大商城V2-2.6.6源码全开源uniapp +搭建教程
一.介绍 点大商城V2独立开源版本,版本更新至2.6.6,系统支持多端,前端为UNiapp,多端编译。 二.搭建环境: 系统环境:CentOS、 运行环境:宝塔 Linux 网站环境:Nginx 1.21 MySQL 5.…...
Docker的深入浅出
目录 Docker引擎 Docker镜像 (镜像由多个层组成,每层叠加之后,从外部看来就如一个独立的对象。镜像内部是一个精简的操作系统(OS),同时还包含应用运行所必须的文件和依赖包) Docker容器 应用容器化--Docker化 最佳…...
导航守卫router.beforeEach
router.beforeEach 是一个全局前置守卫,在每次路由跳转之前都会触发。 //index.jsrouter.beforeEach((to, from, next) > {// 打印即将要进入的目标路由信息console.log(即将要进入的目标路由信息:, to)// 打印当前正要离开的路由信息console.log(当前正要离开的…...
Perl语言的软件开发工具
Perl语言的软件开发工具 引言 在当今软件开发的世界中,随着互联网的快速发展和信息技术的不断进步,编程语言和开发工具的选择变得尤为重要。特别是在处理大量数据、实现快速原型以及网络编程等领域,Perl语言凭借其独特的优势而受到广泛青睐…...
在 Linux 系统下,解压 `.tar.gz`
在 Linux 系统下,解压 .tar.gz 文件通常使用 tar 命令。.tar.gz 文件是一种压缩归档文件,它首先使用 tar 命令将多个文件打包为一个 .tar 文件,然后再使用 gzip 压缩生成 .tar.gz 文件。 解压 .tar.gz 文件的命令 要解压 .tar.gz 文件,可以使用以下命令: tar -xzvf fil…...
Deepseek
1.Deepseek是什么? deepseek是一家人工智能科技公司所开发的能够进行人工智能对话的一个应用,它的主要目标是大规模的研发与应用。deepseek-R1是它的开源推理模型,主要负责处理复杂任务并且可以免费使用。 2.Deepseek可以做什么? Deepseek…...
oracle如何查询历史最大进程数?
oracle如何查询历史最大进程数? SQL> desc dba_hist_resource_limitName Null? Type---------------------------------------------------- -------- ------------------------------------SNAP_ID …...
强一致性算法:Raft
目录 什么是 Raft 算法? Leader的选举 投票分裂后的选举过程 Raft算法日志复制过程 修复不一样的日志 数据安全性的保证 什么是 Raft 算法? Raft 算法是一种是一种用于管理复制日志的强一致性算法,用于保证分布式系统中节点数据的一致…...
8.flask+websocket
http是短连接,无状态的。 websocket是长连接,有状态的。 flask中使用websocket from flask import Flask, request import asyncio import json import time import websockets from threading import Thread from urllib.parse import urlparse, pars…...
是德科技 | PCIe 7.0 互连— PCIe的尽头会是光吗?
伴随大语言模型和相关训练系统迅猛增长、对非结构化数据处理的需求急剧上升,市场对算力的需求也是呈指数级增加。PCIe作为计算机和服务器中使用广泛的高速数据传输技术发展迅猛,今年4月份PCI-SIG已经批准 Draft 0.5版基础规范,目前0.7版本基础…...
Aitken 逐次线性插值
Aitken 逐次线性插值 用 Lagrange 插值多项式 L n ( x ) L_n(x) Ln(x)计算函数近似值时,如需增加插值节点,那么原来算出的数据均不能利用,必须重新计算。为克服这个缺点,可用逐次线性插值方法求得高次插值。 令 I i 1 , i 2…...
Orange 开源项目介绍
Orange 开源项目 项目兼容单体架构与微服务架构两种模式,集成了包括部门管理、用户管理、菜单配置、角色分配、字典维护以及日志记录在内的多种系统管理功能。 项目体验 Orange 官网: http://hengzq.cn在线体验: http://tiny.hengzq.cn项目文档: http://hengzq.cn/…...
【高级架构师】多线程和高并发编程(三):锁(下)深入ReentrantReadWriteLock
文章目录 4、深入ReentrantReadWriteLock4.1 为什么要出现读写锁4.2 读写锁的实现原理4.3 写锁分析4.3.1 写锁加锁流程概述4.3.2 写锁加锁源码分析4.3.3 写锁释放锁流程概述&释放锁源码 4.4 读锁分析4.4.1 读锁加锁流程概述4.4.1.1 基础读锁流程4.4.1.2 读锁重入流程4.4.1.…...
如何在Node.js中使用中间件处理请求
Node.js作为一种基于事件驱动、非阻塞I/O模型的运行环境,广泛用于构建高性能的Web应用。在Node.js中,处理中间件是处理HTTP请求和响应的一个常见方式,特别是在使用Express框架时,中间件扮演着至关重要的角色。本文将介绍如何在Nod…...
Kotlin 2.1.0 入门教程(十三)异常、Nothing
创建自定义异常 可以通过创建继承内置 Exception 类来定义自定义异常。这允许你创建更符合应用程序需求的特定错误类型。 要创建一个自定义异常,可以定义一个继承 Exception 的类: class MyException : Exception("My message")在这个例子中…...
Unity 打造游戏资源加密解密系统详解
在游戏开发中,保护游戏资源不被轻易破解和盗用至关重要。本文将详细介绍如何在 Unity 中打造一个游戏资源加密解密系统,并提供技术详解和代码实现。 一、加密方案选择 1.1 对称加密 优点: 加密解密速度快,适合加密大量数据。 缺点: 密钥管…...
HarmonyOS Next 方舟字节码文件格式介绍
在开发中,可读的编程语言要编译成二进制的字节码格式才能被机器识别。在HarmonyOS Next开发中,arkts会编译成方舟字节码。方舟字节码长什么样呢?我们以一个demo编译出的abc文件: 二进制就是长这样,怎么去理解呢&…...
二层、三层小总结
一、网络隔离 1、物理隔离。搭建两套完全独立的网络,这也是最土豪最安全的做法。 2、二层隔离。使用Vlan隔离,使用不同Vlan或者Pvlan等。 3、三层隔离。路由隔离。 4、设备特性隔离。比如端口隔离swichport protected,或者ACL等。 5、安全…...