JVM垃圾回收算法及Java引用

目录

Java垃圾回收算法

1.标记清除算法:Mark-Sweep

2.复制算法:copying

3. 标记整理算法:Mark-Compact

4.分代收集算法

5.新生代垃圾回收算法:复制算法

6.老年代:标记整理算法

7.分区收集算法

Java引用

1.Java强引用

2.Java弱引用

3.Java软引用

4.Java虚引用


Java垃圾回收算法

1.标记清除算法:Mark-Sweep

1.原理:标记清除算法分为两个阶段:

        标记:标记出所有需要回收的对象

        清楚:回收被标记的的对象所占用的空间

2.缺点:内存碎片化问题严重,大对象可能无法找到可利用空间

2.复制算法:copying

1.原理:为解决标记清楚算法内存碎片化提出的算法。将内存按内存容量划分为等大小的两块,每次使用其中一块,当这一块内存满后将存活对象复制到另一块上,将已经使用的内存清理掉。

2.缺点:可用内存只有原来的一半;存活数量增多后,由于需要复制,算法效率降低。

3. 标记整理算法:Mark-Compact

1.原理:结合标记清除算法+复制算法提出的算法。

        标记:标记出所有需要回收的对象

        整理:将存活对象移向内存的一端,之后清楚标记对象

        

4.分代收集算法

原理:根据对象存活的不同生命周期,将内存划分为不同区域。

        一般将GC堆划分为老年代和新生代,老年代中,每次垃圾回收只有少量对象需要被回收;新生代中,每次垃圾回收会被大量垃圾需要被回收。根据不同代所属区域选择不同算法

5.新生代垃圾回收算法:复制算法+标记清楚

        新生代中存活对象少,有大量垃圾需要被回收,因此选择复制算法,付出少量存活对象的复制成本即可完成收集

6.老年代:标记整理算法

        老年代中的对象存活率高,使用内存复制会付出大量复制成本,使用标记整理算法能够腾出空闲内存。

7.分区收集算法

原理:将整个堆空间划分为连续的不同小区间,每个区间独立使用,独立回收

优点:可以控制一次回收多少小区间,而不是直接回收整个堆。根据目标停顿时间,合理回收若干个小区间,从而减少一次GC所产生的停顿时间(用户等待时间)。

Java引用

1.Java强引用

定义:将一个对象赋给一个引用遍历,该引用变量就是一个强引用;强引用是使用最普遍的引用

缺点:一个对象被强引用变量引用时,就处于可达状态,因此不会被垃圾回收机制回收,容易造成Java内存泄漏

2.Java弱引用

定义:使用WeakReference类实现,弱引用的对象只要垃圾回收机制一运行,无论内存空间是否足够,都会回收该对象所占用的内存。

3.Java软引用

定义:使用SoftReference类实现,软引用的对象当系统内存足够时不会被回收,内存不足时再被回收

4.Java虚引用

定义:使用PhantomReference类实现,必须与引用队列联合使用,无法单独使用

作用:跟踪对象被垃圾回收的状态

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ROS-melodic:源码安裝teb_local_planner算法、替换DWA算法

一.安裝teb_local_planner算法 源码下载地址:GitHub - rst-tu-dortmund/teb_local_planner: An optimal trajectory planner considering distinctive topologies for mobile robots based on Timed-Elastic-Bands (ROS Package) 注意选择对应ROS版本的代码。 放在…

爬虫 python 正则匹配 保存网页图片

目录 1. 简介1.1 爬虫1.2 爬虫语言1.3 python库1.4 我的步骤 2. 导入包2.1 代码2.2 requests库 3. 写入文件函数4. 获取图片5. 主函数5.1 代码5.2 说明一下webbrowser 6. 所有代码7. 其他(可以忽略)8. 总结 在这里我只提供的是一种方法,有很多…

SpringMVC 万字通关

文章目录 1. 什么是 Spring MVC?1.1 MVC 定义1.2 MVC 和 Spring MVC 的关系 2. Spring MVC 有什么用 ?3. 如何学 Spring MVC ?3.1 Spring MVC 的创建3.2 实现连接功能3.2.1 RquestMapping 详解1. RequestMapping 支持什么请求?2. 请求限定3. GetMapping 和 PostMapping4. c…

【Android -- JNI 和 NDK】Java 和 C/C++ 之间传递参数和返回值

本文主要介绍 JNI 的数据传递上,即 Java 如何传递对象给 C; 而 C 又如何将数据封装成 Java 所需的对象。 1. 基本数据类型 传递 java 的基本类型是非常简单而直接的,一个 jxxx 之类的类型已经定义在本地系统中了,比如:jint, jby…

认识ASP.NET MVC的5种AuthorizationFilter

一、IAuthorizationFilter 所有的AuthorizationFilter实现了接口IAuthorizationFilter。如下面的代码片断所示,IAuthorizationFilter定义了一个OnAuthorization方法用于实现授权的操作。作为该方法的参数filterContext是一个表示授权上下文的AuthorizationContext对…

FasterTransformer 004 open_attention.h forward

initialize forward() https://github1s.com/NVIDIA/FasterTransformer/blob/v1.0/fastertransformer/cuda/open_attention.h#L149-L217 使用cuBLAS库执行矩阵乘法运算,并对cublasGemmEx()进行三个单独的调用。这些操作包括将属性核与输入张…

