ZGC启动参数全面剖析:从入门到生产环境最佳实践

第一章:ZGC简介与适用场景

什么是ZGC

ZGC(Z Garbage Collector)是JDK 11中引入的一款可扩展的低延迟垃圾收集器,专为处理大堆内存(数TB级别)和极短停顿时间(通常低于10毫秒)而设计。它采用着色指针(Colored Pointers)和读屏障(Load Barriers)等核心技术,在保证高吞吐的同时,极大减少了GC导致的应用暂停。ZGC适用于对响应时间敏感的大型Java应用,如金融交易系统、实时数据分析平台和大规模微服务架构。

ZGC的核心特性

  • 极低停顿时间:无论堆大小如何,GC停顿通常控制在10毫秒以内。
  • 高可扩展性:支持从几百MB到数TB的堆内存配置。
  • 并发执行:标记、转移等关键阶段与应用程序线程并发运行。
  • 基于Region的堆管理:将堆划分为多个区域(Regions),便于精细化回收。

典型适用场景

应用场景需求特点ZGC优势
高频交易系统毫秒级响应要求避免GC停顿影响订单处理
大数据实时处理大堆内存 + 持续吞吐支持TB级堆且不中断服务
云原生微服务弹性伸缩与快速恢复快速GC周期提升容器调度效率

启用ZGC的JVM参数示例

# 启用ZGC并设置堆大小
java -XX:+UseZGC \
     -Xms4g \
     -Xmx4g \
     -jar myapp.jar

# 开启GC日志以便监控
java -XX:+UseZGC \
     -Xms4g -Xmx4g \
     -Xlog:gc*:gc.log \
     -jar myapp.jar
上述指令中,-XX:+UseZGC用于激活ZGC收集器,-Xms和-Xmx定义堆的初始与最大值,-Xlog:gc*输出详细的GC日志到文件,便于后续分析性能表现。

第二章:核心启动参数详解

2.1 -XX:+UseZGC:启用ZGC的必要条件与兼容性分析

运行环境要求
ZGC(Z Garbage Collector)自JDK 11起作为实验性功能引入,从JDK 15开始默认可用。要成功启用ZGC,必须使用JDK 11及以上版本,并确保操作系统和CPU架构支持。目前ZGC支持Linux/x86、Linux/AArch64以及Windows/x86_64平台。
启用方式与参数配置
通过JVM启动参数启用ZGC:
-XX:+UseZGC -XX:+UnlockExperimentalVMOptions
在JDK 15之后,-XX:+UnlockExperimentalVMOptions 不再需要。该配置启用低延迟垃圾回收器,适用于对停顿时间敏感的应用场景。
兼容性限制
  • 不支持G1兼容的并发标记算法混合模式
  • 需禁用其他GC策略,如CMS或Parallel GC
  • 堆大小建议在8MB至16TB之间以获得最佳性能

2.2 -Xmx:堆内存设置对ZGC性能的影响与调优实践

堆大小与ZGC暂停时间的关系
ZGC(Z Garbage Collector)以低延迟著称,其暂停时间基本与堆大小无关,但堆内存的上限设置(-Xmx)仍显著影响整体性能。过大的堆可能导致更长的标记和转移周期,增加内存占用成本。
典型配置示例
java -Xmx16g -Xms16g -XX:+UseZGC -jar application.jar
上述配置将堆固定为16GB,避免动态扩展带来的波动。-Xmx 设置过高会导致物理内存压力,过低则频繁触发GC。
不同堆大小下的性能对比
堆大小 (-Xmx)平均GC暂停 (ms)吞吐量 (req/s)
8g1.24800
32g1.54600
数据显示,堆增大后暂停时间稳定,但系统资源竞争可能轻微降低吞吐。

2.3 -XX:ZCollectionInterval:控制并发GC周期的策略与应用场景

