类的生命周期

加载、链接、初始化(是类的初始化)、使用(对象的初始化)、卸载(GC)

链接:验证、准备、解析

类加载

JDK9的升级点:扩展类加载器改成了平台类加载器。 java中很多的包分成不同的模块,这些模块指定了类加载器。

类加载机制的特性:

保证加载的类的安全性、唯一性

对象创建过程

类加载判断,没有的话,先加载类

分配内存:指针碰撞or空闲列表。  竞争CAS+TLAB

初始化:设置默认值

设置对象头:

执行<init>方法

字节码文件中:

<init>是对 对象级别的变量和非静态代码块进行初始化

<cinit> 是对静态变量或静态代码块来初始化

对象内存分配方式

指针碰撞  空闲列表

是由垃圾回收器决定使用哪种。 CMS是空闲列表,较少STW

对象创建线程竞争

TLAB : thread local allocation buffer

CAS:硬件提供的原子指令, 分配内存时是使用CAS原子性的更新内存分配指针。

对象内存布局

对象在内存中的布局:对象头(Mark Word、Klass Pointer 、数组长度) 、实例数据、对齐填充。

对象的大小必须是8字节的倍数。

内存泄露原因

  • 静态集合
  • 静态类型的单例
  • 数据库连接、IO 、Socket连接, 不再使用的时候,需要调用close方法关闭,否则相应的对象Connection、Statement、ResultSet、Session等不会被GC回收。
  • 变量不合理的作用域, 作用域大于其使用范围
  • ThreadLocal变量, 线程池中使用这种类型变量

三色标记

在CMS垃圾收集器中,实现了真正的并发,指的是gc线程和用户线程并发执行,三色标记是用于这种并发下的标记。

优点:

  • 减少STW
  • 避免了GC Root可达性分析方法中的重复标记问题,提升标记阶段的效率

并发标记存在问题:多标和漏标, 多标产生浮动垃圾,下次gc回收; 漏标采用增量更新或原始快照的方式解决, CMS 增量更新, G1 原始快照

G1垃圾回收器

  1. 内存布局
  2. 垃圾回收算过程
  3. 垃圾回收算法:复制,整体标记整理
  4. 特点:要求大内存, 可以配置最大停顿时间,会按照这个时间指定垃圾回收计划, 目的是减少STW的时间
  5. 对象在一个Region分配内存,采用指针碰撞的方式

对象一定分配在堆上吗

逃逸分析 + 热点代码  -》 栈上分配

  • 减轻gc压力
  • 确定了变量不会逃逸出线程,就不存在锁竞争问题,会做锁消除的优化
  • 标量替换

JVM监控

JVM参数

  1. 内存大小
  2. 垃圾回收器
  3. 并行垃圾收集器参数
  4. gc打印配置
  5. 。。。。。

线上服务器CPU占用过高

进程 -》 线程 -》 报错内容

1. top   找cpu占用高的进程

2. top -H -p pid 找到对应的线程pid

3.  printf '0x%x\n' 线程pid (线程pid的十六进制)

4. jstack 进程pid | grep 16进制线程pid -A20    :  展示线程的堆栈信息

频繁minor gc

1. jstat -gc pid 1000 10   确认是否是频繁minor gc

2. 结合Full GC来看,年轻代是否设置的太小

3. 代码中是否产生很多无效对象

频发Full GC

JVM调优工具-CSDN博客

1. jstat  确定当前young gc和full gc的频率

2. 查看当前JVM参数, 结合实际业务情况,确定参数的配置是否合理。比如,当前业务是否产生大对象、是否有长期存活的对象、是否Survivor区太小触发动态年龄判断、老年代空间担保机制?在上述分析的基础上,调整JVM参数做测试

对象动态年龄判断机制导致的full gc较为频繁可以先试着优化下JVM参数,把年轻代适当调大点
触发老年代担保机制,可能导致full gc次数比young gc次数多


3. 借助jmap命令查看内存中的对象,大概确定是什么对象在频繁gc

jmap -histo <进程号>

4. jstack  确定这个对象在代码哪里产生的

5. 考虑是否出现了内存泄露

6. 接口JVM工具分析dump文件

OOM定位

OOM原因:

排查, 分析dump文件: 

OOM会导致JVM退出吗

子线程OOM 不会导致JVM退出,无论子线程是否捕获异常。 如果子线程未捕获异常,这个子线程会结束,因为此时还有主线程在运行,JVM不会退出。

主线程OOM,如果捕获了这个异常,不会退出;如果未捕获,会退出,这是因为JVM中没有其他非守护线程来保持程序的执行。

