【面试需了解】jvm垃圾回收机制-GC基础知识、jvm基本组成、查看、排查

news2024/11/28 13:37:42

前言

jvm垃圾回收机制-GC基础知识、jvm基本组成、查看、排查

文章目录

    • 前言
    • GC基础知识
      • 概述
    • JVM
      • 基本组成
        • 1. 虚拟机的组成
        • 2. jvm的内存区域
      • 查看jvm
      • 排查jvm问题
        • 1. 正常运行的系统
        • 2. 对于已经发生了OOM的系统

GC基础知识

概述

  1. 什么是垃圾

    1. 一个对象没有被引用,没有任何对象去引用它,那么它所占用的内存就是垃圾
    2. 几个对象相互循环引用,但是没有栈空间/外部对象去引用它们
  2. 如何定位垃圾

    1. 引用计数:不能解决循环引用
    2. 根可达算法、根搜索算法:根对象及其引用的对象是有用的(调用链),其他的都是垃圾
      1. 根对象:线程栈变量、静态变量、常量池、JNI指针
  3. 常见的垃圾回收算法

    1. 标记清除:Mark-Sweep
      1. 空间不连续,产生碎片
    2. 拷贝:Copying
      1. 连续没有碎片
      2. 浪费空间
    3. 标记压缩:Mark-Compact
      1. 没有碎片
      2. 效率偏低
  4. jvm内存分代模型-用于垃圾回收

    1. 分区
      1. 新生代:new、young
      2. 老年代:old
      3. 永久代(1.7)、元数据区(1.8)
    2. 新生代(Young):Eden+2个suvivor区;YGC回收
    3. 老年代(Old):存储顽固分子;老年代满了触发FGC
    4. GC Tuning(Generation):尽量减少FGC
      1. MinorGC=YGC:对新生代堆进行gc
      2. MajorGC=FGC:全堆范围的gc
  5. 垃圾回收器

    1. 类别

      1. Serial:年轻代-串行回收
      2. Parallel:年轻代-并行回收
      3. ParNew:年轻代-配合CMS的并行回收
      4. SerialOld:老年代
      5. ParallelOld:老年代
      6. ConcurrentMarkSweep:老年代;并发-垃圾回收和应用程序同时运行,降低STW的时间(200ms)
      7. G1
      8. ZGC
      9. Shenandoah
      10. Eplison

      在这里插入图片描述

    2. jdk1.8默认PS+ParallelOld

  6. jvm调优

    1. 第一步:了解生成环境下的垃圾回收器组合

JVM

基本组成

1. 虚拟机的组成

java能实现跨平台,是因为在不同平台上运行不同的虚拟机决定的,因此java文件的执行不直接在操作系统上执行,而是通过jvm(虚拟机)执行

2. jvm的内存区域

  • 运行时数据区
    • 方法区(1.7):jvm
    • 元空间(1.8):内存
    • 线程私有
      • 虚拟机栈:Java方法
      • 本地方法栈:Native方法(非Java,直接与操作系统交互)
      • 程序计数器–不会发生内存泄漏

查看jvm

  • 可视化工具:控制台->jvisualvm

排查jvm问题

1. 正常运行的系统

  1. 可以使用jmap来查看/VM中各个区域的使用情况
  2. 可以通过jstack来查看线程的运行情况,比如哪些线程阻塞,是否出现了死锁
  3. 可以通过jstat命令来查看垃圾回收的情况,特别是fullgc,如果发现fullgc比较频繁,那么就得进行调优了
  4. 通过各个命令的结果,或者jivisualvm等工具来进行分析
  5. 首先,初步猜测顺繁发生fullgc的原因,如果颇繁发生fullgc但是又一直没有出现内存溢出,那么表示fgc实际上是回收了很多对象了,所以这些对象最好能在younggc过程中就直接回收掉,避免这些对象进入到老年代,对于这种情况,就要考虑这些存活时间不长的对象是不是比较大,导致年轻代放不下,直接进入到了老年代,尝试加大年轻代的大小,如果改完之后,fgc减少,则证明修改有效
  6. 同时,还可以找到占用CPU最多的线程,定位到具体的方法,优化这个方法的执行,看是否能避免某些对象的创建,从而节省内存