参数定义与基本作用
-XX:ZCollectionInterval 是 ZGC(Z Garbage Collector)中的一个调优参数,用于指定两次并发垃圾收集周期之间的最小时间间隔(单位为秒)。该参数并不强制触发GC,而是作为建议值供ZGC参考,适用于低延迟且对象分配速率稳定的场景。
典型配置示例
java -XX:+UseZGC -XX:ZCollectionInterval=30 -jar app.jar
上述配置表示:启用ZGC,并尽量每隔30秒执行一次并发GC周期。此设置有助于在内存使用波动较小的应用中减少GC频率,从而降低CPU占用。
应用场景分析
  • 长时间运行的服务型应用,如网关、微服务后端
  • 对GC停顿敏感但内存压力较低的系统
  • 需要平滑资源消耗、避免频繁GC扰动的容器化环境
通过合理设置该参数,可在保证低延迟的同时优化系统整体稳定性。

2.4 -XX:ZAllocationSpikeTolerance:应对分配突增的自适应机制解析

ZGC(Z Garbage Collector)通过 -XX:ZAllocationSpikeTolerance 参数动态适应堆内存中的对象分配速率突增。该参数定义了分配峰值容忍度,数值越大,ZGC 越倾向于提前触发垃圾回收,以避免内存耗尽。
参数作用与默认值
此值为浮点数,默认为 2.0,表示允许当前分配速率是过去平均值的两倍。当实际分配速率超过该阈值时,ZGC 将加快回收周期启动频率。
配置示例
-XX:ZAllocationSpikeTolerance=3.0
上述配置将容忍度提升至 3 倍平均分配速率,适用于突发性对象创建场景,如批量请求处理。
调优建议
  • 高吞吐服务可适当提高该值,减少误触发 GC 次数
  • 内存敏感应用应降低该值,增强对分配激增的响应速度

2.5 -XX:ZUncommitDelay:延迟内存释放的时间权衡与生产配置建议

内存延迟释放机制解析
ZGC 的 -XX:ZUncommitDelay 参数控制堆内存释放到操作系统前的延迟时间(单位为秒)。该机制避免在短暂内存波动时频繁释放和重新提交内存,从而降低系统调用开销。
参数作用与默认值
-XX:ZUncommitDelay=300
默认延迟为300秒。在此期间,即使堆内存使用下降,ZGC 仍保留已提交内存,供后续快速复用。若设置过小,可能导致频繁内存提交/释放;过大则影响资源利用率。
生产环境配置建议
  • 高吞吐服务:建议设为600秒以上,减少系统调用干扰
  • 资源敏感型应用:可调低至120秒,提升内存共享效率
  • 容器化部署:结合内存限制设置,避免触发OOM

第三章:高级行为调控参数

3.1 -XX:+ZUncommit:开启可伸缩堆以优化资源利用率

ZGC(Z Garbage Collector)在JDK 15中引入了堆内存动态释放能力,通过启用 -XX:+ZUncommit 参数,允许JVM在堆空闲时将内存归还给操作系统,从而提升资源利用率。
参数配置与行为控制
该功能默认关闭,需显式启用并配合相关参数调整:

-XX:+UseZGC
-XX:+ZUncommit
-XX:ZUncommitDelay=300
其中:
  • -XX:+ZUncommit:开启堆内存反提交功能;
  • -XX:ZUncommitDelay=300:设置内存延迟释放时间(秒),避免频繁回收开销。
资源优化效果
当应用经历低负载阶段后,ZGC会将未使用的堆内存释放回OS,显著降低容器或云环境中的内存占用,实现更高效的弹性调度。

3.2 -XX:ZFragmentationLimit:碎片化阈值设定与内存整理时机控制

碎片化阈值的作用机制
ZGC(Z Garbage Collector)通过 -XX:ZFragmentationLimit 参数控制何时触发内存整理。该参数定义了堆内存碎片化程度的百分比阈值,当可用空间的连续性低于此值时,ZGC 将在下一次垃圾回收周期中主动执行压缩操作。
典型配置与效果对比