常量池

Class常量池:Class二级制文件的一部分,Class常量池中的内容包括

运行时常量池:Class文件被加载在JVM中, Class常量池就称之为运行时常量池了。

字符串常量池:是运行时常量池的一部分, jdk1.6及之前都是存在方法区的, jdk1.7及之后,字符串常量池移动到了堆内存中存储。

JVM退出的情况

GC是在任意时刻都能进行的吗

GC只能在安全点才能执行,JVM中, 安全点是程序执行的某些特殊位置。安全点的设置确保了当线程暂停时,程序的状态是可知的、一致的。

作用:

1. 垃圾收集

        垃圾回收时,JVM要暂停所有应用线程(GC暂停),确保不会有线程在操作内存,同时,状态的快照是可以确定的,以便GC工作。

2. 堆栈遍历

        在执行线程转储(Thread Dump)等操作时, JVM需要安全的遍历线程栈,这时需要安全点。

3.性能损耗最小

        通过在最可能长时间运行的指令设置安全点,JVM可以减少程序暂停的频率,从而降低性能损耗。

安全点的触发条件:

1.方法调用:每次方法调用都是一个潜在的安全点

2. 循环回跳:长时间循环中间会插入安全点检查

3. 异常处理:处理异常时,也会检查是否到达安全点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94645.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94645.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/94645.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webpack开发模式与生产模式(webpack --mode=development/production“, )

webpack开发模式与生产模式的区别webpack的development&#xff08;开发模式&#xff09;和production&#xff08;生产模式&#xff09;是两种常见的构建环境配置&#xff0c;主要区别体现在构建速度、代码优化和调试支持等方面。开发模式 (development)目标&#xff1a;注重开…

当自然语言遇上数据库:Text2Sql.Net的MCP革命如何重新定义开发者与数据的交互方式

想象一下&#xff0c;在IDE中对AI助手说"帮我找出本月销售额最高的前10个产品"&#xff0c;然后它不仅能理解你的意图&#xff0c;还能直接生成并执行SQL查询&#xff0c;返回准确结果——这不是科幻&#xff0c;而是Text2Sql.Net的MCP集成带来的现实。 &#x1f3af…

2025流程图模板和工具深度评测:AI如何提升绘图效率80%?

引言&#xff1a;流程图模板的价值革命 在数字化办公的浪潮中&#xff0c;流程图已从单纯的"业务说明工具"进化为跨部门协作的"视觉语言"。据智研咨询2025年报告显示&#xff0c;规范使用流程图模板可使团队沟通效率提升40%&#xff0c;错误率降低58%。无…

WebSocket实时通信系统——js技能提升

2. WebSocket实时通信系统 功能概述 实现完整的WebSocket通信系统&#xff0c;支持实时消息推送、连接管理、心跳检测和自动重连。 技术难点 WebSocket连接生命周期管理消息序列化和反序列化心跳机制和连接保活错误处理和重连策略多组件状态同步 实现思路 2.1 WebSocket管理器 …

Spring AI 入门指南:三步将AI集成到Spring Boot应用

无需深入AI底层实现&#xff0c;Java开发者也能快速构建智能应用本文将介绍如何使用 Spring AI 在 Spring Boot 项目中快速集成 AI 能力。通过三步操作——添加依赖、配置 API 凭证和编写调用代码&#xff0c;Java 开发者可以轻松构建 AI 应用。一、Spring AI 简介Spring AI 是…

OOM问题排查思路及解决方案

OOM问题原因&#xff1a; 根本原因是创建的对象数量超过JVM堆内存容量&#xff0c;且这些对象无法被GC回收场景&#xff1a; 1.本地缓存了用户态&#xff0c;用户量急剧上升导致内存溢出&#xff0c;如使用HashMap本地缓存10万用户数据&#xff0c;每 个用户对象约2KB&#xf…

梨花教育暖心鹏城:深圳市养老护理院里“时光绽放”,用声音点亮银发精神之光

2025年8月24日&#xff0c;在深圳这座充满活力与梦想的城市&#xff0c;一场温暖人心的公益活动在深圳市养老护理院温情上演。梨花教育策划并组织了“梨花・时光绽放”公益活动&#xff0c;旨在通过声音的魅力&#xff0c;为市养老护理院的老人们送去关怀与欢乐&#xff0c;丰富…

力扣100+补充大完结

