当前位置: 首页 > news >正文

JVM虚拟机篇(七):JVM垃圾回收器全面解析与G1深度探秘及四种引用详解

JVM垃圾回收器全面解析与G1深度探秘及四种引用详解

  • JVM虚拟机(七):JVM垃圾回收器全面解析与G1深度探秘及四种引用详解
    • 一、JVM有哪些垃圾回收器
      • 1. Serial回收器
      • 2. ParNew回收器
      • 3. Parallel Scavenge回收器
      • 4. Serial Old回收器
      • 5. Parallel Old回收器
      • 6. CMS(Concurrent Mark Sweep)回收器
      • 7. G1(Garbage-First)回收器
    • 二、详细聊一下G1垃圾回收器
      • 3.6.1 概述
      • 3.6.2 Young Collection(年轻代垃圾回收)
      • 3.6.3 Young Collection + Concurrent Mark(年轻代垃圾回收 + 并发标记)
      • 3.6.4 Mixed Collection(混合垃圾回收)
    • 三、强引用、软引用、弱引用、虚引用的区别
      • 3.7.1 强引用(Strong Reference)
      • 3.7.2 软引用(Soft Reference)
      • 3.7.3 弱引用(Weak Reference)
      • 3.7.4 虚引用(Phantom Reference)

JVM虚拟机(七):JVM垃圾回收器全面解析与G1深度探秘及四种引用详解

一、JVM有哪些垃圾回收器

在Java虚拟机(JVM)中,垃圾回收器负责自动管理内存,回收不再使用的对象所占用的内存空间。不同的垃圾回收器具有不同的特点和适用场景,以下是常见的JVM垃圾回收器:

1. Serial回收器

  • 特点:单线程垃圾回收器,在进行垃圾回收时,会暂停所有用户线程(Stop-The-World,STW)。它简单高效,对于单线程环境或小型应用程序有较好的性能表现。
  • 适用场景:Client模式下的小型应用,对内存要求不高,单核CPU环境。

2. ParNew回收器

  • 特点:Serial回收器的多线程版本,允许多个线程同时进行垃圾回收,同样会产生STW。它常与CMS回收器配合使用,是Server模式下新生代回收的常用选择之一。
  • 适用场景:Server模式,多核CPU环境,与CMS配合时的新生代回收。

3. Parallel Scavenge回收器

  • 特点:关注吞吐量的垃圾回收器,通过最大化吞吐量来提高程序的运行效率。它也是多线程回收器,可通过参数控制吞吐量目标。
  • 适用场景:后台任务、对响应时间要求不高但重视吞吐量的应用,如批量数据处理。

4. Serial Old回收器

  • 特点:Serial回收器的老年代版本,单线程回收,使用标记-整理算法。通常作为其他回收器的后备方案,在JVM内存较小、单核环境下仍有一定应用。
  • 适用场景:与Serial回收器配合,或作为Parallel Scavenge老年代回收的后备。

5. Parallel Old回收器

  • 特点:Parallel Scavenge的老年代版本,多线程,采用标记-整理算法,提供与Parallel Scavenge类似的吞吐量优先特性。
  • 适用场景:注重吞吐量的应用,老年代回收,与Parallel Scavenge配合。

6. CMS(Concurrent Mark Sweep)回收器

  • 特点:以获取最短回收停顿时间为目标的回收器,采用标记-清除算法。它能在垃圾回收时与用户线程并发执行部分操作,减少STW时间。
  • 优点:响应速度快,适合对响应时间要求高的应用,如Web应用。
  • 缺点:会产生内存碎片,并发阶段可能因用户线程继续运行导致重新标记,且对CPU资源敏感。
  • 适用场景:B/S架构等对响应时间敏感的应用。

7. G1(Garbage-First)回收器

  • 特点:新一代垃圾回收器,将堆内存划分为多个大小相等的Region,采用分代收集思想,但不再有固定的新生代和老年代。它能更精确地控制垃圾回收的停顿时间,同时兼顾吞吐量和响应时间。
  • 适用场景:大内存、多处理器环境,对停顿时间有严格要求的应用,是JDK 9及以上的默认回收器。