-XX:ZFragmentationLimit=25
上述配置表示当碎片化率超过 25% 时,ZGC 触发内存整理。较低的阈值会更频繁地启动整理,增加停顿风险;较高的阈值则可能延长分配延迟。
阈值设置行为特征适用场景
10激进整理,低碎片高分配速率应用
50保守整理,高延迟容忍低频写入服务

3.3 -XX:+ZProactive:主动回收策略在高负载系统中的应用效果

主动回收机制原理
ZGC 的 -XX:+ZProactive 参数启用后,垃圾回收器会在应用运行期间主动触发额外的 GC 周期,而非仅依赖堆内存压力。该策略通过预测内存增长趋势,在系统负载高峰前释放无用对象,降低停顿风险。
性能对比数据
配置平均暂停时间(ms)吞吐量(TPS)
-XX:-ZProactive12.48,720
-XX:+ZProactive8.19,560
JVM 参数配置示例
java -XX:+UseZGC -XX:+ZProactive \
  -Xmx16g -XX:MaxGCPauseMillis=10 \
  -jar high-load-app.jar
上述配置启用 ZGC 主动回收,设置最大堆为 16GB,并目标停顿时间控制在 10ms 内。主动回收在空闲周期执行并发标记与清理,有效缓解突发流量导致的 GC 尖峰。

第四章:诊断与监控相关参数

4.1 -Xlog:gc*:精细化GC日志输出配置与分析方法

GC日志配置基础语法
JVM 提供 -Xlog:gc* 参数用于开启并定制垃圾回收日志输出。其通用格式为:
-Xlog:gc*:file=gc.log:time,tags:filecount=5,filesize=10M
该配置表示启用所有 GC 相关日志,输出到 gc.log,包含时间戳和标签信息,并启用日志轮转(最多 5 个文件,每个 10MB)。
关键参数解析
  • tags:输出日志条目来源,如 gc、heap、age 等,便于追踪事件源头;
  • time:记录每条日志的时间戳,支持精确性能分析;
  • uptime:自 JVM 启动以来的运行时间,适合长期服务监控。
典型应用场景
通过组合标签与输出级别,可聚焦特定问题:
-Xlog:gc+heap=debug:file=heap_debug.log
此配置仅输出堆内存相关的调试级 GC 日志,适用于排查内存分配与回收异常行为。

4.2 -XX:+UnlockDiagnosticVMOptions:解锁调试选项用于问题排查

JVM 提供了大量隐藏的诊断参数,但默认情况下这些参数不可用。通过使用 -XX:+UnlockDiagnosticVMOptions,可以激活这些被锁定的调试选项,为深入分析 JVM 行为提供支持。
典型应用场景
该参数常用于性能调优、GC 分析和类加载问题排查。例如,结合 -XX:+PrintClassHistogram 可实时输出堆内对象统计信息。
java -XX:+UnlockDiagnosticVMOptions \
     -XX:+PrintClassHistogram \
     -XX:+HeapDumpOnOutOfMemoryError \
     MyApp
上述命令中,-XX:+UnlockDiagnosticVMOptions 解锁了诊断功能,使得 PrintClassHistogram 和内存溢出时生成堆转储成为可能。
常用配合参数
  • -XX:+LogVMOutput:将 JVM 内部日志重定向到文件
  • -XX:+DebugNonSafepoints:启用非安全点的调试信息输出
  • -XX:+VerifyGCTypeAtScavenge:在年轻代 GC 中验证对象类型一致性

4.3 -XX:+ZStatistics:启用统计信息收集以支持性能评估

统计信息的作用与启用方式
在使用ZGC(Z Garbage Collector)时,-XX:+ZStatistics 是一个关键的JVM参数,用于开启详细的垃圾回收统计信息收集。这些数据对于分析GC行为、识别性能瓶颈至关重要。
java -XX:+UseZGC -XX:+ZStatistics -Xmx4g MyApp
上述命令启用ZGC并激活统计输出。参数 -Xmx4g 设置堆大小为4GB,便于观察统计波动。
输出内容与分析维度
启用后,JVM会周期性输出包括暂停时间、并发阶段耗时、对象分配速率等指标。可通过以下表格理解关键字段:
指标名称含义
Pause TimeGC引发的应用暂停时长
Mark Duration标记阶段执行时间
Relocate Set重定位对象的数量与大小
结合监控工具可实现长期趋势建模,优化内存配置策略。

