JVM垃圾收集机制详解与性能调优(详细)

JVM垃圾收集机制详解与性能调优

概述

Java虚拟机中的垃圾收集主要是针对堆内存进行的,其目的是识别出已死对象,并回收其占用的内存。正确理解和使用垃圾收集机制,对于提升Java程序性能非常重要。

常见的垃圾收集器包括串行收集器、吞吐量收集器和并发收集器。下一节我先介绍垃圾收集的基本原理,然后详细对比不同收集器的工作机制、使用场景等。

垃圾收集基本原理

Java中的垃圾收集主要判断对象是否还被引用,从而判定对象是否可回收。

判断一个对象是否可回收,最基本的算法是引用计数法。它对每个对象进行引用统计,如果引用计数为0,则对象不可能再被使用,可以回收。

但仅靠引用计数法,无法解决循环引用的问题。所以Java虚拟机使用的主要是可达性分析算法,它通过GC Roots作为起点,对对象间引用关系进行可达性分析,判断哪些对象不可达,然后将其回收。

例如:

Object o1 = new Object();
Object o2 = new Object();o1.ref = o2; // o1引用o2
o2.ref = o1; // o2引用o1o1 = null; // 断开o1对o2的引用

上面代码中,通过GC Roots找不到引用o1和o2的路径,它们将不再可达,可以被回收。

序列收集器

Serial收集器是最基本的收集器,它是进行串行收集,也就是停止所有工作线程,以单线程方式进行堆内存的垃圾回收。

由于需要停止其他线程,会导致程序间断和较大停顿,所以适用于客户端环境。

吞吐量收集器

吞吐量收集器的目标是达到一个可控制的吞吐量,它规避了垃圾收集时导致的停顿问题。

通过并行收集老年代,并且不收集新生代以达到最小停顿。适用于后台批处理任务。

并发收集器

并发收集器同时采用标记-清除算法和标记-复制算法,实现了对老年代的并发收集。

可以降低停顿时间,适用于需要同时运行垃圾收集和用户程序的情况。

例如:

JVM参数:
-XX:+UseConcMarkSweepGC 
-XX:ParallelGCThreads=4

上面配置会使用并发收集器,适用于注重系统响应速度的服务端应用。

性能调优

垃圾收集调优需要根据不同应用场景进行。以下是一些常见建议:

  • 尽量产生少量垃圾
  • 将新生代调大,例如设置为整个堆的3/8
  • 收集器选择:串行收集器用于客户端,吞吐量收集器用于后台批处理,并发收集器用于对停顿时间敏感的应用

总结

掌握垃圾收集器的工作原理,并根据应用场景选择合适的收集器,能有效提升Java应用程序的性能。同时代码层面应该尽量减少垃圾对象的产生。

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

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

相关文章

uniapp运行项目到iOS基座

2022年9月,因收到苹果公司警告,目前开发者已无法在iOS真机设备使用未签名的标准基座,所以现在要运行到 IOS ,也需要进行签名。 Windows系统,HBuilderX 3.6.20以下版本,无法像MacOSX那样对标准基座进行签名…

选读SQL经典实例笔记16_逻辑否定

