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

FFM Arena内存管理失效引发Native OOM?深度拆解Java 22 JEP 464中Scoped Memory Model的3种安全模式切换策略

第一章FFM Arena内存管理失效引发Native OOM深度拆解Java 22 JEP 464中Scoped Memory Model的3种安全模式切换策略Java 22 引入的 JEP 464 — Scoped Memory Model旨在为 Foreign Function Memory APIFFM提供可预测、可终止、线程局部的原生内存生命周期控制。当 Arena.ofConfined() 或 Arena.ofShared() 在高并发或异常传播路径中被误用时Arena 的自动 close() 可能被跳过导致 native heap 持续增长最终触发 Native OOM — 这正是 FFM Arena 内存管理失效的核心风险点。三种安全模式的本质差异Scoped Memory Model 定义了三种内存作用域协议其语义边界由 JVM 运行时严格校验Confined内存仅绑定到单一线程作用域结束即自动释放适用于短生命周期、无跨线程共享需求的 native bufferShared允许多线程访问但需显式调用 close() 或依赖 try-with-resources若未正确关闭Arena 将持续持有 native memoryAutoCloseable非独立作用域而是与 Java 对象生命周期耦合如通过 MemorySegment::scope() 关联GC 触发时由 Cleaner 异步回收模式切换的强制约束机制JVM 不允许运行时动态变更 Arena 类型。以下代码将抛出 UnsupportedOperationException// ❌ 非法试图在已创建的 Arena 上切换模式 Arena arena Arena.ofConfined(); // arena.changeToShared(); // 不存在此方法实际切换必须通过重建 Arena 并迁移数据完成。例如从 Confined 迁移至 Shared// ✅ 合法显式重建 数据拷贝 MemorySegment src Arena.ofConfined().allocate(1024, 1); byte[] data src.asByteBuffer().array(); Arena shared Arena.ofShared(); MemorySegment dst shared.allocate(1024, 1); dst.copyFrom(MemorySegment.ofArray(data));各模式资源回收行为对比模式关闭触发条件是否阻塞线程GC 可见性Confined作用域退出如 try-block 结束否不可见不依赖 GCShared显式 close() 或 Cleaner 异步触发是close() 同步释放可见Cleaner 注册于 ReferenceQueueAutoCloseable关联对象被 GC 回收后 Cleaner 执行否异步强可见与对象强引用解绑同步第二章Java 外部函数优化2.1 Arena生命周期与Native内存泄漏的根因建模基于JFRNative Memory Tracking的实证分析关键观测信号对齐启用JFR事件与NMT同步采集java -XX:NativeMemoryTrackingdetail \ -XX:UnlockDiagnosticVMOptions \ -XX:FlightRecorder \ -XX:StartFlightRecordingduration60s,filenamerecording.jfr,settingsprofile \ -jar app.jar该命令确保NMT以detail粒度记录arena分配栈同时JFR捕获jdk.NativeMemoryUsage与jdk.NativeMemoryTracking事件实现堆外内存分配路径与时间线的双向锚定。Arena泄漏典型模式Arena未显式调用close()导致底层mmap内存块长期驻留引用闭包中隐含持有Arena实例如Lambda捕获、静态缓存NMT快照差异比对表指标启动后30s启动后120s增量Internal (Arena)8.2 MB42.7 MB34.5 MBThread Stack16.0 MB16.1 MB0.1 MB2.2 Scoped Memory Model三大安全模式Confined、Shared、AutoCloseable的语义边界与JNI调用栈穿透验证语义边界定义Confined 模式禁止跨线程访问且不可被 JNI 全局引用捕获Shared 模式允许显式同步共享但要求所有访问均通过 MemorySegment::asSlice() 显式派生AutoCloseable 模式强制在作用域退出时释放且其 close() 不可被 JNI 异步回调重入。JNI 调用栈穿透验证JNIEXPORT void JNICALL Java_MyScopedBuffer_nativeAccess(JNIEnv* env, jobject obj, jlong address) { // 若 address 来自 Confined Segment此处触发 JVM 隐式检查失败 void* ptr (void*)address; memcpy(ptr, data, 4); // 触发 IllegalAccessError 或 SIGSEGV }该 JNI 函数在运行时会触发 JVM 的 ScopedMemoryAccess::checkAccess() 校验若 address 所属 segment 已退出作用域或非 Shared 模式则抛出 IllegalStateException。安全模式对比模式跨线程JNI 可见性自动释放Confined否仅限当前栈帧是Shared是需同步允许全局引用否AutoCloseable否仅限显式传递是try-with-resources2.3 Arena自动回收失效场景复现从Unsafe::allocateMemory到MemorySegment::ofAddress的跨域引用链追踪失效触发路径当通过Unsafe::allocateMemory分配原生内存后再用MemorySegment::ofAddress封装为 SegmentArena 无法感知该地址归属导致提前回收。// 关键失效代码 long addr UNSAFE.allocateMemory(1024); MemorySegment seg MemorySegment.ofAddress(addr); // Arena 无引用记录此处addr由 Unsafe 独立分配未注册到任何 ArenaMemorySegment::ofAddress构造时跳过 Arena 绑定逻辑形成“幽灵引用”。引用链断裂点Unsafe 分配 → 原生堆外内存无 GC 句柄ofAddress → Segment 持有裸地址不持有 Arena 引用Arena.close() → 仅释放其托管内存忽略外部地址关键状态对比行为Arena 托管分配ofAddress 封装是否注册到 Arena是否close() 是否释放该内存是否但可能被误判为已释放2.4 模式切换策略在JNI回调中的实践约束C函数指针注册、线程局部Arena绑定与GC屏障插入点实测C函数指针注册的生命周期契约JNIEXPORT void JNICALL Java_com_example_NativeBridge_registerCallback (JNIEnv *env, jclass clazz, jobject callback) { // 必须在主线程注册且callback需为全局引用 g_callback_global_ref (*env)-NewGlobalRef(env, callback); g_jvm NULL; (*env)-GetJavaVM(env, g_jvm); // 绑定JVM实例 }该注册要求回调对象在Native侧持有全局引用避免JVM GC时提前回收同时禁止在非Attach线程中调用否则g_jvm不可用。线程局部Arena绑定验证线程状态Arena可用性GC屏障生效AttachState::kAttached✅ 可绑定✅ 插入点有效AttachState::kDetached❌ Arena未初始化❌ 屏障被跳过GC屏障插入点实测位置JNIEnv::CallVoidMethod() 调用前参数压栈后Native函数返回至JVM前栈帧清理前全局引用更新操作NewGlobalRef/DeleteGlobalRef期间2.5 生产级优化方案落地基于JEP 464的Arena分层设计Root/Session/Transient与G1并发标记协同调优Arena生命周期与GC阶段对齐策略JEP 464引入的Arena分层设计需与G1的并发标记周期深度协同。Root Arena绑定JVM生命周期Session Arena在HTTP请求链路中复用Transient Arena则在单次RPC处理内按需分配并即时释放。G1参数协同调优关键点-XX:G1ConcMarkStepDurationMillis10缩短并发标记步长匹配Transient Arena高频释放节奏-XX:G1MaxNewSizePercent30为Session Arena预留足够Eden空间避免过早晋升典型Arena使用模式// Session Arena跨Filter链复用显式close()触发批量回收 try (Arena session Arena.ofConfined()) { ByteBuffer buf session.allocate(8192); // 分配于Session层 processRequest(buf); }该模式使G1能将Session Arena引用对象聚类至同一Region在并发标记阶段高效识别存活边界降低Remembered Set更新开销。Arena类型作用域G1协同目标RootJVM全局避免进入G1老年代并发标记扫描路径Session一次请求链路适配Mixed GC Region选择策略Transient单方法调用确保Eden内快速回收不触发YGC第三章Java 外部函数优化3.1 内存布局对FFM性能的影响结构体对齐、padding注入与Vector API向量化访问的联合压测结构体内存对齐实测public class FFMField { public long fid; // 8B public float v; // 4B → 编译器自动插入4B padding public int slot; // 4B } // 总大小24B非紧凑的16BJVM默认按8字节对齐fid后未对齐的v触发padding导致单实例多占4B百万级特征时内存膨胀达384MB。Vector API对齐敏感性验证对齐方式吞吐量 (Gops/s)缓存未命中率自然对齐24B1.218.7%手动填充至32B2.94.3%Padding注入策略使用Contended隔离热点字段在slot后追加byte[4]强制32B边界配合VectorSpecies.ofFloat(16)实现AVX-512批量加载3.2 Foreign Function Memory API的零拷贝路径验证DirectByteBuffer vs MemorySegment vs SegmentAllocator的吞吐对比实验实验设计要点采用固定大小1MB的内存块在JDK 21环境下执行10M次跨JNI边界读写操作禁用GC干扰测量吞吐量MB/s。核心实现对比// MemorySegment推荐零拷贝路径 MemorySegment seg Arena.ofConfined().allocate(1024 * 1024, 1); seg.set(ValueLayout.JAVA_BYTE, 0, (byte) 42); // 直接访问无堆拷贝该方式绕过Java堆缓冲区地址由Arena统一管理避免了DirectByteBuffer隐含的Cleaner延迟回收风险。吞吐性能实测结果API类型平均吞吐MB/sGC压力DirectByteBuffer1820中依赖FinalReferenceMemorySegment2150极低作用域自动释放SegmentAllocator1960低复用Arena3.3 Native OOM故障定位工具链构建jcmd jhsdb libunwind perf script四维联动诊断流程四维协同诊断逻辑Native OOM常表现为进程被内核OOM Killer强制终止JVM层无明显日志。需融合JVM运行时快照、本地堆栈、符号解析与系统级采样jcmd触发即时JVM状态导出如VM.native_memory summaryjhsdb jmap --binaryheap获取原生内存布局快照libunwind在core dump中解析C/C/JIT混合调用栈perf script -F comm,pid,tid,ip,sym --call-graph dwarf还原用户态内存分配热点关键命令示例perf record -e mem-alloc:malloc -p $(pgrep -f java.*Application) --call-graph dwarf -g perf script --call-graph dwarf | awk $5 ~ /malloc/ {print $6} | sort | uniq -c | sort -nr | head -10该命令捕获目标Java进程的malloc调用点结合DWARF调试信息还原符号精准定位高频分配函数如ZipFile::open或JNI层env-NewByteArray避免仅依赖JVM堆分析造成的原生内存盲区。工具能力对比工具核心能力局限性jcmdJVM原生内存摘要NMT级别无调用栈、无地址映射细节jhsdbcore dump中Java对象与本地内存关联分析依赖debuginfo无法追踪glibc malloc内部perf libunwind全栈符号化内存分配事件回溯需开启-g -fno-omit-frame-pointer编译选项第四章Java 外部函数优化4.1 Arena作用域逃逸检测机制实现原理基于JVM TI的ScopedValue注入与MemoryAccessEvent钩子拦截核心拦截点设计JVM TI 通过SetEventNotificationMode启用JVMTI_EVENT_MEMORY_ACCESS并在回调中结合当前线程的ScopedValue栈帧快照判定逃逸void JNICALL memory_access_cb(jvmtiEnv* jvmti, JNIEnv* env, jclass clazz, jobject obj, jfieldID field) { ScopedValueFrame* top get_scoped_value_frame(env); if (top top-arena ! NULL !is_in_arena_scope(obj, top-arena)) { report_escape(obj, top-arena); // 触发逃逸告警 } }该回调在每次对象字段访问时触发get_scoped_value_frame从 JNI 环境提取线程局部的 ScopedValue 执行上下文is_in_arena_scope检查目标对象内存地址是否落在 Arena 分配区间内。检测状态映射表状态码含义触发条件ESCAPE_DIRECT对象被跨作用域引用写入非当前 Arena 的栈/堆变量ESCAPE_INDIRECT通过中间引用链逃逸引用经 static 字段或 ThreadLocal 中转4.2 Shared Arena下的线程安全实践ReentrantLock粒度控制、CAS式Segment分配器与读写锁分离策略细粒度锁控制采用分段 ReentrantLock 替代全局锁每个 Segment 独立持有一把可重入锁显著降低争用private final ReentrantLock[] locks new ReentrantLock[SEGMENT_COUNT]; static { for (int i 0; i SEGMENT_COUNT; i) locks[i] new ReentrantLock(); }逻辑分析SEGMENT_COUNT 通常取 2 的幂次如 16哈希值低几位决定锁索引参数 lock[i] 支持公平性配置与中断响应避免饥饿。CAS式Segment分配首次访问时通过 Unsafe.compareAndSwapObject 原子初始化 Segment失败则自旋重试避免 synchronized 初始化开销读写分离策略操作类型锁机制并发度读取无锁 volatile 读完全并发写入Segment级ReentrantLockSEGMENT_COUNT路并行4.3 Confined Arena在异步回调中的生命周期管理CompletableFuture链式Arena传递与ForkJoinPool线程本地Arena池化Arena传递的链式约束在CompletableFuture链中Arena实例需随任务流转而显式传递避免跨阶段泄漏CompletableFutureString future CompletableFuture .supplyAsync(() - allocateInArena(arena), executor) .thenApplyAsync(s - transformInArena(s, arena), executor); // arena必须由上层持有并显式传入不可依赖ThreadLocal该模式确保Arena生命周期严格绑定于用户控制的逻辑链规避ForkJoinWorkerThread隐式切换导致的arena错配。线程本地Arena池化策略ForkJoinPool中每个worker线程维护独立Arena缓存池字段作用生命周期arenaCacheLRU缓存已释放Arena线程存活期currentArena当前活跃Arena引用任务执行期4.4 AutoCloseable Arena的资源确定性释放try-with-resources字节码增强、FinalizerGuard与ReferenceQueue清理时机验证字节码增强机制Java 编译器对try-with-resources语句进行静态重写自动插入close()调用并确保异常抑制suppression逻辑生效。// 编译前 try (Arena arena Arena.ofConfined()) { MemorySegment seg arena.allocate(1024); // use seg }编译后生成等效字节码在try块末尾及所有catch分支后插入arena.close()并捕获可能抛出的Throwable进行抑制处理。FinalizerGuard 与 ReferenceQueue 协同验证阶段触发条件清理可靠性显式 close()用户调用✅ 确定性ReferenceQueue.poll()GC 后入队⚠️ 异步、延迟FinalizerGuard在finalize()中触发ReferenceQueue扫描避免资源泄漏通过PhantomReference关联ReferenceQueue验证close()未被调用时的兜底清理路径第五章总结与展望在真实生产环境中某中型电商平台将本方案落地后API 响应延迟降低 42%错误率从 0.87% 下降至 0.13%。关键路径的可观测性覆盖率达 100%SRE 团队平均故障定位时间MTTD缩短至 92 秒。可观测性能力演进路线阶段一接入 OpenTelemetry SDK统一 trace/span 上报格式阶段二基于 Prometheus Grafana 构建服务级 SLO 看板P95 延迟、错误率、饱和度阶段三通过 eBPF 实时采集内核级指标补充传统 agent 无法捕获的连接重传、TIME_WAIT 激增等信号典型故障自愈配置示例# 自动扩缩容策略Kubernetes HPA v2 apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: payment-service-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: payment-service minReplicas: 2 maxReplicas: 12 metrics: - type: Pods pods: metric: name: http_request_duration_seconds_bucket target: type: AverageValue averageValue: 1500m # P90 耗时超 1.5s 触发扩容跨云环境部署兼容性对比平台Service Mesh 支持eBPF 加载权限日志采样精度AWS EKSIstio 1.21需启用 CNI 插件受限需启用 AmazonEKSCNIPolicy1:1000可调Azure AKSLinkerd 2.14原生支持开放默认允许 bpf() 系统调用1:100默认下一代可观测性基础设施雏形数据流拓扑OTLP Collector → WASM Filter实时脱敏→ Columnar StorageParquet on S3→ Vectorized Query EngineDataFusion