4.4 -XX:ZTrace:跟踪ZGC内部事件辅助定位延迟瓶颈

理解ZGC的内部追踪机制
ZGC(Z Garbage Collector)通过`-XX:ZTrace`参数启用内部事件追踪,帮助开发者深入分析垃圾回收过程中的延迟来源。该参数可输出GC周期中各阶段的精确时间戳与状态变化。
java -XX:+UseZGC -XX:ZTrace=gc,start,end,thread_wait -Xmx4g MyApp
上述命令启用了ZGC,并指定追踪GC开始、结束及线程等待等关键事件。参数值为逗号分隔的事件类型,用于精细化控制日志输出。
常用追踪事件类型
  • gc:记录整个GC周期的启动与完成
  • start:标记应用线程或GC线程的启动
  • end:对应操作的结束点
  • thread_wait:揭示线程因安全点或同步阻塞的等待时长
结合日志定位延迟瓶颈
通过分析输出的追踪日志,可识别长时间的线程暂停或GC阶段延迟,进而优化堆大小、调整并发线程数,提升应用响应性能。

第五章:生产环境最佳实践总结

配置管理与环境隔离
在生产环境中,统一的配置管理至关重要。推荐使用环境变量或专用配置中心(如Consul、Apollo)管理不同环境的参数。避免将敏感信息硬编码在代码中。
  • 开发、测试、预发布和生产环境应完全隔离
  • 使用Kubernetes ConfigMap和Secret分离配置与镜像
  • 所有配置变更需通过CI/CD流水线自动部署
监控与日志聚合
实时监控系统健康状态是保障服务稳定的核心。建议采用Prometheus收集指标,Grafana展示面板,ELK(Elasticsearch, Logstash, Kibana)集中处理日志。
# Prometheus scrape配置示例
scrape_configs:
  - job_name: 'go_service'
    static_configs:
      - targets: ['10.0.0.1:8080']
    metrics_path: '/metrics'
    scheme: 'http'
自动化发布与回滚机制
实施蓝绿部署或金丝雀发布策略,降低上线风险。结合健康检查自动判断发布结果,失败时触发快速回滚。
发布策略适用场景回滚时间
蓝绿部署关键业务系统< 2分钟
金丝雀发布A/B测试、新功能验证< 5分钟
安全加固措施
生产系统必须启用最小权限原则。容器以非root用户运行,网络策略限制服务间访问,定期扫描镜像漏洞。

镜像安全流程:代码提交 → CI构建 → SAST扫描 → SBOM生成 → 漏洞检测 → 推送私有Registry → 准入控制器校验 → 部署

ZGC 参数优化与 GC 触发机制解析分享 本文深入探讨了 ZGC(Z Garbage Collector)参数优化与 GC 触发机制,旨在帮助开发者理解如何通过合理配置 ZGC 的参数来降低 Allocation Stall,提高系统吞吐量和稳定性。文章分析了影响 ZGC 性能的关键因素,如 heap 设置、线程池配置等,并通过实际案例展示了不同参数设置对 GC 行为的影响。通过对 GC 触发机制的解析,本文提供了可行的优化策略,以有效减少系统停顿时间,实现高效的内存管理。 阅读详情

相关推荐

【Unity实战】HybridCLR热更快速集成

本文假设你已经通过UPM导入了HybridCLR、Addressables、il2cpp支持并具有一定的C#基础和Unity编辑器操作能力。

u012587406的博客 4995

JVM — JDK11垃圾回收器 ZGC