力扣100分类一、Java基础代码模板1. 基础输入输出模板import java.util.Scanner;class Solution {public static int linkedListOperation() {// 链表操作实现return 0;}public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.next…

SSM从入门到实战:3.3 SpringMVC数据绑定与验证

&#x1f44b; 大家好&#xff0c;我是 阿问学长&#xff01;专注于分享优质开源项目解析、毕业设计项目指导支持、幼小初高的教辅资料推荐等&#xff0c;欢迎关注交流&#xff01;&#x1f680; &#x1f4d6; 本文概述 本文是SSM框架系列SpringMVC基础篇的第三篇&#xff0…

ctfshow_萌新web16-web20-----文件包含日志注入

_萌新web16解开md5?c36d_萌新web17-----文件包含禁用了php关键字&#xff0c;这个题禁了远程文件包含,进行日志注入发现日志中有user-agent信息&#xff0c;因此我们可以在user-agent中写入木马抓包burpsuitUser-agent:<?php eval($_POST[cmd])?>抓包然后连接蚁剑_萌新…

Flink的CheckPoint与SavePoint

Flink的Checkpoint&#xff08;检查点&#xff09;和Savepoint&#xff08;保存点&#xff09;是两种不同的状态快照机制&#xff0c;主要区别如下&#xff1a;1. ‌Checkpoint‌‌核心功能‌&#xff1a;周期性触发的容错机制&#xff0c;用于故障恢复时保证状态一致性57。‌触…

Ansible 自动化运维工具:介绍与完整部署(RHEL 9)

Ansible 自动化运维工具&#xff1a;介绍与完整部署&#xff08;RHEL 9&#xff09;Ansible 的介绍与安装 一、自动化运维的必要性 传统手动运维依赖图形/命令行界面、检查清单或记忆执行任务&#xff0c;存在以下核心问题&#xff1a; 易出错&#xff1a;易跳过步骤或执行错误…

构建生产级 RAG 系统:从数据处理到智能体(Agent)的全流程深度解析

文章目录一、 整体架构设计&#xff1a;迈向智能体&#xff08;Agent&#xff09;驱动的 RAG二、 数据准备与预处理&#xff1a;构建高质量知识库2.1 数据加载与初步提取2.2 多策略分块 (Multi-Strategy Chunking)逻辑分块&#xff1a;按故障章节和关键说明传统分块&#xff1a…

Duplicate Same Files Searcher v10.7.0,秒扫全盘重复档,符号链接一键瘦身

[软件名称]: Duplicate Same Files Searcher v10.7.0 [软件大小]: 3.3 MB [软件大小]: 夸克网盘 | 百度网盘 软件介绍 Duplicate Same Files Searcher&#xff08;重复文件搜索&#xff09;是一款强大且专业的重复文件查找与清理工具。通过使用该软件&#xff0c;用户可以方…

C/C++ 数据结构 —— 树(2)

​ &#x1f381;个人主页&#xff1a;工藤新一 ​ &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; ​ &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 ​ &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章…

EEA架构介绍

前言 本文主要对EEA架构的理解进行了记录&#xff0c;以加深理解及方便后续查漏补缺。 EEA架构 硬件架构 EEA架构作用 提升算力利用率、数据统一交互&#xff0c;实现整车功能协同、缩短线束、降低重量、降低故障率、提升装配自动化 EEA架构发展趋势 分布式–>域集中式–>…

【目标跟踪】《FastTracker: Real-Time and Accurate Visual Tracking》论文阅读笔记

0.参考 论文:https://arxiv.org/pdf/2508.14370v1 代码:github.com/HamidrezaHashempoor/FastTracker, huggingface.co/datasets/HamidrezaHashemp/FastTracker-Benchmark. 1.摘要 提高多目标跟踪在多物体跟踪上的性能(从前主要是针对行人场景做的优化)。 该方法包含两…

C++ 内存安全与智能指针深度解析

C 内存安全与智能指针深度解析面试官考察“野指针”&#xff0c;实际上是在考察你对 C “资源所有权” (Ownership) 和 “生命周期管理” (Lifetime Management) 的理解。现代 C 的答案不是“如何手动避免”&#xff0c;而是“如何自动化管理”。第一部分&#xff1a;核心知识点…

Vue SFC Playground 如何正确引入 naive-ui

网罗开发&#xff08;小红书、快手、视频号同名&#xff09;大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等方…

音频转文本技术详解:API接口、实用示例与最佳实践

音频转文本技术详解&#xff1a;API接口、实用示例与最佳实践 目录 概述接口类型与模型说明支持的音频格式与文件大小限制快速入门音频转录&#xff08;Transcription&#xff09;音频翻译&#xff08;Translation&#xff09;支持的语言列表时间戳功能处理较长音频上下文提示…