相关文章:

FFM Arena内存管理失效引发Native OOM?深度拆解Java 22 JEP 464中Scoped Memory Model的3种安全模式切换策略

第一章:FFM Arena内存管理失效引发Native OOM?深度拆解Java 22 JEP 464中Scoped Memory Model的3种安全模式切换策略Java 22 引入的 JEP 464 — Scoped Memory Model,旨在为 Foreign Function & Memory API(FFM)提…...

C语言宏定义:嵌入式开发中的高效利器与避坑指南

1. C语言宏定义的基础与陷阱在嵌入式开发中,宏定义是C语言最强大的特性之一,但也是最容易踩坑的特性。让我们从一个简单的需求开始:如何用宏实现两个数的比较并返回较小值?初学者最常见的写法是这样的:#define MIN(a,b…...

【05-log-+-diff:看懂你改了什么、历史是什么】

第五篇:log diff:看懂你改了什么、历史是什么会提交只是第一步,会"读"历史才是真的用上了 Git。这篇教你把 log 和 diff 玩出花来。git log:查看提交历史 git log默认输出太详细,通常用这些参数来精简&…...

OpenClaw 企业级实战:Java 微服务集成 AI 智能体,自动处理业务流

文章目录当你的微服务开始"自己思考"OpenClaw 到底是个啥?别被概念吓住架构设计:让 Java 微服务和 AI 智能体"合伙创业"整体架构草图为什么非得用 Java?Python 不香吗?实战准备:Spring AI 与 Open…...