ZGC(The Z Garbage Collector)是 JDK 11 中推出的一款低延迟垃圾回收器,为实现以下几个目标而诞生的垃圾回收器,停顿时间不超过 10ms,停顿时间不会因堆变大而变长,支持 8MB~4TB 级别的堆(未来支持 16TB)ZGC 作为下一代垃圾回收器,性能非常优秀。ZGC 垃圾回收过程几乎全部是并发,实际 STW 停顿时间极短,不到 10ms。这得益于其采用的着色指针和读屏障技术。

qq_38658567的博客 3825

基于Pixhawk与OpenMV的无人机视觉引导精准降落系统设计与实现

本文详细介绍了基于Pixhawk飞控与OpenMV视觉模块的无人机精准降落系统设计与实现。系统通过OpenMV识别Apriltag标签,结合MAVLink通信将视觉数据发送给Pixhawk,实现厘米级精准降落。文章涵盖硬件连接、软件配置、核心代码逻辑解析及实战调试技巧,为无人机自动充电、物流配送等场景提供可靠解决方案。

weixin_29189377的博客 320

【JVM调优】ZGC常用参数解释

为了优化 Z Garbage Collector (ZGC) 在撮合系统中的内存使用,可以考虑以下几个方面的配置和调整。这些调整可以帮助改善系统性能和内存管理,提高撮合系统的整体效率。

个人视角下的技术领域探索 3047

vue使用 APlayer+Meting实现音乐播放,支持多平台音乐:网易云、腾讯、虾米、酷狗、百度

  我之前写过一篇博客:使用 APlayer 实现音乐播放器,虽然 APlayer 让我实现了想要的音乐播放器效果,但是音频列表 audio 的音频链接、音频封面、歌词等,是需要自己去补充的。   那么这些数据从哪里来呢?   我昨天有发愁一会儿会儿,也去搜了获取音乐列表的接口,可以发请求去获取数据嘛。   也有瞅见MetingJS,A powerful plugin connect APlayer and Meting,一个连接APlayer和Meting的功能强大的插件,附上GitHub地址:https

小R.的博客 4798

Codesys电子凸轮Cam表实战:从可视化配置到程序化构建

本文详细介绍了Codesys电子凸轮Cam表的实战应用,从可视化配置到程序化构建的全过程。通过包装机和印刷机案例,解析Cam表的基础设置、调试技巧及动态构建方法,帮助工程师快速掌握电子凸轮技术,提升运动控制精度和效率。

weixin_29309785的博客 298

分代ZGC:Java虚拟机中的低延迟垃圾收集器新纪元

本文主要介绍JDK21中的分代ZGC详解,包括染色指针、内存屏障等核心概念及ZGC JVM参数介绍 ZGC(Z Garbage Collector)是Java平台上的一种垃圾收集器,它是由Oracle开发的,旨在解决大堆的低延迟垃圾收集问题。ZGC是一种并发的分代垃圾收集器,它主要针对具有大内存需求和低停顿时间要求的应用程序。

若明天不见 2328

SerDes学习笔记:DFE均衡架构示例(USB3.1、PCIe3.0\4.0)

本文探讨了DFE均衡器架构在不同数据接口中的应用特性。研究表明,抽头数量随数据速率提升而增加,1-16抽头架构较为常见。通过PCIeGen3/4实例分析,对比了单抽头、双抽头和15抽头DFE的性能差异,证明多抽头结构能通过精细调节有效提升噪声容限和降低误码率。文章详细阐述了DFE工作原理,包括其通过反馈信号对输入信号的补偿机制,以及不同抽头对消除码间干扰的作用。实验采用8Gbps速率(125ps/UI)进行波形仿真,直观展示了均衡处理前后的信号变化,为理解信道均衡技术提供了重要参考。

一只豌豆象的博客 518

ZGC调优,亚毫秒级延迟GC,垃圾收集器