二、详细聊一下G1垃圾回收器

3.6.1 概述

G1(Garbage-First)回收器是一种面向服务器的垃圾回收器,旨在满足高吞吐量和低停顿时间的需求。与传统回收器不同,G1将堆内存划分为大量大小相等的Region(区域),每个Region可以动态地扮演新生代或老年代的角色。G1通过维护一个优先列表,每次根据允许的停顿时间优先回收垃圾最多的Region,这也是其名称“Garbage-First”的由来。这种设计使得G1能更灵活地控制垃圾回收的停顿时间,同时提高内存的利用率和回收效率。

3.6.2 Young Collection(年轻代垃圾回收)

  • 回收过程:当新生代的Eden区填满时,触发Young Collection。G1采用复制算法,将Eden区和Survivor区中存活的对象复制到另一个空的Survivor区或晋升到老年代(如果对象年龄达到阈值)。此时会产生STW,但由于新生代对象存活率通常较低,复制操作的开销相对较小。
  • 特点:快速处理新生代大量短生命周期的对象,通过多线程并行执行,减少回收时间。

3.6.3 Young Collection + Concurrent Mark(年轻代垃圾回收 + 并发标记)

  • 并发标记阶段
    • 初始标记(Initial Mark):STW,标记GC Roots直接引用的对象,时间很短。
    • 并发标记(Concurrent Mark):与用户线程并发执行,从GC Roots开始遍历对象图,标记存活的对象。
    • 最终标记(Final Mark):STW,处理并发标记阶段遗留的少量对象,确保标记准确。
    • 筛选回收(Live Data Counting and Evacuation):计算每个Region的存活对象和可回收空间,为混合回收做准备。
  • 与Young Collection的配合:在年轻代回收后,通过并发标记确定老年代中哪些Region含有较多垃圾,为后续的混合回收提供依据。

3.6.4 Mixed Collection(混合垃圾回收)

  • 回收过程:G1根据筛选回收阶段的统计信息,选择垃圾比例较高的老年代Region,结合新生代Region一起回收。回收时采用复制算法,将存活对象复制到空的Region中,从而清理掉垃圾较多的Region。
  • 特点:在控制停顿时间的前提下,逐步回收老年代的垃圾,避免老年代内存碎片化,同时提高整体内存的利用率。

三、强引用、软引用、弱引用、虚引用的区别

3.7.1 强引用(Strong Reference)

  • 定义:程序中最常见的引用方式,如Object obj = new Object();,obj就是一个强引用。
  • 回收时机:只要强引用存在,垃圾回收器永远不会回收被引用的对象。即使内存不足,JVM也会抛出OutOfMemoryError而不会回收强引用对象。
  • 应用场景:大多数普通对象的引用,确保对象在需要时始终存在。

3.7.2 软引用(Soft Reference)

  • 定义:通过SoftReference类实现,如SoftReference<Object> softRef = new SoftReference<>(new Object());
  • 回收时机:当内存不足时,垃圾回收器会回收软引用所引用的对象。软引用通常用于实现缓存,在内存充足时保留对象,内存紧张时释放以避免OOM。
  • 应用场景:图片缓存、网页缓存等,允许在内存不足时释放非关键对象。

3.7.3 弱引用(Weak Reference)

  • 定义:通过WeakReference类实现,WeakReference<Object> weakRef = new WeakReference<>(new Object());
  • 回收时机:只要发生垃圾回收,无论内存是否充足,弱引用所引用的对象都会被回收。弱引用的生命周期更短。
  • 应用场景:临时对象、对生命周期要求较短的辅助对象,如哈希表中的弱引用键值对,避免内存泄漏。

3.7.4 虚引用(Phantom Reference)

在这里插入图片描述

  • 定义:通过PhantomReference类实现,且必须配合ReferenceQueue使用,PhantomReference<Object> phantomRef = new PhantomReference<>(new Object(), referenceQueue);在这里插入图片描述

  • 回收时机:虚引用随时可能被垃圾回收器回收,它主要用于跟踪对象的垃圾回收状态,而不是实际引用对象。

  • 应用场景:对象回收后的资源释放等特殊场景,如直接内存的释放跟踪。