【社区图书馆】《看漫画学Python:有趣、有料、好玩、好用(全彩修订版)》

背景 Python是一门既简单又强大的编程语言,被广泛应用于数据分析、大数据、网络爬虫、自动化运维、科学计算和人工智能等领域。Python也越来越重要,成为国家计算机等级考试科目,某些中小学也开设了Python编程课程。本书秉承有趣、有料、好玩…

SpringCloud服务注册与发现组件Eureka(五)

Eureka github 地址: https://github.com/Netflix/eureka Eureka简介 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。Spring…

【Android -- JNI 和 NDK】JNI 基础知识以及如何使用

JNI 基础知识 我们来系统梳理一下JNI中涉及的基本知识。 JNI定义了以下数据类型,这些类型和Java中的数据类型是一致的: Java原始类型:jint, jbyte, jshort, jlong, jfloat, jdouble, jchar, jboolean这些分别对应这 java 的int, byte, shor…

css 包含块

你不知道的 CSS 之包含块 一说到 CSS 盒模型,这是很多小伙伴耳熟能详的知识,甚至有的小伙伴还能说出 border-box 和 content-box 这两种盒模型的区别。 但是一说到 CSS 包含块,有的小伙伴就懵圈了,什么是包含块?好像…

微服务springcloud 02 创建项目中的三个service子系统,springcloud中注册中心Eureka介绍和把三个系统注册到Eureka中

item service项目 01.使用springboot创建项目 02.选择依懒项在这里插入代码片 spring web 03.添加sp01-commons依赖 在pom.xml文件中 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" x…

【色度学】光学基础

1. 光的本质 &#xff08;1&#xff09;波长不同的可见光&#xff0c;引起人眼的颜色感觉不同。 &#xff08;2&#xff09;人们观察到的颜色是物体和特有色光相结合的结果&#xff0c;而不是物体产生颜色的结果。 2. 光度量 【ISP】光的能量与颜色&#xff08;1&#xff0…

NIO 基础

3. 文件编程 non-blocking io 非阻塞 IO 1.1 Channel & Buffer channel 类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从 channel 将数据读入 buffer&#xff0c;也可以将 buffer 的数据写入 channel&#xff0c;而之前的 stream 要么是输入&#…

统信UOS V20 安装mysql5.7.42详细教程

1 安装包准备 到mysql官网可以看到最新的是8.0.33&#xff0c;想下载其他版本的点击 Looking for previous GA versions?Select Operating System: 选择如下版本的mysql 安装包 2 安装 2.1 上传文件至服务器 下载后通过远程将安装包上传至服务器&#xff0c;我这里将安装…

Seesion会话超时时间测试-业务安全测试实操(3)

Seesion会话超时时间测试, Cookie仿冒测试, 密文比对认证测试 本地加密传输测试-业务安全测试实操(2)_luozhonghua2000的博客-CSDN博客 测试原理和方法 在用户成功登录系统获得Session认证会话后,该Session认证会话应具有生命周期,即用户在成功登录系统后,如果在固定时间内…

两个链表相加

描述 假设链表中每一个节点的值都在 0 - 9 之间&#xff0c;那么链表整体就可以代表一个整数。 给定两个这种链表&#xff0c;请生成代表两个整数相加值的结果链表。 数据范围&#xff1a;0≤n,m≤1000000&#xff0c;链表任意值 0≤val≤9 要求&#xff1a;空间复杂度 O(n)…

Triton教程 -- 利用Triton部署你自己的模型

Triton教程—利用Triton部署你自己的模型 给定一个经过训练的模型&#xff0c;我如何使用 Triton 推理服务器以最佳配置大规模部署它&#xff1f; 本文档旨在帮助回答这个问题。 对于那些喜欢高级概述的人&#xff0c;下面是大多数用例的通用流程。 对于那些希望直接进入的人…

Windows Server AD域控服务器升级/迁移(AD域控的五大角色转移)

Windows Server AD域控服务器升级/迁移&#xff08;AD域控的五大角色转移&#xff09; 新域控服务器安装配置域控服务器&#xff0c;加入现有域域控角色迁移到新域控服务器原域控服务器降级退域 本文主要介绍在现有域环境下如何进行域控服务器的迁移/升级操作。对于域结构的网络…

抖音seo矩阵系统源码|需求文档编译说明(一)

抖音seo矩阵系统文章目录技术囊括 ①产品原型 ②需求文档 ③产品流程图 ④部署方式说明 ⑤完整源码 ⑥源码编译方式说明 ⑦三方框架和SDK使用情况说明和代码位置 ⑧平台操作文档 ⑨程序架构文档 短视频矩阵系统源码开发锦囊囊括前言一、短视频账号矩阵系统开发者必备能力语言&…

深度相机介绍

一、什么是深度相机 &#xff08;五&#xff09;深度相机&#xff1a;结构光、TOF、双目相机 - 知乎 传统的RGB彩色普通相机称为2D相机&#xff0c;只能拍摄相机视角内的物体&#xff0c;没有物体到相机的距离信息&#xff0c;只能凭感觉感知物体的远近&#xff0c;没有明确的数…