Java长期支持版本Java11发布时推出了ZGC, 之后的Java12 -16均有ZGC的一些更新。然而Java17的新特性已经敲定,确定没有关于ZGC的相关更新,也从另一方面说明了至Java17 ZGC已经比较稳定,可以作为比较稳定的GC垃圾回收器。相信未来ZGC必定会成为主流的Java垃圾回收期,那么盘一盘ZGC就是必然的了。 1 ZGC从何而来,有什么好处 1.1 ZGC 的命名 根据OpenJDK官方网站的说明ZGC其实并没有什么特殊意义,就是一个名字而已。起初只是为了致敬ZFS 文件系统,表示

JavaTechNorth的博客 3520

【Arduino 动手做】六舵机自平衡 Rotary Stewart 平台

《Arduino六舵机自平衡Rotary Stewart平台项目》 该项目展示了一个基于Arduino的六自由度Rotary Stewart平台,通过六个舵机实现动态平衡控制。设计采用激光切割框架和TAMIYA 70171套件,提供详细组装指南和开源固件(GitHub可获取)。开发者丹·罗耶分享了3D打印文件、视频演示及运动学优化需求,强调该平台可扩展应用于游戏控制(如Kerbal Space Program)或教育领域。项目链接包含完整资源包,鼓励用户参与改进并分享创作成果。该案例体现了Arduino在机

雕爷学编程 1092

5、数据计算与处理技巧全解析

本文深入解析了Tableau中的多种数据计算与处理技巧,涵盖LOD计算、日期与字符串处理、计数优化、数据混合限制及自定义总计等核心内容。通过实际案例和流程图,系统讲解了各技巧的应用场景、实现步骤与注意事项,并提供性能优化建议和常见问题解答,帮助用户提升数据分析效率与可视化精度。同时展望了未来数据计算技术的发展趋势,是Tableau用户进阶必备的全面指南。

peach的博客 82

G1到ZGC迁移必看,Java 13 ZGC启动参数配置避坑指南

掌握Java 13 ZGC的启动参数配置,轻松实现G1到ZGC的平滑迁移。适用于低延迟、高吞吐场景,详解-XX:+UseZGC、堆大小设置等关键参数调优方法,显著降低GC停顿。性能提升显著,迁移必看,值得收藏

QuickDebug的博客 771

深入剖析 Hive 中 CASE WHEN 与 IF 函数的性能差异:解锁高效数据处理的关键

CASE WHEN 函数堪称 Hive 中条件判断的多面手,它具备两种强大的语法形式,以应对各种复杂的业务逻辑。简单 CASE 表达式这种形式适用于对某一列的值进行直接的条件匹配。其语法如下:END例如,我们有一个记录学生成绩的表CASE scoreELSE 'D'搜索 CASE 表达式当业务逻辑需要更灵活的条件判断时,搜索 CASE 表达式便派上用场。它的语法为:CASEENDCASEELSE 'D'

2401_83088008的博客 1125

ZGC到底怎么配?一文讲透Java 13 ZGC最优启动参数组合(含生产环境案例)

掌握Java 13 ZGC的启动参数配置,轻松实现低延迟高吞吐。适用于大堆内存与响应时间敏感场景,详解ZGC核心参数调优方法,显著降低GC停顿。结合生产环境真实案例,助你快速落地高效配置方案,值得收藏。

FastDebug的博客 440

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

(Java 13 ZGC调优内幕):那些官方文档不会告诉你的启动参数技巧

掌握Java 13 ZGC的启动参数配置技巧,解决高延迟痛点。适用于大堆、低停顿场景,通过合理设置-XX:+UseZGC与并发线程数优化响应性能。关键调优参数全解析,值得收藏。

CodeIsle的博客 963

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ZGC从入门到精通:分代模式下必须掌握的4个JVM启动参数

掌握ZGC分代模式配置参数,轻松优化Java应用性能。本文详解G1与ZGC混合使用场景下4个关键JVM启动参数,涵盖低延迟、高吞吐配置方法,提升系统响应速度。实战必备,值得收藏

VarChat的博客 878

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java 13 ZGC调优实战:5个必须掌握的启动参数详解

