java垃圾回收

垃圾回收

一个对象如果不再使用,需要手动释放,否则就会出现内存泄漏。我们称这种释放对象的过程为垃圾回收,而需要程序员编写代码进行回收的方式为手动回收

内存泄漏指的是不再使用的对象在系统中未被回收,内存泄漏的积累可能会导致内存溢出

java中为了简化对象的释放,引入了自动的垃圾回收(garbage collection简称GC)机制通过垃圾回收器来对不再使用的对象完成自动的回收,垃圾回收器主要负责对堆上的内存进行回收。其他语言例如c#,python,go都拥有自己的垃圾回收器

定位垃圾的两种方法

引用计数法

一个对象被引用了一次,在当前对象头上递增一次引用次数,如果这个对象的引用次数为0,代表这个对象可回收。

当对象间出现了循环引用的话,引用计数法会失效

可达性分析算法

扫描堆中的对象,看是否能够沿着GC Root对象为起点的引用链找到该对象,找不到,表示可以回收

哪些对象可以作为GC Root?

虚拟机栈(栈帧中的本地变量表)中引用的对象

方法区中类静态属性引用的对象

方法区中常量引用的对象

本地方法栈中JNI(Native方法)引用的对象

垃圾清除算法

标记清除算法

标记和清除

1.根据可达性分析算法得出的垃圾进行标记

2.对这些标记为可回收的内容进行垃圾回收

优点:清理速度较快

缺点,碎片化严重,内存不连贯

标记整理算法

和标记清除算法前面都一致,但多了一步,对象移动内存位置使得内存连续

优点:不会有内存碎片

缺点:牺牲了性能和速度

复制算法

将内存空间一分为二,每次清除和回收时都将剩下的移动到另一端。

优点:在垃圾对象多的情况下,效率较高。清理后,内存无碎片

缺点:分配的两块内存空间,在同一时刻只能使用一般,内存使用率较低

分代收集算法

在java8时,堆被分为了两份:新生代和老年代(1:2)

对于新生代,内部又被分为了三个区域:

eden区,新生的对象都分配到这里

survivor区:分着from和to

eden,from,to(8:1:1)

MinorGC,MixedGC,FullGC的区别是什么

MinorGC(youngGC)发生在新生代的垃圾回收,暂停时间短(STW)

MixedGC新生代+老年代部分区域的垃圾回收,G1收集器特有

FullGC新生代+老年代完整垃圾回收,展厅时间长(STW),应尽量避免

垃圾回收器

G1垃圾回收器机制

强引用,软引用,弱引用,虚引用的区别

强引用:只有所有GCRoots对象都不通过强引用该对象,该对象才能被垃圾回收

软引用:仅有软引用引用该对象时,在垃圾回收后,内存如果仍然不足时会再次发出垃圾回收

弱引用:仅有弱引用引用该对象时,在垃圾回收时,无论内存是否充足,都会回收弱引用对象

虚引用:必须配合引用队列使用,被引用对象回收时,会将虚引用入队,由Reference Handler线程调用虚引用相关方法释放直接内存

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

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

相关文章

美国经济政策转向标记之一

美联储沃勒在纽约举行的 2024 年美国货币政策论坛上表示,他希望看到美联储投资组合出现两项关键进展: 首先,我希望看到美联储的机构MBS持有量降至零。其次,我希望美联储转向增加短期美国国债在持有资产中的占比。在金融危机之前&a…

【ArcGIS Pro二次开发】(83):ProWindow和WPF的一些技巧

在ArcGIS Pro二次开发中,SDK提供了一种工具界面【ArcGIS Pro ProWindow】。 关于ProWindow的用法,之前写过一篇基础的教程: 【ArcGIS Pro二次开发】(13):ProWindow的用法_arcgispro二次开发教程-CSDN博客 主要是对几个常用控件…

异步编程实战之webflux

一, 快速搭建webflux项目 1, 引入相关依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.5</version><relativePath/> <!-- lookup parent fr…

【嵌入式实践】【芝麻】【设计篇-2】从0到1给电动车添加指纹锁:项目可行性分析

0. 前言 该项目是基于stm32F103和指纹模块做了一个通过指纹锁控制电动车的小工具。支持添加指纹、删除指纹&#xff0c;电动车进入P档等待时计时&#xff0c;计时超过5min则自动锁车&#xff0c;计时过程中按刹车可中断P档状态&#xff0c;同时中断锁车计时。改项目我称之为“芝…

EMR StarRocks实战——猿辅导的OLAP演进之路

目录 一、数据需求产生 二、OLAP选型 2.1 需求 2.2 调研 2.3 对比 三、StarRocks的优势 四、业务场景和技术方案 4.1 整体的数据架构 4.2 BI自助/报表/多维分析 4.3 实时事件分析 4.5 直播教室引擎性能监控 4.4 B端业务后台—斑马 4.5 学校端数据产品—飞象星球 4…

Ajax(黑马学习笔记)

Ajax介绍 Ajax概述 我们前端页面中的数据&#xff0c;如下图所示的表格中的学生信息&#xff0c;应该来自于后台&#xff0c;那么我们的后台和前端是互不影响的2个程序&#xff0c;那么我们前端应该如何从后台获取数据呢&#xff1f;因为是2个程序&#xff0c;所以必须涉及到…

【ACM】—蓝桥杯大一暑期集训Day3

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;目前学习C/C、算法、Python、Java等方向&#xff0c;一个正在慢慢前行的普通人。 &#x1f3c0;系列专栏&#xff1a;陈童学的日记 &#x1f4a1;其他专栏&#xff1a;CSTL&…

langchain学习笔记(九)

RunnableBranch: Dynamically route logic based on input | &#x1f99c;️&#x1f517; Langchain 基于输入的动态路由逻辑&#xff0c;通过上一步的输出选择下一步操作&#xff0c;允许创建非确定性链。路由保证路由间的结构和连贯。 有以下两种方法执行路由 1、通过Ru…

Unity引擎中光源都有哪几种,都有什么作用

本文由 简悦 SimpRead 转码&#xff0c; 原文地址 mp.weixin.qq.com Unity 引擎为了实现游戏场景的明暗和光影效果&#xff0c;提供了四种类型的光源&#xff0c;分别是方向光&#xff08;Directional Lights&#xff09;、点光源&#xff08;Point Lights&#xff09;、聚光灯…

Vue开发实例(一)Vue环境搭建第一个项目

Vue环境搭建&第一个项目 一、环境搭建二、安装Vue脚手架三、创建Vue项目 一、环境搭建 下载方式从官网下载&#xff1a;http://nodejs.cn/download/ 建议下载v12.16.0版本以上的&#xff0c;因为版本低无法创建Vue的脚手架 检验是否安装成功 配置环境变量 新增NODE_HOME&…

win11系统中nginx简单的代理配置

一.背景 为了公司安排的师带徒任务。 操作系统版本&#xff1a;win11家庭版 nginx版本&#xff1a;1.24.0 二.配置代理 之前文章已经说明了nginx简单的安装&#xff0c;要看阅读这个文章哈。web服务器nginx下载及在win11的安装-CSDN博客 1.配置需求识别 前端服务nginx(80…

【探索AI】十七 深度学习之第3周:卷积神经网络(CNN)(一)-CNN的基本原理与结构

第3周&#xff1a;卷积神经网络&#xff08;CNN&#xff09; CNN的基本原理与结构 常见的卷积层、池化层与全连接层 LeNet、AlexNet等经典CNN模型 实践&#xff1a;使用CNN进行图像分类任务 CNN的基本原理与结构 引言与背景介绍 卷积神经网络&#xff08;CNN&#xff09;是…

双周回顾#007 - 前端与后端

前端的问题不是难&#xff0c;而是它面对最终用户。只要用户的喜好和口味发生变化&#xff0c;前端就必须跟上。 这导致前端不得不快速变化&#xff0c;因为用户的口味正在越来越快地改变。 后端不需要面对最终用户&#xff0c;需要解决的都是一些经典的计算机科学问题&#…

什么是Vue指令?请列举一些常见的Vue指令以及它们的用法

Vue.js 是一款流行的前端框架&#xff0c;它的指令&#xff08;Directives&#xff09;是 Vue.js 提供的一种特殊属性&#xff0c;用于在模板中对 DOM 元素进行直接操作。指令通常是以 v- 开头的特殊属性&#xff0c;用于响应式地将数据绑定到 DOM 元素上。 在 Vue 中&#xf…

C语言初阶—函数(函数的声明和定义,函数递归)

函数声明&#xff1a; 1.告诉编译器有一个函数叫什么&#xff0c;参数是什么&#xff0c;返回类型是什么&#xff0c;但是具体是不是存在&#xff0c;函数声明决定不了。 2.函数的声明一般出现在函数使用之前&#xff0c;要满足先声明后使用。 3.函数的声明一般要放在头文件中。…

Launch学习

参考博客&#xff1a; (1) 史上最全的launch的解析来啦&#xff0c;木有之一欧 1 ROS工作空间简介 2 元功能包 src目录下可以包含多个功能包&#xff0c;假设需要使用机器人导航模块&#xff0c;但是这个模块中包含着地图、定位、路径规划等不同的功能包&#xff0c;它们的逻…

agent内存马

搭建一个简单的Servlet项目 ServletDemo package com.naihe;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;…

【探索AI】十一 深度学习之机器学习基础

鉴于之前文章中提到的深度学习计划&#xff0c;后续的文章会根据之前的接着继续学习&#xff0c;python基础略过&#xff0c;想学的同学请自学&#xff1a; python入门 python进阶 机器学习基础 机器学习是人工智能领域的一个子集&#xff0c;它专注于从数据中自动学习并提升…

vue2+若依框架plus交互 路由介绍

本周及寒假 参加了校企合作的工程过程管理&#xff0c;和学长学姐一起写项目&#xff0c;之前学了vue也没有应用&#xff0c;然后对框架很多组件的用法不太了解&#xff0c;前期耽误了一些时间。 框架模块 首先是框架模块的介绍 api存了一些系统管理及发送请求的方法 例如p…

【python】`assert`断言语句

assert是一个断言语句&#xff0c;用于在代码中检查某个条件是否为真。 如果条件为假&#xff0c;将触发AssertionError 异常&#xff0c;从而指示存在错误。