通过对JVM垃圾回收器的全面了解,尤其是G1回收器的深入剖析,以及四种引用类型的详细对比,开发者能更好地理解Java内存管理机制,优化程序性能,避免内存相关的问题,编写出更高效、稳定的Java应用程序。

相关文章:

JVM虚拟机篇(七):JVM垃圾回收器全面解析与G1深度探秘及四种引用详解

JVM垃圾回收器全面解析与G1深度探秘及四种引用详解 JVM虚拟机&#xff08;七&#xff09;&#xff1a;JVM垃圾回收器全面解析与G1深度探秘及四种引用详解一、JVM有哪些垃圾回收器1. Serial回收器2. ParNew回收器3. Parallel Scavenge回收器4. Serial Old回收器5. Parallel Old回…...

【蓝桥杯】15届JAVA研究生组F回文字符串

一、思路 1.这题去年考的时候想的是使用全排列进行尝试&#xff0c;实际不用这么麻烦&#xff0c;只用找到第一个和最后一个非特殊字符串的位置&#xff0c;然后分别向内检查是否对称&#xff0c;向外检查是否对称直到左指针小于0(可以通过添加使其对称) 2.至于如何找到第一个…...

TDengine 语言连接器(Python )

简介 taospy 是 TDengine 数据库面向 Python 语言提供的官方连接器&#xff0c;连接器对外提供对数据库写入、查询、订阅等多种访问接口。 安装连接器命令如下&#xff1a; # 原生连接和 REST 连接 pip3 install taospy# WebSocket 连接&#xff0c;可选装 pip3 install tao…...

Android compose源码浅析——Modifier