2. 对于已经发生了OOM的系统

  1. 一般生产系统中都会设置当系统发生了OOM时,生成当时的dump文件(-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=/usr/local/base
  2. 利用jvisualvm等工具来分析dump文件
  3. 根据dump文件找到异常的实例对象,和异常的线程(占用CPU高),定位到具体的代码
  4. 然后再进行详细的分析和调试

总之,调优不是一蹴而就的,需要分析、推理,实践,总结,再分析,最终定位到具体的问题

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring MVC详解(学习总结)

一、Sprig MVC简介1.1介绍1.2MVC是什么 二、Spring MVC实现原理2.1核心组件2.2工作流程 三、第一个Spring MVC四、常用注解五、参数绑定5.1URL风格参数绑定5.2RESTful风格的URL参数获取5.3映射Cookie5.4使用POJO绑定参数5.5JSP页面的转发和重定向 六、Spring MVC数据绑定6.1基本…

vulnstack(红日)内网渗透靶场二: 免杀360拿下域控

前言 在我之前的文章vulnstack(一)打靶,我主要依赖Cobalt Strike进行后期渗透测试,这次我计划使用Metasploit框架(MSF)来进行这个阶段的工作。这个靶场与之前的不同之处在于它的WEB服务器安装了360安全卫士。虽然这增加了挑战的难度,但只要我…

Shell脚本攻略:循环语句while、until

目录 一、理论 1.while 2.until 3.break 4.continue 二、实验 1.实验一 2.实验二 3.实验三 4.实验四 5.实验五 一、理论 1.while (1)while用法 while循环满足条件执行,不满足不执行。 用于不知道循环次数,需要主动结束循环或达到条件结束…

二开项目权限应用全流程-按钮级控制

二开项目权限应用全流程-按钮级控制 员工A和员工B都可以访问同一个页面(以员工管理为例),但是员工A可以导出excel,员工B就不可以导出excel(看不到按钮) 思路 用户登陆成功后,用户可以访问的按钮级别权限保存在point…

阿里巴巴淘天集团后端暑期实习面经

目录 1.面向对象三大特性2.重写和重载3.protected 关键字和 default 关键字的作用范围4.栈帧中有哪些东西?5.堆中有哪些区域?6.new 一个对象存放在哪里?7.CMS 收集器回收阶段8.CMS 收集器回收过程哪些需要暂停线程?9.HashMap JDK …

手机行业再多一条“鲶鱼”,小度青禾要打一场漂亮突围战?

文 | 智能相对论 作者 | 佘凯文 智能手机到底还是不是一门好生意? 在换机周期被无限拉长、市场竞争越发激烈、高端市场迟迟无法突破等共同背景下,智能手机到底还是不是一门好生意,成为行业内这两年被热议的话题之一。 由TechInsights发布…

腾讯云轻量应用服务器CPU主频多少?型号?

腾讯云轻量应用服务器CPU型号是什么?轻量服务器处理器主频?腾讯云服务器网账号下的CPU处理器型号为2.5GHz主频的Intel(R) Xeon(R) Gold 6133 CPU和2.4GHz主频Intel(R) Xeon(R) CPU E5-26xx v4,腾讯云轻量应用服务器不支持指定底层物理服务器的…

NodeJs内存快照分析

(头等人,有本事,没脾气;二等人,有本事,有脾气;末等人,没本事,大脾气。——南怀瑾) NodeJs内存分析的必要性 回顾过去,我们排查web应用问题的途径…

36岁大龄程序员全职接单三个月的感触

36岁大龄程序员,原以为逃过35岁危机,没想到在年前被优化,拿了N2,12w薪资后,我开始了全职接单的道路。现在每个月平均收入有个20K,一路走来挺有感触的,把自己的经验分享给大家。 赚钱&#xff0…

【Jmeter】生成html格式接口自动化测试报告

jmeter自带执行结果查看的插件,但是需要在jmeter工具中才能查看,如果要向领导提交测试结果,不够方便直观。 笔者刚做了这方面的尝试,总结出来分享给大家。 这里需要用到ant来执行测试用例并生成HTML格式测试报告。 一、ant下载安…

Android13蓝牙 停用绝对音量功能

Android13蓝牙 停用绝对音量功能 文章目录 Android13蓝牙 停用绝对音量功能一、前言二、代码实现分析过程1、查看SettingsLib源码资源2、查看原生Setitntgs 相关字符(1)xml 布局文件中的显示(2) java 代码文件中的控制串口上控制&…

Vue注册界面精美模板分享

文章目录 🐒个人主页🏅Vue项目常用组件模板仓库📖前言:🎀源码如下: 🐒个人主页 🏅Vue项目常用组件模板仓库 📖前言: 本篇博客主要提供vue组件之注册组件源码…

硬件软件【部署】

开发板和主机 1.功能不同:帮助开发者进行嵌入式系统的开发和调试,具有较强的硬件拓展能力,可以连接各种传感器/执行器等外设。主机为满足一般的计算需求而设计,具备更强的计算和图形处理能力。 2.架构不同:开发板通常…

解决CentOS7用户管理报错问题:密码设为Aa12345@时报错,为什么Bji230309@可以而Aa12345@不行?

场景: 早上博友(CSDN博客朋友)给我发私信,问了一个问题: CentOS7上面运行的项目,在用户管理添加新用户时,密码设置成Aa12345时,会报错:Cannot read property message of undefined。查看/etc/…

【Apache 配置与应用】

目录 一、构建虚拟 Web 主机httpd服务支持的虚拟主机类型包括以下三种 二、基于域名的虚拟主机1.为虚拟主机提供域名解析2.为虚拟主机准备网页文档3.添加虚拟主机配置4.设置访问控制5.加载独立的配置文件6.在客户机中访问虚拟 Web 主机 三、基于IP地址的虚拟主机四、…

QSettings Class

QSettings类 QSettings类公共类型&#xff08;枚举&#xff09;公有成员函数静态成员函数函数作用这个类写文件的特征 QSettings类 QSettings类提供持久的独立于平台的应用程序设置。 头文件:#include< QSettings >qmake:QT core继承&#xff08;父&#xff09;:QObje…

Springboot +spring security,认证方式---实现HTTP摘要认证

一.简介 这篇文章来学习下security的认证方式其中的HTTP摘要认证 二.Spring Security的认证方式 2.1什么是认证 认证: 就是用来判断系统中是否存在某用户&#xff0c;并判断该用户的身份是否合法的过程&#xff0c;解决的其实是用户登录的问题。认证的存在&#xff0c;是为…

JavaScript高级三、深入面向对象

零、文章目录 JavaScript高级三、深入面向对象 1、编程思想 &#xff08;1&#xff09;面向过程介绍 面向过程&#xff1a;分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候再一个一个的依次调用就可以了。 &#xff08;2&…

Android 架构模式

1.三个基本架构 ①MVC&#xff08;Model-View-Controller&#xff09; Model&#xff1a;代表数据模型&#xff0c;管理数据状态。 View&#xff1a;视图&#xff0c;即呈现给用户的UI&#xff0c;包括布局文件及Activity。 Controller&#xff1a;控制者&#xff0c;负责处…

KubeVirt技术介绍及实验部署

虚拟化简介 在云计算发展中&#xff0c;有两类虚拟化平台&#xff1a; openstack&#xff08;iaas&#xff09;&#xff1a;关注于资源的利用&#xff0c;虚拟机的计算&#xff0c;网络和存储Kubernetes&#xff08;pass&#xff09;&#xff1a;关注容器的编排调度&#xff…