96SEO 2026-02-19 12:43 0
。

本系列将给大家构建JVM核心知识点全局知识体系#xff0c;本文是JVM第一讲#xff0c;JVM相关知识体系详解和相关面试题梳理。
(面试常见题目梳理)1、运行时数据区2、服务器使用的什么垃圾收集器CMS
垃圾收集的特点为什么低延迟有哪些垃圾回收算法优缺点3、哪些对象可以作为
Roots4、有哪些类加载器双亲委派模式哪些场景是打破双亲委派模式5、线上服务器出现频繁
1、可以知道设备是怎么识别我们编写的Java程序的规避它在使用中的
虚拟机提供了许多配置参数用于满足不同应用场景下对程序性能的需求你可以针对自己的应用最优化匹配运行参数
1、阅读源码。
读源码其实也是一种实战锻炼可以帮助你从代码逻辑中彻底理解
系统的实际运行机制。
当遇到问题时可以直接从代码层面进行定位、分析和解决问题2、亲自动手实践
1、需了解内存模型各部分作用,保存哪些数据2、类加载双亲委派加载机制,常用加载器分别加载哪种类型的类3、GC分代回收的思想和依据以及不同垃圾回收算法的回收思路和适合场景4、性能调优常有JVM优化参数作用参数调优的依据常用的JVM分析工具能分析哪些问题以及使用方法下图主要表示的逻辑关系用来将所有知识点放到一张图里帮助你理解。
--》字节码是一套规范需要特定的解析器翻译成操作系统底层系统指令然后让CPU执行
周志明《深入理解JVM.2nd》笔记极客时间课程《深入拆解Java虚拟机》郑雨迪
方法区存放类信息、常量池、静态变量堆内存存放实例对象、数组栈内存虚拟机栈
数组对象的创建对象头信息对对象进行必要的设置对象的访问定位通过栈上的引用数据来操作堆中具体对象
场景1对象创建太多超出了最大堆容量限制**虚拟机栈和本地方法栈
持久层没有limit限制导致大批量数据被查询场景2、代码中存在**死循环
泛化调用时使用姿势不对导致了循环调用json序列化使用姿势不对也会导致循环调用
一个对象已经不需要再使用本该被回收然而另外一个正在使用的对象持有它的引用从而导致它不能被回收
对应三色标记没有子节点将本节点变为黑色。
有子节点则当前节点变为黑色子节点变为灰色最终标记
对应三色标记此时黑色对象就是存活的对象白色对象就是已消亡可回收的对象并发清除
使用G1收集器时将堆划分为相等的region并且能和整个堆中任意的对象发生引用关系优先回收价值大的region。
每个Region都有一个Remembered
Set用来记录该Region对象的引用对象所在的Region。
通过使用Remembered
G1收集器的设计目标是取代CMS收集器它同CMS相比在以下方面表现的更出色
由于CMS需要并发标记整个old区所以极端情况下(大堆)标记时间会很长而G1会选择性的选择GC
region。
G1在停顿时间上添加了预测机制用户可以指定期望停顿时间所以G1时间更可控。
该收集器是把整个堆新生代、老年代划分成多个固定大小的区域每次根据允许停顿的时间去收集垃圾最多的区域。
G1更优
CMS使用标记-清除法会产生内存碎片若触发内存碎片整理也会加长GC时间。
相对而言G1只会选择性的选择region故G1浮动垃圾更严重。
G1无论是为了垃圾收集产生的内存占用还是程序运行时额外执行负载都要比CMS高。
作用类加载器将字节码加载到内存并对数据进行校验解析和初始化最终形成可被虚拟机直接使用的
第一种继承ClassLoader抽象类重写loadClass方法在这个方法可以自定义要加载的类使用的类加载器。
第二种使用线程上下文加载器可以通过java.lang.Thread类的setContextClassLoader()方法来设置当前类使用的类加载器类型。
Tomcat容器也存在破坏双亲委派的情况来实现不同应用之间的资源隔离。
tomcat自定义了类加载器重写loadClass方法使其优先加载自己目录下的class文件来达到class私有的效果
场景2什么时候回收在堆内存不足时触发使用可达性算法判断对象是否存活
新生代Serial、PraNew(配合CMS使用)、Parallel
目标最短回收停顿时间如何解决STW将GC过程细化区分出必须STW场景和非必须STW场景。
从业务场景出发解决问题缺点1标记-清除算法无法清理浮动垃圾缺点2并发清理可能出现“Concurrent
不会产生内存空间碎片目标实现指定的GC暂停时间同时还能保持较高的吞吐量重点概念卡表标记老年代是否存在对新生代的引用G1适用场景
追求RT对外提供服务的服务器GC耗时严重大堆jvm多核服务器并发GC
Eden所剩空间经验值YGC耗时在100ms以内50ms以内尤佳
-XX:CMSInitiatingOccupancyFaction老年代可用内存大于历次年轻代GC后进入老年代的对象的平均大小但是老年代已使用内存超过该参数指定的比例自动触发Full
GC经验值FGC最多几小时1次1天不到1次尤佳耗时在1s以内500ms以内尤佳
1、为啥调优如果使用合理的JVM参数设置在大多数情况下应该是不需要调优的少量场景需要调优配置监控告警
堆内存参数配置是否合理查看堆中对象的统计信息查看堆存储快照分析内存的占用情况查看堆各区域的内存增长是否正常查看是哪个区域导致的GC查看GC后能否正常回收到内存
限流方案是推送平台通过消费MQ执行职责链进行数据推送根据业务类型在当前推送队列中的数量进行限流原因网络请求跟不上上游MQ的投递速度导致内存逐渐被打满了瓶颈在于JVM
eden与serviver比例10:1:1修改为8:1:1避免年轻代过多进入老年代2、代码方面修改限流器设定一个jvm堆内存的使用率当超过这个阈值后对当前的消费线程进行阻塞直到使用率低于阈值后再进行放行并且设置一个最大阻塞时间超过该时间后放行该消费者线程
pid来导出dump文件通过pmap来查看下进程占用的内存情况pmap
首先按照上述学习思路理解总体知识点在全局上与知识体系之间的对应关系。
源代码通过编译器编译为字节码再通过类加载子系统进行加载到JVM中运行
在上文中着重介绍了字节码的结构这为我们了解字节码增强技术的实现打下了基础。
字节码增强技术就是一类对现有字节码进行修改或者动态生成全新字节码文件的技术。
接下来我们将从最直接操纵字节码的实现方式开始深入进行剖析。
因为类字节码是加载到JVM内存结构中的所以紧接着理解JVM内存结构。
通过其内存模型保证数据线程安全等这是JVM在并发上底层的支持。
很多人都无法区分Java内存模型和JVM内存结构以及Java内存模型与物理内存之间的关系。
本文从堆栈角度引入JMM然后介绍JMM和物理内存之间的关系,
作者程晓明。
这篇文章对JMM讲的很清楚了大致分三部分重排序与顺序一致性三个同步原语lockvolatilefinal的内存语义重排序规则及在处理器中的实现java
垃圾收集主要是针对堆和方法区进行程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的只存在于线程的生命周期内线程结束之后也会消失因此不需要对这三个区域进行垃圾回收。
GC-深入理解java虚拟机之垃圾回收算法CMS垃圾回收的基本流程对象引用类型
本文讲解讲解常见的垃圾收集算法首先思考三个问题1、哪些内存需要回收2、什么时候回收3、如何回收
做了探讨jvm的自动垃圾回收策略使得程序员摆脱了编程中繁杂的内存管理可以把精力专注于系统业务。
4之后引入的一个新的垃圾回收器。
同优秀的CMS垃圾回收器一样G1也是关注最小时延的垃圾回收器也同样适合大尺寸堆内存的垃圾收集官方在ZGC还没有出现时也推荐使用G1来代替选择CMS。
G1最大的特点是引入分区的思路弱化了分代的概念合理利用垃圾收集各个周期的资源解决了其他收集器甚至CMS的众多缺陷。
最为重要的更新之一适用于大内存低延迟服务的内存管理和回收。
在梳理相关知识点时发现美团技术团队分享的文章
新一代垃圾回收器ZGC的探索与实践比较完善包含G1收集器停顿时间瓶颈原理优化等,
最后围绕着调试和排错分析理解JVM调优参数动态字节码技术及动态在线调试的原理学会使用常用的调试工具和在线动态调试工具等。
Boot引起的“堆外内存泄漏”排查及经验总结可以为很多Native
本文主要梳理常见的JVM可视化的分析工具主要包括JConsole,
本文主要介绍Alibaba开源的Java诊断工具开源到现在已经1.7万个点赞了深受开发者喜爱。
具体解决在线问题比如这个类从哪个
debug难道只能通过加日志再重新发布吗?线上遇到某个用户的数据处理有问题但线上同样无法
debug线下无法重现是否有一个全局视角来查看系统的运行状况?有什么办法可以监控到JVM的实时运行状态?
Debug用来追踪代码的运行流程通常在程序运行过程中出现异常启用Debug模式可以分析定位异常发生的位置以及在运行过程中参数的变化并且在实际的排错过程中还会用到Remote
Eclipse/STS效率更高本文主要介绍基于IDEA的Debug和Remote
agent方式进行动态调试了解目前很多大厂开源的一些基于此的调试工具
纵横数据如何应对洪峰推送。
纵横系统最初定位为数据推送平台用于将公司内部系统的各项业务数据如合同、公共、采购计划等推送至对接的外部第三方平台。
后续随着业务的扩张逐渐出现了需要主动获取第三方系统的数据这一类的场景纵横慢慢从一个数据推送平台演变成了公司的业务数据出口网关。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback