对象分配策略
对象创建后,究竟何去何从,对象在堆中又会经历哪些过程,本篇就会详细解释对象创建后直到对象被回收的整个过程。之前博主已经写过Minor GC、Major GC、Full GC的区别,而本篇也主要根据这几个GC开展。
对象回收过程流程如下图所示:

正常的对象生存过程:
首先进入新生代的Eden区,此后要么是朝生夕死的对象,在某次Minor GC中被回收,要么在新生代中熬过15次Minor GC(默认晋级老年代的分代年龄阈值为15),当对象进入老年代后,就很难轻易被回收了。当然,总有对象死亡的一天,只是时间问题罢了。
但在我们编码过程中,肯定不是所有的对象都会一直生存到最后,也会有一些特殊情况,而虚拟机也考虑到各种情况,也对其做出了应对。
详解上方流程图:
- 在对象创建后首先会在Eden区分配,如果Eden区内可用内存足够分配该对象,就直接将对象在Eden去分配内存,如果Eden区内存不足够,就会触发Minor GC。在此次GC后,如果新生代空间足够,就继续分配对象到Eden。
- 如果新生代空间依旧不够的话,就可以确定该对象是个大对象了,会直接放入老年代。当然,也没有十足的把握能直接放入老年代,当老年代最大可用连续空间依旧小于该对象所需空间时,就会触发Full GC。之后空间足够就分配给内存,不够就抛出OOM。
总体的流程就是这样,但细心的人会发现,文字所描述的过程跟图上有所差别,这里就不得不提一下JVM的动态对象年龄判定,和空间分配担保了。
- 动态对象年龄判定: 为了能更好的适应不同程序的内存状况,HotSpot虚拟机并不是永远要求对象的年龄必须达到阈值才能进入老年代,如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,那么年龄大于等于该年龄的对象就会直接进入老年代,无需等到 -XX:MaxTenuringThreshold中要求的年龄。
- 空间分配担保:在发生Minor GC之前,虚拟机必须先检查老年代最大可用的连续空间是否大于新生代所有对象的总空间,如果此条件成立,那这一次的Minor GC可以确定是安全的。如果不成立,虚拟机会查看 -XX:HandlePromotionFailure参数的设置是否允许担保失败。如果允许,会继续检查老年代最大可用的连续空间是否大于历史晋升老年代对象的平均大小,如果大于,将尝试一次Minor GC,当然,这次Minor GC肯定是有风险的;如果小于,或者参数设置不允许担保,那么这一次就要改为Full GC。
相信大家结合动态对象年龄判定和空间分配担保机制,再去看这个流程图的时候,很多地方都豁然开朗。
相关文章:
对象分配策略
对象创建后,究竟何去何从,对象在堆中又会经历哪些过程,本篇就会详细解释对象创建后直到对象被回收的整个过程。之前博主已经写过Minor GC、Major GC、Full GC的区别,而本篇也主要根据这几个GC开展。 对象回收过程流程如下图所示: 正常的对象生存过程&a…...
你可能不知道的前端监控方案
前言 现有的大部分监控方案都是针对服务端的,而针对前端的监控很少,诸如线上页面的白屏时间是多少、静态资源的加载情况如何、接口请求耗时好久、什么时候挂掉了、为什么挂掉,这些都不清楚。 因而,我们需要一个前端的页面监控系…...
java spring AOP 完全注解开发
我们先创建一个项目 然后引入java spring aop的依赖 然后 在src下创建目录 我这里 直接就叫 Aop了 下面创建一个User类 参考代码如下 package Aop;import org.springframework.stereotype.Component;Component public class User {public void add(){System.out.println(&qu…...
ctf pwn基础-4
今天是学pwn的第四天,去接触了pwn的整数溢出。 目录 基础 实例讲解 实例讲解2 基础 关于整数溢出,这里以int为例,因为我php之前搞的比较多,以为这个int也是想php一样是64,最大值是9开头的那个,闹了不少笑…...
bool与引用类型
bool与引用类型bool类型介绍与使用bool(布尔类型)大小:1个字节返回值有两个:1(true),0(false)#include<iostream>using namespace std;int main() {bool a false;bool b true;cout << "a " << a << end…...
tkinter界面的TCP通信/tkinter开启线程接收TCP
前言 用简洁的语言写一个可以与TCP客户端实时通信的界面。之前做了一个项目是要与PLC进行信息交互的界面,在测试的时候就利用TCP客户端来实验,文末会附上TCP客户端。本文分为三部分,第一部分是在界面向TCP发送数据,第二部分是接收…...
[SQL Statements] 基本的SQL知识 之DDL针对数据库的基本操作
SQL Statements SQL语句的学习 之 DDL针对数据库的基本操作 什么是database 在 MySQL 中,Database(数据库)是一组有组织的数据集合,可以存储和管理相关数据的容器。一个数据库可以包含多个表(Table)&…...
Qt的MOC机制
Qt的MOC机制 Qt扩展了C,使得开发者拥有很多方便使用的工具。如何使用Qt提供的特性呢?比如信号与槽,那就需要开发者在类中声明Q_OBJECT宏,这样程序员就能使用Qt提供的功能了。为什么这样可以呢?先从C文件的编译过程开始…...
Linux驱动——设备模型
目录 一、起源 二、新方案 2.1 sysfs: 2.2 uevent 三、代码中自动mknod 四、实例 一、起源 仅devfs,导致开发不方便以及一些功能难以支持:(硬编) 1. 热插拔(插上usb设备就立马能安装驱动) 2. 不支持…...
.NET基础加强第一课--面向对象(OO)
.NET基础加强第一课--面向对象(OO)面向对象什么是类?封装--属性封装字段2, 方法的多个参数封装成一个类3, 把一堆代码封装到一个方法中4, 将一些功能封装到几个类中5, 将一些具有共有功能封装到…...
从Linux源码角度看套接字的Listen及连接队列
今天就从Linux源码的角度看下Server端的Socket在进行listen的时候到底做了哪些事情(基于Linux 3.10内核),当然由于listen的backlog参数和半连接hash表以及全连接队列都相关,在这里也一块讲了。 Server端Socket需要Listen 众所周知,一个Serv…...
cesium: 显示闪烁的点(004)
第004个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置闪烁的点。主要是介绍entity>point 相关的属性设置 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共107行)相关API参考:专栏目标示例效果 配…...
常见代码审计工具,代码审计为什么不能只用工具?
代码审计是一种发现程序漏洞,安全分析为目标的程序源码分析方式。今天主要分享的是几款常用的代码审计工具,以及代码审计工具有哪些优缺点? 代码审计工具 seay代码审计工具,是一款开源的利用C#开发的一款代码审计工具。主要有SQ…...
es8集群模式部署
准备3台机器 192.168.1.41 192.168.1.42 192.168.1.43因为es集群有几个节点,所以我对应node1,node2,node3.这几个名称并不是主机名,而是es节点名称 2. 开始部署,基础配置 (三台都做) systemctl stop firewalld syste…...
OAuth2
1.什么是OAuth2 OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时,任何第三方都可以使用OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP、JavaScript&…...
一、简单排序
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、Comparable接口介绍 1.描述 2.Comparable使用 二、冒泡排序 1.排序原理 2.冒泡排序实现 2.1 冒泡排序API 2.2 冒泡排序实现 3.冒泡排序时间复杂度 三…...
慢SQL出现原因、优化、开启慢查询日志
文章目录慢SQL:出现原因:解决方式:开启慢查询日志:慢SQL: 出现原因: (1)数据库表索引设置不合理 (2)SQL语句有问题,需要优化 解决方式: (1&am…...
要理解网络,其实不就是理解这三张表吗
我们如果要理解数据是如果在网络世界中穿梭的,那其实只要了解其中的三张表就可以了。这三张表分别为路由表、转发表、ARP 表。 假设我们用聊天工具聊天的时候,我在北京,你在广东,当我给你发送一条消息的时候。搭载这这条消息的数据…...
Java异常架构与异常关键字
Java异常简介 Java异常是Java提供的一种识别及响应错误的一致性机制。 Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问…...
【阅读笔记】SecureML: A System for ScalablePrivacy-Preserving Machine Learning
1. Motivation 针对机器学习中的出现的数据隐私泄露的风险,提出了线性回归、逻辑回归以及简单神经网络的隐私保护模型。 2. Contributions 2.1 为线性回归、逻辑回归以及神经网络设计安全计算协议 2.1.1.1 线性回归 线性回归损失函数为: , 采用SG…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
深入解析 ReentrantLock:原理、公平锁与非公平锁的较量
ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。 ReentrantLock 实现原理 基本架构 ReentrantLo…...