GitHub界面中文化:如何让全球最大的代码托管平台说中文?

GitHub界面中文化:如何让全球最大的代码托管平台说中文? 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 当我们…...

面试官最爱问的Java集合+多线程,详解+示例

文章目录一、开篇:为什么面试官揪着这俩不放?二、Java集合:别只会用ArrayList了2.1 List三兄弟:ArrayList、LinkedList、Vector2.2 Set家族:HashSet、LinkedHashSet、TreeSet2.3 Map三巨头:HashMap、Concur…...

智慧树网课助手:3步实现自动化学习,效率提升50%

智慧树网课助手:3步实现自动化学习,效率提升50% 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 在智慧树平台学习网课时,你是否经常…...

Java函数计算迁移避坑清单:12个被官方文档隐瞒的关键限制(含Classloader隔离失效实录)

第一章:Java函数计算迁移避坑清单:12个被官方文档隐瞒的关键限制(含Classloader隔离失效实录)Java函数计算(如阿里云FC、AWS Lambda Java Runtime)在迁移传统Spring Boot应用时,常因底层沙箱机制…...

缺失值处理失效、类型推断崩塌、内存暴增…Polars 2.0清洗故障全解析,深度解读Arrow底层Schema约束机制

第一章:Polars 2.0数据清洗的核心挑战与演进脉络随着数据规模持续膨胀与实时分析需求激增,传统基于 Pandas 的数据清洗范式在内存效率、并行粒度和类型安全方面日益显露瓶颈。Polars 2.0 的发布并非简单功能叠加,而是以 Arrow-native 执行引擎…...