掌握Java 13 ZGC的调优关键,本文详解5个核心启动参数,涵盖低延迟场景下的配置方法与性能优势,帮助优化GC停顿。深入解析ZGC适用场景与实战配置技巧,Java 13 ZGC的启动参数全解析,值得收藏。

LogicPlex的博客 943

ZGC分代模式怎么配?8个生产环境验证过的参数组合告诉你答案

掌握ZGC分代模式配置参数,轻松优化Java应用性能。本文分享8组经生产环境验证的参数组合,覆盖高并发、低延迟等典型场景,提升GC效率与系统稳定性。配置思路清晰,适配性强,值得收藏。

QuickTrans的博客 912

为什么你的ZGC停顿仍超10ms?Java 13启动参数配置错误的3大元凶

掌握Java 13 ZGC 的启动参数配置,有效降低GC停顿至10ms内。适用于高并发低延迟场景,通过合理设置-XX:+UseZGC、-Xmx与染色指针优化,解决响应延迟问题。三大常见配置误区深度解析,值得收藏。

ByteShoal的博客 960

ZGC启动参数配置难题终结者:从入门到精通的9步实战路径

轻松掌握Java 13 ZGC 的启动参数配置,9步实战路径详解低延迟场景下的高效调优方法,涵盖适用场景、关键参数与性能优势,助你快速落地ZGC。值得收藏

AlgoFun的博客 1026

【ZGC低延迟之谜】:深入解读Java 13关键启动参数

掌握Java 13 ZGC的启动参数,轻松实现低延迟高性能应用。适用于高并发、实时系统场景,通过-XX:+UseZGC等关键参数优化垃圾回收,显著降低停顿时间。深入解析配置方法与调优技巧,值得收藏。

InitPulse的博客 708

Java 13 ZGC启动参数配置全解析(ZGC调优稀缺实战手册)

掌握Java 13 ZGC的启动参数配置,解决高延迟场景下的内存回收难题。适用于大堆、低停顿系统调优,详解-XX:+UseZGC、-Xmx等关键参数设置方法,显著降低GC停顿时间,提升应用响应速度,ZGC实战调优指南值得收藏

DebugVibe的博客 499

ZGC在Java 13中的最佳实践(启动参数配置大揭秘)

掌握Java 13 ZGC的启动参数配置,有效提升低延迟应用性能。适用于高并发、大堆内存场景,通过-XX:+UseZGC等关键参数优化垃圾回收停顿。详解适用场景与调优技巧,帮助开发者实现高效稳定的应用运行,值得收藏。

BreakNexus的博客 718

【ZGC低延迟之谜】:深入剖析Java 13 ZGC必须启用的6个JVM参数

掌握Java 13 ZGC的启动参数配置,轻松实现毫秒级停顿与高吞吐。适用于大堆内存、低延迟场景,详解-XX:+UseZGC等6个关键JVM参数,揭示高效调优方法。配置简单,性能跃升,值得收藏。

DeepNest的博客 385

Java 13 ZGC启动参数配置全解析:如何用5个关键参数实现毫秒级停顿控制

掌握Java 13 ZGC 的启动参数配置,轻松实现毫秒级停顿控制。适用于高并发低延迟场景,通过-XX:+UseZGC等5个关键参数优化GC性能,显著提升应用响应速度,配置方法简单高效,值得收藏。

CodeVibe的博客 774

【Java 13 ZGC启动参数全解析】:掌握低延迟垃圾回收的关键配置

掌握Java 13 ZGC的启动参数配置,有效降低应用停顿时间,提升系统响应速度。适用于高并发、低延迟场景,详解-XX:+UseZGC、-Xmx等关键参数设置方法,优化垃圾回收性能,值得收藏。

Algorhythm的博客 902
上一篇: 自定义Starter必知的7个Condition条件注解(自动配置底层揭秘)
下一篇: 揭秘MyBatis注解与XML混用陷阱:90%开发者忽略的3个关键问题
quickcode
博客等级 码龄19年 146粉丝 1996原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值