Modifier浅析 Modifier的使用foldOutfoldInanyall总结Modifier的使用 先来一段代码1: @Preview(showBackground = true) @Composable fun GreetingPreview() {ComposeTestTheme {Box(modifier = Modifier.size(DpSize(Dp(100f),Dp(100f))).padding(Dp(10f)).background(Colo…...

基于机器视觉的多孔零件边缘缺陷检测(源码C++、opencv、凸包、凸缺陷检测)

&#x1f451;主页&#xff1a;吾名招财 &#x1f453;简介&#xff1a;工科学硕&#xff0c;研究方向机器视觉&#xff0c;爱好较广泛… ​&#x1f4ab;签名&#xff1a;面朝大海&#xff0c;春暖花开&#xff01; 基于机器视觉的多孔零件边缘缺陷检测&#xff08;源码C、ope…...

JAVAWeb_Servlet:前置准备与理论简易介绍

要写JAVA_Web&#xff1a;首先就得建个项目——如何在Eclipse新建一个Web项目-CSDN博客 然后我们考虑具体的代码细节&#xff08;接下来就是我们的前置准备&#xff09; 一、导包&#xff1a; 在 Eclipse 中&#xff0c;如果需要快速导入缺失的包&#xff08;例如&#xff0…...

反射 tcp

反射 临时越过权限 获取成员变量1并进行修改 成员方法 TCP客户端...

UML综合实验四

1. 计算机包含内存(RAM)、CPU等硬件设备&#xff0c;根据下面的“产品等级结构-产品族”示意图&#xff0c;使用抽象工厂模式实现计算机设备创建过程并绘制相应的类图。 2. 电脑组装工厂可以将CPU、内存、硬盘、主机、显示器等硬件设备组装在一起构成一台完整的电脑&#xff0c…...

<《AI大模型应知应会100篇》第8篇:大模型的知识获取方式及其局限性

第8篇&#xff1a;大模型的知识获取方式及其局限性 摘要 大模型&#xff08;如GPT、BERT、Qwen、DeepSeek等&#xff09;凭借其卓越的自然语言处理能力&#xff0c;已经成为人工智能领域的明星。然而&#xff0c;这些模型“知道”什么&#xff1f;它们如何获取知识&#xff1f…...

【回眸】Linux 内核 (十六) 之 多线程编程 下

前言 前面介绍了互斥锁&#xff0c;本篇博文介绍死锁及其他多线程遇到的情况。 什么情况会造成死锁 死锁指的是两个或两个以上的运算单元&#xff08;进程、线程或协程&#xff09;&#xff0c;互相持有对方所需的资源&#xff0c;导致它们都无法向前推进&#xff0c;从而导…...

学习笔记083——Java Stream API

文章目录 1、过滤数据 filter()2、转换元素 map()3、排序 sorted()3.1、自定义排序规则 4、去重 distinct()5、限制元素数量 limit()6、收集结果 collect()6.1、收集为List6.2、收集为Set6.3、转为Map6.4、基本用法&#xff08;注意键冲突会抛异常&#xff09;6.5、处理键冲突&…...

逍遥模拟器ARM过检测技术全解析

逍遥模拟器ARM框架安装magisk和修改设备型号隐藏应用隐藏root过检测 逍遥模拟器ARMmagisk改设备型号隐藏应用隐藏root 引言 逍遥模拟器以其出色的性能和丰富的功能&#xff0c;深受广大用户喜爱&#xff0c;让用户能在电脑上轻松运行各类安卓应用和游戏。然而&#xff0c;为保…...

Easysearch VS Opensearch 数据写入与存储性能对比

本文记录 Easysearch 和 Opensearch 数据写入和数据存储方面的性能对比。 准备 压测工具&#xff1a;INFINI Loadgen 对比版本&#xff1a; Easysearch 1.11.1&#xff08;lucene 8.11.4&#xff09;Opensearch 2.19.1&#xff08;lucene 9.12.1&#xff09; 节点 JVM 配置…...

C++中STL学习(一)——向量、栈、堆、集合

#include “bits/stdc.h” using namespace std; int main() { // -------------------- 1、向量vector&#xff1a;可以替换数组&#xff0c;不需要事先指定长度 // ------------------------- vector arr; // 构建int数组 vector arr1(100); // 构建初始长度100的int向量 ve…...

柑橘病虫害图像分类数据集OrangeFruitDataset-8600

文章目录 1. 前言2. 数据类别介绍3. 数据集地址 1. 前言 柑橘&#xff0c;作为水果界的 “宠儿”&#xff0c;不仅以其酸甜可口的味道深受大众喜爱&#xff0c;更是在全球水果产业中占据着举足轻重的地位。无论是早餐中的一杯橙汁&#xff0c;还是下午茶里的柑橘甜点&#xff…...

leetcode刷题-单调栈

代码随想录单调栈|739. 每日温度、496.下一个更大元素 I、503.下一个更大元素II、42. 接雨水、84.柱状图中最大的矩形 739. 每日温度496.下一个更大元素 I503.下一个更大元素II42. 接雨水 -- 面试常考题84.柱状图中最大的矩形 739. 每日温度 leetcode题目链接 代码随想录文档讲…...

【设计模式】访问者模式

**简介 假设你有一个购物车&#xff08;对象结构&#xff09;&#xff0c;里面有多种商品&#xff08;元素&#xff09;&#xff0c;如苹果、牛奶、书籍。每个商品的计价规则不同&#xff1a; 水果按重量计价牛奶按数量计价书籍按固定价格计价 现在需要实现两种功能&#xff1…...

【ISP】ISP pipeline(AI)

ISP Pipeline 全流程概览 ISP&#xff08;Image Signal Processing&#xff0c;图像信号处理&#xff09;流程通常从原始 Bayer 数据出发&#xff0c;经过一系列模块处理&#xff0c;逐步完成图像校正和增强&#xff0c;最终生成用于显示或编码的标准图像。常见处理模块包括&a…...

【设计模式】模板模式

简介 假设你要冲泡咖啡和茶&#xff0c;两者的流程相似但部分步骤不同&#xff1a; 烧水&#xff08;公共步骤&#xff09;加入主材料&#xff08;咖啡粉/茶叶&#xff09;添加调料&#xff08;糖/牛奶&#xff09;→ 可选步骤倒进杯子&#xff08;公共步骤&#xff09; 模板…...

GDB调试程序的基本命令和用法(Qt程序为例)

1. 引言 GDB&#xff08;GNU Debugger&#xff09;是一个强大的命令行调试工具&#xff0c;它可以帮助开发者在程序运行时查找和修复错误。当调试Qt程序时&#xff0c;GDB同样适用&#xff0c;并且能够帮助开发者定位诸如数组越界挂死等复杂问题。 2. 基本命令 2.1 启动GDB …...

vue3腾讯云直播 前端推流

1、在index.html文件中引入&#xff08;在body体中&#xff09; <script src"https://video.sdk.qcloudecdn.com/web/TXLivePusher-2.1.1.min.js" charset"utf-8"></script> 2、vue文件中&#xff0c;添加video推流&#xff08;我用的推流地…...

DP_AUX辅助通道介绍

DisplayPort&#xff08;简称DP&#xff09;是一个由PC及芯片制造商联盟开发&#xff0c;视频电子标准协会&#xff08;VESA&#xff09;标准化的数字式视频接口标准。该接口免认证、免授权金&#xff0c;主要用于视频源与显示器等设备的连接&#xff0c;并也支持携带音频、USB…...

【微机及接口技术】- 第九章 串行通信与串行接口(下)

文章目录 第二节 串行通信协议一、异步串行通信协议二、同步串行通信协议 第三节 串行接口标准RS-232C一、RS-232C信号线定义二、电气特性 第四节 可编程串行接口芯片8251A一、基本性能二、内部结构三、外部引脚功能1. 同CPU的连接信号2. MODEM控制信号&#xff08;4个&#xf…...

人形机器人制造—3D打印推动微型化与轻量化设计

在人形机器人仿生架构的构建中&#xff0c;多模态传感器集群与仿生关节矩阵的拓扑融合&#xff0c;正催生第三代具身智能的力学革命。通过分布式触觉薄膜、双目视觉惯性测量单元&#xff08;200Hz采样率&#xff09;与肌电模拟传感器的三重耦合&#xff0c;机器人获得了超越人类…...

前端性能优化高频面试题解析与实战指南(2025版)

一、前端性能优化核心面试题汇总 1. 浏览器加载优化相关问题 Q1&#xff1a;浏览器从输入URL到页面渲染的完整流程中&#xff0c;有哪些关键性能节点&#xff1f; 核心流程&#xff1a;DNS解析 → TCP连接&#xff08;TLS握手&#xff09;→ HTTP请求 → 资源下载 → 解析HT…...

【教程】xrdp修改远程桌面环境为xfce4

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 xfce4 vs GNOME对比 配置教程 1. 安装 xfce4 桌面环境 2. 安装 xrdp 3. 配置 xrdp 使用 xfce4 4. 重启 xrdp 服务 5. 配置防火墙&#xff…...

递增子序列

递增子序列 难点&#xff1a; 结果集如何加&#xff1a;每次进入递归都判断是否sub中的个数>2&#xff1b;不允许对数组排序&#xff0c;如何在每层去重&#xff1a;不可以再用nums[i] nums[i-1]&#xff08;没有意义&#xff0c;重复的元素不一定挨着&#xff09;&#x…...

Linux磁盘管理双雄:lsblk与df深度解析

在Linux系统管理的日常工作里&#xff0c;磁盘管理占据着极为重要的地位&#xff0c;这里重点介绍lsblk和df这两个命令。 一、lsblk命令&#xff1a;呈现磁盘物理架构 lsblk是用于罗列块设备信息的实用命令&#xff0c;它以直观的树状结构呈现系统中的块设备&#xff0c;帮助…...

C#里设计Modbus-RTU(Remote Terminal Unit)协议

Modbus-RTU(Remote Terminal Unit)是一种串行通信协议,广泛用于工业自动化领域,支持主从式(Master-Slave)通信架构。它是Modbus协议的两种传输模式之一(另一种是ASCII模式),具有高效、简洁、可靠性强的特点,常用于RS-485或RS-232物理层通信。 核心特性 物理层 通常基…...

spark学习内容总结

Spark运行架构总结 一、核心结构 Spark框架的核心是一个计算引擎&#xff0c;整体采用标准的master-slave结构。其中&#xff0c;Driver作为master&#xff0c;负责管理整个集群中的作业任务调度&#xff1b;Executor作为slave&#xff0c;负责实际执行任务。 二、核心组件 ‌…...

MySQL多表查询、事务与索引的实践与应用

摘要&#xff1a;本文围绕MySQL数据库操作展开&#xff0c;通过构建部门与员工管理、餐饮业务相关的数据库表&#xff0c;并填充测试数据&#xff0c;系统地阐述了多表查询的多种方式&#xff0c;包括内连接、外连接和不同类型的子查询&#xff0c;同时介绍了事务的处理以及索引…...

MySQL【8.0.41版】安装详细教程--无需手动配置环境

一、MySQL 介绍 1. 概述 MySQL 是一个开源的关系型数据库管理系统&#xff0c;由瑞典公司 MySQL AB 开发&#xff0c;现属于 Oracle 旗下。它基于 SQL&#xff08;结构化查询语言&#xff09;进行数据管理&#xff0c;支持多用户、多线程操作&#xff0c;广泛应用于 Web 应用、…...

FRP练手:hello,world实现

方案一&#xff1a;使用 Flask&#xff08;推荐&#xff09; from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return "你好啊世界"if __name__ __main__:# 监听所有网络接口&#xff08;0.0.0.0&#xff09;&#xff0c;端口 3344app.…...

Mysql | 主从复制的工作机制

主从复制的工作机制 Mysql的主从复制 从库主要是读取主库的binlog日志来完成数据同步的, binlog中存储了对数据库所有修改SQL的语句。 首先Master开启BinLog二进制的写入。Slave从库通过ip、port、账号、密码链接到Master主数据库&#xff0c;链接成功后从库会向主数据库获取B…...

清明之后叙

经历了漫长的冬季&#xff0c;春天的脚步近了&#xff0c;要说讲这一年的开始&#xff0c;绝大数人说是从春季&#xff0c;但是我说应该是从冬季开始&#xff0c;中国传统讲冬至是一阳生&#xff0c;冬季收藏好了&#xff0c;开始收敛精气&#xff0c;养精蓄锐&#xff0c;好好…...

Docker新型容器镜像构建技术,如何正确高效的编写Dockerfile

一、容器与容器镜像之间的关系 说到Docker管理的容器不得不说容器镜像&#xff0c;主要因为容器镜像是容器模板&#xff0c;通过容器镜像我们才能快速创建容器。 如下图所示&#xff1a; Docker Daemon通过容器镜像创建容器。 二、容器镜像分类 操作系统类 CentOSUbuntu在do…...

Starrocks的Bitmap索引和Bloom filter索引以及全局字典

写这个的主要作用是梳理一下Starrocks的索引效率以及使用场景。 Starrocks Bitmap索引 原理&#xff1a; Bitmap 索引是一种使用 bitmap 的特殊数据库索引。bitmap 即为一个 bit 数组&#xff0c;一个 bit 的取值有两种&#xff1a;0 或 1。 每一个 bit 对应数据表中的一行&…...

从 0 到上线:Java 项目打包 Docker 镜像全流程实战

&#x1f4d6; 摘要 本文是一份超详细的Java项目Docker化实战手册&#xff0c;从环境准备到最终上线&#xff0c;手把手带你完成整个容器化部署流程。你将学会&#xff1a; Docker基础概念与核心原理如何为Java项目编写高效的Dockerfile多阶段构建优化镜像体积镜像推送与容器…...

【符号引用和直接引用是什么?有什么作用?什么场景下使用?为什么符号引用和直接引用在常量池里?】

符号引用与直接引用详解 1. 符号引用&#xff08;Symbolic Reference&#xff09; 定义&#xff1a; 符号引用是编译阶段使用的抽象标识符&#xff0c;通过全限定名、方法签名等符号描述目标&#xff08;如类、方法、字段&#xff09;。它不涉及具体内存地址&#xff0c;仅作为…...

ESModule和CommonJS在Node中的区别

ESModule console.log(require);//>errorconsole.log(module);//>errorconsole.log(exports);//>errorconsole.log(__filename);//>errorconsole.log(__dirname);//>error全部报错commonjs console.log(require);console.log(module);console.log(exports);co…...

阿里发布实时数字人项目OmniTalker,实时驱动技术再突破~

简介 OmniTalker 是一个由 阿里巴巴集团 Tongyi Lab&#xff08;通义实验室&#xff09; 开发的研究项目&#xff0c;专注于实时文本驱动的说话头像生成技术。该项目旨在通过文本输入生成同步的语音和视频内容&#xff0c;同时保留参考视频中的音视频风格。以下是关于 OmniTalk…...

Kubernetes-如何进入某POD中

Kubernetes 如何进入某POD中 工作中需要进入pod中查询比如pod 网络等问题 步骤&#xff1a; 1、 查询某pod, 比如该pod 为namespace test 下的 ip 为 192.168.1.100 #查询namespace 列表 #kubectl get ns #查询该ns下ip 为 192.168.1.100的pod # kubectl -n test get pods …...

java导出postgis空间数据几何对象shapefile文件

项目开发中&#xff0c;需要java后端实现导出postgis空间数据几何对象shapefile文件&#xff0c;以便能直观查看数据详情。注意事项Shapefile 默认的几何字段名为 the_geom&#xff0c;若导出时未显式指定或字段名被修改&#xff0c;部分软件&#xff08;如 ArcGIS、QGI&#x…...

蓝桥杯嵌入式按键长按双击

直接上代码这个代码里面我们简单实现了如果按键按下时间超过0.8秒K1的值增加&#xff0c;短按只增加一次&#xff0c;按键2长按K2值增加&#xff0c;按键3双击K1的值减1&#xff0c;按键4双击K2的值减1 #include "fun.h" #define long_press_time 800//定义长按时间…...

深入解析Java中的栈:从JVM原理到开发实践

一、栈的双重身份&#xff1a;JVM运行时数据区 vs 数据结构 1. JVM层面的栈 线程私有&#xff1a;每个线程独立拥有自己的栈 LIFO结构&#xff1a;后进先出的方法调用模型 栈帧存储&#xff1a;每个方法对应一个栈帧&#xff08;Stack Frame&#xff09; 2. 数据结构中的栈…...

408 计算机网络 知识点记忆(6)

前言 本文基于王道考研课程与湖科大计算机网络课程教学内容&#xff0c;系统梳理核心知识记忆点和框架&#xff0c;既为个人复习沉淀思考&#xff0c;亦希望能与同行者互助共进。&#xff08;PS&#xff1a;后续将持续迭代优化细节&#xff09; 往期内容 408 计算机网络 知识…...

从ETL到ELT:大数据时代下两者的选型建议及优势

随着大数据时代的到来&#xff0c;数据量呈爆炸式增长&#xff0c;数据类型日益复杂&#xff0c;ETL与ELT两种技术路径的抉择直接影响着数据处理效率。我们这次来深入解析下两种模式的本质差异与应用场景&#xff0c;为企业提供选型建议。 一、ETL架构的优势 ETL架构遵循“提…...

Java蓝桥杯习题一:for循环和字符串的应用

知道循环次数用for循环 练习题1 小明对数位中含有2.0.1.9的数字很感兴趣&#xff0c;在1到40中这样的数包含1.2.9.10至32.39.40&#xff0c;共28个&#xff0c;他们的和是574.请问&#xff0c;在1到2019中&#xff0c;所有这样的数的和是多少&#xff1f;&#xff08;2019Jav…...

Windows 图形显示驱动开发-WDDM 2.0功能_分配用法跟踪

随着分配列表的消失&#xff0c;视频内存管理器 (VidMm) 不再能够查看特定命令缓冲区中引用的分配。 因此&#xff0c;VidMm 不再能够跟踪分配使用情况和处理相关同步。 此责任现在由用户模式驱动程序 (UMD) 承担。 具体而言&#xff0c;UMD 需要处理与直接 CPU 访问分配和重命…...

SpringMVC的请求-文件上传

文件上传客户端三要素 1. 表单项type“file” 2. 表单的提交方式是post 3. 表单的enctype属性是多部分表单形式&#xff0c;及enctype“multipart/form-data” <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <he…...