面: 1.gvm调优问题 2.优化对象生命周期详细讲一下 3项目里为什么出现了没有回收垃圾的情况 4.微服务了解多少 5.开源的框架有多少了解 6.HashMap的基本原理(包ConcurrentHashMap 7.跳表 8.java线程池 9.设计模式 10.java中间件 11.Kafka和RabbitMQ 12.redis的基本类型和原理,实现限流功能 13.常见的Linux命令 14.mysql索引的数据结构 15.nginx是什么 https://www.xiaohongshu.com/explore/67f5081d000000001c002e9e?xsec_token=ABNiN3-ExlGdsQkJPCeKeRCnjwc5p2NLfxi3r5hJcBCBg=&xsec_source=pc_search&source=web_search_result_notes
GVM调优
GVM(Garbage Collection Virtual Machine,垃圾回收虚拟机)调优是针对 Java 虚拟机(JVM)进行优化,以提升应用程序的性能,尤其是在内存管理和垃圾回收方面。垃圾回收是 JVM 中的一个核心组件,它负责自动管理内存,通过回收不再使用的对象来避免内存泄漏和提升性能。然而,垃圾回收的过程也可能导致性能瓶颈,尤其是在大规模应用中。
GVM 调优的主要目标: 减少垃圾回收的停顿时间,尤其是对 响应时间敏感 的应用程序。
提高吞吐量,即应用程序的计算能力,减少垃圾回收的时间消耗。
降低内存占用,避免频繁的垃圾回收,延长内存的使用时间。
优化垃圾回收的选择和策略,根据不同的应用场景选择合适的垃圾回收器。
GVM 调优的关键因素: 选择适合的垃圾回收器(GC): JVM 提供了多种垃圾回收器,它们各自具有不同的优缺点,适用于不同的应用场景。选择合适的垃圾回收器是优化 GVM 性能的关键。
Serial GC:
-XX:+UseSerialGC
适用于单线程应用,垃圾回收时暂停所有应用线程。一般用于内存较小的单核机器或要求较低的延迟的场合。
Parallel GC(并行回收):
-XX:+UseParallelGC
适用于多核机器,采用多线程并行进行垃圾回收,能提升吞吐量,适合吞吐量优先的应用。
CMS GC(并发标记清除):
-XX:+UseConcMarkSweepGC
适用于低延迟场景。它通过与应用线程并发执行来减少停顿时间,避免长时间的停顿。适合要求低延迟的应用,但会导致更多的内存占用和复杂的调优。
G1 GC(Garbage First):
-XX:+UseG1GC
适用于大内存和低延迟需求的应用。G1 GC 旨在同时优化延迟和吞吐量。它将堆分为多个区域,采用增量回收的方式,更好地控制停顿时间。G1 是一个灵活且现代的垃圾回收器,适合需要同时平衡延迟和吞吐量的应用。
ZGC 和 Shenandoah(低延迟垃圾回收器):
适用于极低延迟要求的应用,支持非常短的停顿时间,特别适合大规模分布式系统和高性能的计算任务。
调优堆的大小和各个区域的比例: JVM 堆内存分为不同的区域,主要包括年轻代(Young Generation)、老年代(Old Generation)和持久代(Metaspace)。调优堆的大小和各个区域的比例有助于减少垃圾回收的频率和停顿时间。
设置堆大小:
-Xms
-Xmx
设置年轻代大小:
-XX:NewSize=
-XX:MaxNewSize=
设置老年代大小:
-XX:InitialTenuringThreshold=
-XX:MaxTenuringThreshold=
设置大对象的处理:
-XX:SurvivorRatio=
-XX:TargetSurvivorRatio=
调优垃圾回收的停顿时间:
G1 GC 调优停顿时间:
-XX:MaxGCPauseMillis=
JVM GC 日志:
启用 GC 日志有助于观察垃圾回收的行为并进一步优化:
bash 复制 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/to/gc.log -XX:+PrintGCDetails 打印详细的垃圾回收日志。
-XX:+PrintGCDateStamps 为日志添加时间戳。
-Xloggc 用来指定日志输出文件路径。
启用并行处理:
通过配置并行垃圾回收,可以显著提高多核系统的吞吐量:
-XX:+UseParallelGC:启用并行垃圾回收,适合多核系统。
-XX:ParallelGCThreads=
优化 GC 执行频率:
GC 最小暂停时间目标:
-XX:GCTimeRatio=
垃圾回收间隔时间:
-XX:MinHeapFreeRatio=
性能监控和调试:
使用 JVM 性能监控工具(如 JVisualVM 或 JConsole)来监控内存使用情况、垃圾回收时间等指标。
根据 JVM 日志和性能监控工具的结果,进一步调整垃圾回收器的设置,优化系统的整体性能。
线程池和并发调整: 线程池的调优对多线程应用的性能至关重要。对于 Java 应用,ExecutorService 可以帮助管理线程池。使用合适的 核心线程数 和 最大线程数,避免线程创建和销毁的开销。
回复