Java TCC到底要不要用?90%团队踩坑的4个认知误区,今天一次性说透

第一章:Java TCC到底要不要用?90%团队踩坑的4个认知误区,今天一次性说透TCC(Try-Confirm-Cancel)作为分布式事务的一种经典模式,在 Java 生态中常被误认为“高可用银弹”或“微服务标配”。但真实生产实践中…...

仅剩127天!Python 3.14+原生AOT将成标准解释器默认后端:企业级迁移路线图与兼容性断点预警

第一章:Python 原生 AOT 编译方案 2026 生产环境部署全景概览Python 原生 AOT(Ahead-of-Time)编译在 2026 年已进入成熟商用阶段,核心由 CPython 官方主导的 cpython-aot 工具链与 PEP 718 所定义的字节码预优化规范共同支撑。该方…...

终极Windows驱动管理指南:如何用DriverStore Explorer快速释放30GB磁盘空间

终极Windows驱动管理指南:如何用DriverStore Explorer快速释放30GB磁盘空间 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer DriverStore Explorer(简称RAPR&…...

3步掌握PinWin效率工具:让窗口置顶操作效率提升10倍

3步掌握PinWin效率工具:让窗口置顶操作效率提升10倍 【免费下载链接】PinWin Pin any window to be always on top of the screen 项目地址: https://gitcode.com/gh_mirrors/pin/PinWin 你是否曾在视频会议时手忙脚乱地寻找被覆盖的会议窗口?在多…...

【Java微服务Istio配置黄金法则】:20年架构师亲授5大避坑指南与生产级配置模板

第一章:Java微服务Istio配置的核心认知与演进脉络Istio 作为云原生服务网格的事实标准,其配置体系并非孤立存在,而是深度耦合于 Java 微服务的生命周期、通信契约与可观测性需求。早期 Spring Cloud Netflix 生态依赖客户端库(如 …...

Git 批量拉取所有远程分支到本地(Git Bash + CMD 双版本)

在使用 Git 开发时,经常需要将远程所有分支一次性拉取到本地,避免手动逐个创建。下面分别给出 Git Bash 和 Windows CMD 下的一键批量拉取脚本。一、Git Bash 脚本(适用于 Git Bash / Linux /macOS)bash运行git fetch originfor b…...

Claude Code助手对比:百川2-13B在代码生成与解释方面的能力展示

Claude Code助手对比:百川2-13B在代码生成与解释方面的能力展示 最近和几个做开发的朋友聊天,大家讨论最多的就是AI编程助手到底哪个更好用。Claude Code的名气确实很大,很多技术社区都在讨论它。不过,除了这些“明星”选手&…...

intv_ai_mk11开源可部署指南:下载镜像、启动服务、浏览器访问、安全注意事项全涵盖

intv_ai_mk11开源可部署指南:下载镜像、启动服务、浏览器访问、安全注意事项全涵盖 1. 项目概述 intv_ai_mk11是一款基于Llama架构的AI对话机器人,拥有7B参数规模,能够运行在GPU服务器上提供智能对话服务。这个开源项目可以帮助开发者快速部…...

ESP芯片烧录终极指南:5分钟掌握esptool.py完整操作流程

ESP芯片烧录终极指南:5分钟掌握esptool.py完整操作流程 【免费下载链接】esptool Serial utility for flashing, provisioning, and interacting with Espressif SoCs 项目地址: https://gitcode.com/gh_mirrors/es/esptool ESP芯片烧录工具esptool.py是Espr…...

Android 15 音频子系统(八):Audio HAL 与硬件接口——音频数据的最后一公里

引言:最后一公里的旅程 如果把 Android 音频系统比作一条物流网络,那么 AudioFlinger 是"中央分拣中心",AudioPolicy 是"路由规划师",而 Audio HAL(Hardware Abstraction Layer)就是最终把包裹送到用户手里的"快递员"。 前几篇我们聊了 …...

终极Google Drive下载解决方案:专业级gdrivedl实战指南

终极Google Drive下载解决方案:专业级gdrivedl实战指南 【免费下载链接】gdrivedl Google Drive Download Python Script 项目地址: https://gitcode.com/gh_mirrors/gd/gdrivedl Google Drive文件下载是许多开发者和技术爱好者面临的常见挑战,特…...

OpenClaw安全指南:gemma-3-12b-it本地化部署的权限管控策略

OpenClaw安全指南:gemma-3-12b-it本地化部署的权限管控策略 1. 为什么需要特别关注OpenClaw的权限管控? 上周我在调试一个自动化文档整理任务时,差点酿成大祸——OpenClaw误将我的工作目录/Documents/ProjectX识别为临时文件夹,…...

4个维度解析YetAnotherKeyDisplayer:开源实时按键可视化工具全指南

4个维度解析YetAnotherKeyDisplayer:开源实时按键可视化工具全指南 【免费下载链接】YetAnotherKeyDisplayer The application for displaying pressed keys of the keyboard 项目地址: https://gitcode.com/gh_mirrors/ye/YetAnotherKeyDisplayer YetAnothe…...

一天一个开源项目(第61篇):knowledge_graph - 把任意文本转成知识图谱

引言 “Convert any text to a graph of knowledge. Graph Retrieval Augmented Generation (GRAG) — a new and improved version of RAG.” 这是「一天一个开源项目」系列的第 61 篇文章。今天介绍的项目是 knowledge_graph(GitHub)。 想把文档、PDF…...

OpenClaw Docker Compose 部署完整指南

📋 目录 前置要求快速部署(推荐)手动部署步骤配置通讯渠道健康检查高级配置常用管理命令故障排查安全加固持久化说明 一、前置要求 必需软件 Docker Desktop(Windows/macOS)或 Docker Engine Docker Compose v2&am…...

CoPaw持续学习(Continual Learning)实践:让模型记住新知识而不遗忘

CoPaw持续学习(Continual Learning)实践:让模型记住新知识而不遗忘 1. 为什么需要持续学习? 想象一下,你教会了一只小狗坐下和握手的指令。但当你开始教它新的技能"装死"时,它却完全忘记了之前…...

别再被 CAD+GIS 折腾到崩溃!这款插件让你效率翻 10 倍,一键搞定所有地理信息处理

做测绘、规划、市政设计的你,是不是每天都在被这些问题折磨?CAD 里画好图,切到 GIS 软件导数据,反复切换动辄半小时;加载大型影像文件卡到死机,属性表管理杂乱无章;想把 GIS 属性标到图纸上&…...

es查询是否存在某个字段

1 如果字段就是整个文档json的字段{"query": {"bool": {"must": [{"exists": {"field": "recordUrl"}}]}} }2 如果要查询文档的字段下的子字段,前提是patient是一个objcet,可以涌点访问子属…...

好写作AI|从研究空白到初稿呈现:AI在博士论文起步阶段的价值

家人们,谁懂啊? 博士第一年,导师问:“你的研究空白是什么?” 你胸有成竹:“A理论在B场景的应用研究不足!” 导师:“那是文献缺口,不是研究空白。” 你懵了:“…...

DriverStore Explorer:释放20GB空间的Windows驱动管理神器

DriverStore Explorer:释放20GB空间的Windows驱动管理神器 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否遇到过C盘空间莫名减少的情况?Windows系统在安装…...

驱动管理工具:释放磁盘空间的开源解决方案

驱动管理工具:释放磁盘空间的开源解决方案 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 当你的系统频繁弹出磁盘空间不足警告,而C盘又找不到明显的大文件时&am…...