1. 示例数据 1.1. student insert into student values (1,AARON,20) insert into student values (2,CHUCK,21) insert into student values (3,DOUG,20) insert into student values (4,MAGGIE,19) insert into student values (5,STEVE,22) insert into student values (6…

伯俊ERP和金蝶云星空单据接口对接

伯俊ERP和金蝶云星空单据接口对接 对接源平台:金蝶云星空 金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上,提供了标准的管理模式;通过标准的业务架构:多会计准则、多币别、多地点、多组织、多税制应用框架等,有效支持企业的运…

jenkins gitlab多分支构建发布

内容背景介绍 这个是新手教程,普及概念为主 公司现在还使用单分支发布测试环境和生产,多人协同开发同一个项目导致测试环境占用等待等情况 测试环境占用等待问题 测试环境代码直接合并到 master,容易导致误发布到生产的情况 避免多版本同时发布测试不完善的情况出现 中间件…

PyTorch 分布式训练和启动脚本torch.distributed.launch torchrun slurm

1、DataParallel 如果当前有4个GPU,batch_size16,那么模型将被复制到每一个GPU上,在前向传播时,每一个gpu将分到4个batch,每个gpu独立计算依据分到的batch计算出结果的梯度,然后将梯度返回到第一个GPU上&a…

以CS32F031为例浅说国产32位MCU的内核处理器

芯片内核又称CPU内核,它是CPU中间的核心芯片,是CPU最重要的组成部分。由单晶硅制成,CPU所有的计算、接受/存储命令、处理数据都由核心执行。各种CPU核心都具有固定的逻辑结构,一级缓存、二级缓存、执行单元、指令级单元和总线接口…

django bootstrap html实现左右布局,带折叠按钮,左侧可折叠隐藏

一、实现的效果 在django项目中,需要使用bootstrap 实现一个左右分布的布局,左侧区域可以折叠隐藏起来,使得右侧的显示区域变大。(为了区分区域,左右加了配色,不好看的修改颜色即可) 点击折叠按钮,左侧区域隐藏,右侧区域铺满: 二、实现思路 1、使用col-md属性,让左…

改进的智能优化算法定性分析:收敛行为分析(Analysis of the convergence behavior )

目录 一、智能优化算法改进收敛行为分析运行结果 二、收敛性分析 三、GWO1在F1收敛性运行结果 四、改进灰狼算法GWO1 五、代码获取 一、智能优化算法改进收敛行为分析运行结果 本文以改进的灰狼算法 GWO1 为例,在 CEC2005 测试函数上进行定性分析实验。 F1:…

【微信小程序】导出 Excel 报表并分享,使用xlsx库生成 Excel,使用echars插入图表、使用pdfmake导出为PDF文件

这里写目录标题 生成EXCEL插入汇总和图表导出为PDF 生成EXCEL 要在微信小程序中导出 Excel 报表并分享,可以使用第三方库 xlsx 来生成 Excel 文件,并使用 wx.saveFile 方法将文件保存到本地,然后使用 wx.shareFile 方法来分享文件。 以下是…

【前端知识】React 基础巩固(三十六)——RTK中的异步操作

React 基础巩固(三十六)——RTK中的异步操作 一、RTK中使用异步操作 引入RTK中的createAsyncThunk,在extraReducers中监听执行状态 import { createSlice, createAsyncThunk } from "reduxjs/toolkit"; import axios from "axios";export cons…

代理模式——对象的间接访问

1、简介 1.1、概述 由于某些原因,客户端不想或不能直接访问某个对象,此时可以通过一个被称为“代理”的第三者来实现间接访问,该方案对应的设计模式被称为代理模式。 代理模式是一种应用很广泛的结构型设计模式,而且变化很多。…

微信小程序如何调用微信支付接口?

开发前准备 小程序appid,商户id,商户密钥(key),付款用户的(openid) 调用微信支付接口 (流程:首先调用微信统一下单接口,之后在调用wx.requestPayment(OBJECT)发起微信支付) 获取openid wx.login({succ…

Rust之错误处理

在Rust中,将错误分为两种,可恢复错误和不可恢复错误。所谓可恢复错误就是指类似于文件未找到这类错误,一般需要将它们报告给用户并再次尝试进行操作,而不可恢复错误往往就是Bug,需要停止程序的运行。 1、不可恢复错误…

Elasticsearch 全文检索 分词检索-Elasticsearch文章四

文章目录 官方文档地址refercence文档全文搜索体系match简单查询match 多词/分词单字段分词match多个词的逻辑控制match的匹配精度match_pharse_prefix分词前缀方式match_bool_prefixmulti_match多字段匹配 query string类型Interval类型DSL查询之Term详解聚合查询之Bucket聚合…

Git reset、revert用法

reset reset是删除之前的提交记录&#xff0c;所有的提交点都会被清除&#xff0c;我们看下执行前后的git log区别 D:\workspace\android>git log commit 87c1277a57544c53c603b04110e3dde100da8f57 (HEAD -> develop_main) Author: test <test.com> Date: Wed…

图论-简明导读

计算机图论是计算机科学中的一个重要分支&#xff0c;它主要研究图的性质和结构&#xff0c;以及如何在计算机上有效地存储、处理和操作这些图。本文将总结计算机图论的核心知识点。 一、基本概念 计算机图论中的基本概念包括图、节点、边等。图是由节点和边构成的数据结构&am…

maven中的properties标签

在maven构建项目的时候经常遇到如下所示的标签配置&#xff1a; <dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId> <version>4.2.6</version></dependency><dependency><gr…

P3373 【模板】线段树 2

题目 思路 作为线段树模板题&#xff0c;这题主要考查了对lazytag以及先乘后加的使用&#xff0c; 线段树详解 因为是模板&#xff0c;所以这里证明略 代码 #include<bits/stdc.h> using namespace std; #define int long long const int maxn1e55; int n,m,p; int a[…

汽车后视镜反射率测定仪

汽车后视镜位于汽车头部的左右两侧&#xff0c;顶部以及汽车内部的前方。汽车后视镜反映汽车正后方视野、两侧视野和汽车前端区域视野&#xff0c;以便驾驶员可以间接看清楚这些位置的情况&#xff0c;它起着“第二只眼睛”的作用&#xff0c;扩大了驾驶者的视野范围&#xff0…

华为数通HCIA-ARP(地址解析协议)详细解析

地址解析协议 (ARP) ARP &#xff08;Address Resolution Protocol&#xff09;地址解析协议&#xff1a; 根据已知的IP地址解析获得其对应的MAC地址。 ARP&#xff08;Address Resolution Protocol&#xff0c;地址解析协议&#xff09;是根据IP地址获取数据链路层地址的一个…