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

JVM专题九:JVM分代知识点梳理

今天开始,咱们开始剖析JVM内存划分的原理细节,以及我们创建的那些对象在JVM中到底是如何分配,如何流动的,首先解决第一个问题:JVM内存的一个分代模型:年轻代、老年代、永久通过之前的专题我们知道,那就是我们在代码里创建的对象,“都”会进入到Java堆内存。

为什么需要分代

JVM需要分代的主要原因是优化垃圾回收(Garbage Collection, GC)的效率。以下是分代垃圾回收模型的几个关键优势:

  1. 对象生命周期的统计特性: 大多数对象都是朝生夕死,即它们被创建后很快就会变得不再被使用。分代模型利用了这一特性,将新创建的对象放在年轻代,这样大部分短暂的对象可以快速被回收,而不需要频繁地对整个堆进行垃圾回收。

  2. 垃圾回收效率: 年轻代的垃圾回收(Minor GC)通常比老年代的垃圾回收(Major GC或Full GC)要快得多,因为年轻代的对象数量多,但存活率低。通过在年轻代进行频繁的垃圾回收,可以快速清理大量不再使用的对象,减少对老年代的影响。

  3. 减少Full GC的频率: 由于大部分对象在年轻代就会被回收,因此进入老年代的对象相对较少,这减少了对整个堆进行垃圾回收(Full GC)的需要,Full GC通常成本更高,因为它需要扫描整个堆内存。

  4. 内存分配的局部性优化: 年轻代的内存分配通常具有很好的局部性,因为新对象倾向于在相近的内存地址上创建。这有助于现代CPU缓存的利用,从而提高内存访问效率。

  5. 对象老化的自然过程: 对象在年轻代中经过多次GC后,如果仍然存活,说明它们可能是长时间存活的对象。将这些对象移动到老年代可以减少年轻代中对象的老化检查,从而提高GC效率。

  6. 不同的垃圾回收算法: 年轻代和老年代可以使用不同的垃圾回收算法。例如,年轻代通常使用复制算法,因为它简单且高效,而老年代可能使用标记-清除或标记-清除-整理算法,因为老年代的对象存活率更高,需要更复杂的算法来处理碎片问题。

  7. 内存空间的合理分配: 通过分代,JVM可以根据对象的生命周期特性合理分配内存空间。年轻代通常分配较小的内存空间,因为大多数对象都是短暂存在的,而老年代则分配较大的空间,用于存放长期存活的对象。

  8. 适应不同的应用场景: 不同的应用可能有不同的对象生命周期特性。通过分代,JVM可以更灵活地适应不同的应用场景,通过调整年轻代和老年代的大小,以及垃圾回收算法,来优化性能。

通过上述分代模型的优势,JVM能够更高效地管理内存,减少垃圾回收的开销,从而提高Java程序的整体性能。

新生代是如何进入老年代的?

新生代对象进入老年代的过程,通常被称为"晋升"(Promotion)。以下是对象从新生代晋升到老年代的几个关键步骤和机制:

  1. 对象分配: 当一个新对象在Java程序中创建时,它首先被分配到新生代的Eden区。

  2. Minor GC: 新生代会定期进行Minor GC,以回收Eden区和Survivor区中不再被引用的对象。存活的对象会被复制到另一个Survivor区(S0或S1)。

  3. 对象年龄: 在Minor GC之后,存活的对象会有一个年龄计数器,每次在Survivor区之间复制时,对象的年龄会增加。

  4. 年龄阈值: 对象的年龄达到一定的阈值(默认是15,但可以通过-XX:MaxTenuringThreshold参数调整),对象就会被认为足够"老",应该被晋升到老年代。

  5. 动态年龄调整: JVM会根据Survivor区的使用情况动态调整对象晋升到老年代的年龄阈值。如果Survivor区空间不足,JVM可能会降低年龄阈值,使对象更快地晋升到老年代。

  6. 空间分配担保: 当一个对象在Survivor区存活多次后,JVM会检查老年代的可用空间。如果老年代有足够的空间,对象会被晋升;如果没有,JVM会尝试进行一次Full GC来清理老年代的空间,然后再尝试晋升对象。

  7. 晋升到老年代: 一旦对象的年龄达到阈值,或者Survivor区空间不足,对象就会被复制到老年代。在老年代,对象不需要像在新生代那样频繁移动,因为老年代的垃圾回收频率较低。

  8. 空间分配担保的实现: 晋升过程中,JVM会使用一种称为"空间分配担保"(Space Accounting Guarantee)的策略,确保老年代有足够的空间来接收新生代晋升的对象。如果老年代空间不足,JVM会尝试压缩老年代,或者触发Full GC。

  9. TLABs: 为了进一步优化内存分配,JVM还使用线程本地分配缓冲区(Thread Local Allocation Buffers, TLABs)。每个线程有自己的TLAB,用于分配对象,这样可以减少线程之间的内存分配竞争。

通过这些机制,JVM能够根据对象的生命周期特性,有效地将对象从新生代晋升到老年代,同时保持垃圾回收的效率和性能。

什么时候触发新生代垃圾回收

新生代垃圾回收(Minor GC)的触发时机如下:

  1. 内存分配限制:当新生代的Eden区内存耗尽,无法满足新对象的内存分配请求时,将触发Minor GC以释放内存空间。

  2. 内存使用监控:JVM内部监控新生代内存使用情况,当达到预设的内存使用阈值时,可能触发Minor GC。

  3. GC算法实现:根据JVM所采用的垃圾回收算法实现,可能存在特定的条件或时间间隔来触发Minor GC。

  4. 显式GC请求:尽管System.gc()方法的调用并不保证立即执行GC,但它提供了一个显式的GC请求,JVM可能会响应此请求并触发Minor GC。

  5. 自适应调整:JVM可能采用自适应算法根据应用程序的内存分配模式和垃圾回收效率来动态决定Minor GC的触发时机。

  6. 内存分配速率:如果对象的内存分配速率持续超过GC回收速率,JVM可能会触发Minor GC以避免内存溢出。

  7. 堆内存压力:在堆内存使用接近其最大容量时,JVM可能会增加Minor GC的频率,以防止内存耗尽。

  8. JVM参数配置:特定的JVM启动参数,如-XX:+UseAdaptiveSizePolicy,允许JVM根据当前的内存分配和回收效率自适应地调整新生代的大小和Minor GC的触发策略。

  9. 外部系统因素:操作系统的内存压力或资源限制也可能间接影响JVM对Minor GC的触发决策。

  10. GC日志和性能监控:通过监控GC日志和性能指标,JVM可以分析对象生命周期和内存分配模式,以优化Minor GC的触发时机。

Minor GC是JVM内存管理的关键机制之一,其触发机制的设计旨在平衡内存回收的效率和应用程序的性能需求。

什么情况会进入老年代

在JVM中,对象从新生代晋升到老年代的条件主要包括以下几点:

  1. 年龄阈值:对象在Survivor区存活的次数达到JVM设置的年龄阈值(-XX:MaxTenuringThreshold参数,默认为15),该对象将被晋升到老年代。

  2. 空间分配担保:如果Survivor区的空间不足以容纳经过Minor GC后存活的对象,JVM会检查老年代的可用空间。如果老年代有足够的空间,这些对象将被直接晋升到老年代。

  3. 动态年龄调整:JVM可能会根据当前内存分配和回收的统计信息,动态调整对象晋升到老年代的年龄阈值。

  4. 老年代空间充足:即使对象的年龄未达到最大年龄阈值,如果老年代有足够的空间,JVM也可能将对象提前晋升到老年代。

  5. Full GC后的存活对象:在执行Full GC(老年代GC)后,新生代中所有存活的对象可能被直接晋升到老年代,以减少跨代引用的问题。

  6. 大对象直接分配:对于占用大量连续内存的大对象(如大型数组),JVM可能会直接将其分配到老年代,以避免在新生代中分配时产生过多的内存碎片。

  7. 长期存活对象:某些对象由于其生命周期较长,经过多次Minor GC后仍然存活,这些对象最终会被晋升到老年代。

  8. JVM参数配置:JVM参数如-XX:TargetSurvivorRatio(目标Survivor区使用率)和-XX:PretenureSizeThreshold(直接分配到老年代的对象大小阈值)可以影响对象晋升到老年代的行为。

  9. 内存分配策略:JVM的内存分配策略,如TLAB(Thread Local Allocation Buffer)的使用,也可能影响对象是否直接在老年代分配。

  10. 垃圾回收器的选择:不同的垃圾回收器可能有不同的晋升策略和内存管理机制。

对象晋升到老年代是一个动态的过程,JVM会根据当前的内存使用情况和垃圾回收效率来做出最合适的决策。

分别怎么进行垃圾回收

VM中的垃圾回收(Garbage Collection, GC)主要针对新生代和老年代采用不同的策略,以下是两种区域垃圾回收的基本方法:

新生代垃圾回收(Minor GC或Young GC)

  1. 复制算法:新生代通常使用复制算法(Copying)。该算法将Eden区和Survivor区(S0)中存活的对象复制到另一个Survivor区(S1)。复制完成后,Eden区和S0中的所有对象都会被清理。

  2. 对象年龄:每次Minor GC后,存活的对象年龄会递增。当对象的年龄达到-XX:MaxTenuringThreshold参数设定的阈值时,对象会被晋升到老年代。

  3. 清理过程:Minor GC主要涉及Eden区和Survivor区的清理,不涉及老年代。

  4. 内存分配:新创建的对象首先分配到Eden区,或者直接分配到TLAB(如果启用)。

  5. 触发条件:当Eden区被填满,或者Survivor区无法容纳从Eden区复制过来的存活对象时,会触发Minor GC。

老年代垃圾回收(Major GC或Full GC)

  1. 标记-清除算法:老年代的垃圾回收通常从标记所有存活的对象开始,然后清除未被标记的对象。

  2. 标记-清除-整理:为了防止内存碎片化,清除之后可能会进行一次整理,将存活的对象移动到堆的一端,以便于连续内存分配。

  3. 并发收集:老年代的垃圾回收可能采用并发收集算法,以减少GC暂停时间。

  4. 分代收集:老年代的GC可能与新生代的GC同时进行,这种GC被称为Full GC。

  5. 压缩技术:为了减少内存碎片,老年代的GC可能采用压缩技术,如G1 GC的Region重排。

  6. 触发条件:老年代GC可能由以下条件触发:

    • 老年代空间不足。
    • 显式调用System.gc()
    • 达到某些JVM参数设定的内存使用阈值。
  7. 内存分配:老年代用于存放长期存活的对象,以及从新生代晋升上来的对象。

  8. 性能影响:由于老年代GC涉及整个堆或大部分堆的内存,它通常比Minor GC有更长的暂停时间和更大的性能影响。

总结

  • 新生代GC(Minor GC)通常更频繁,使用复制算法,回收速度快,影响较小。
  • 老年代GC(Major GC或Full GC)较少见,使用标记-清除(可能伴随整理)算法,回收速度慢,可能引起较长时间的暂停。

JVM的垃圾回收策略和算法可以根据具体的垃圾回收器和JVM参数进行调整,以适应不同的应用场景和性能要求。

什么是永久代?

在JVM中,永久代(Permanent Generation,简称PermGen)是方法区的一种实现,主要用于存储类信息、常量、静态变量等数据。以下是对您提供内容的扩展和澄清:

永久代(PermGen)的角色

  • 类信息存储:永久代存储了类的元数据,包括类的字段、方法、构造函数等信息。
  • 常量池:存储编译期就已经确定的字面量和符号引用。
  • 静态变量:存储类的静态变量。
  • ClassLoader数据:存储类加载器的引用。

方法区垃圾回收的条件

方法区中的类信息并不是一直存在的,它们也可以被垃圾回收。以下是类信息可以被回收的条件:

  1. 实例对象的回收:类的所有实例对象已经被垃圾回收,即Java堆中不存在该类的任何实例。
  2. ClassLoader的回收:加载该类的ClassLoader已经被垃圾回收。
  3. 无引用的Class对象:堆中不存在任何对该Class对象的引用。

垃圾回收机制

  • 条件触发:只有当上述三个条件同时满足时,类信息才会变成垃圾,被JVM的垃圾回收机制处理。
  • 回收过程:JVM在进行垃圾回收时,会检查类是否满足回收条件,如果满足,就会在下一次的Full GC中被清除。

元空间

  • 元空间(Metaspace):在Java 8中,永久代被元空间所取代。元空间使用的是本地内存(Native Memory),而不是虚拟机内存(Heap Memory),这样做的好处是可以避免永久代空间不足的问题。

永久代是JVM中用于存储类信息的重要内存区域,但它并不是永久存储的。类信息在满足特定条件后可以被垃圾回收,这是JVM内存管理的一部分,有助于释放不再使用的类信息,优化内存使用。随着Java 8的发布,元空间取代了永久代,提供了更为灵活的类信息存储方式。

今天介绍了很多很多概念相关的知识点,让大家有个大概的印象,后续会一个一个剖析。

专题汇总

JVM专题一:深入分析Java工作机制

JVM专题二:Java如何进行编译的

JVM专题三:Java代码如何运行

JVM专题四:JVM的类加载机制

JVM专题五:类加载器与双亲委派机制

JVM专题六:JVM的内存模型

JVM专题七:JVM垃圾回收机制

JVM专题八:JVM如何判断可回收对象

JVM专题九:JVM分代知识点梳理

JVM专题十:JVM中的垃圾回收机制

JVM专题十一:JVM 中的收集器一

JVM专题十二:JVM 中的收集器二

JVM专题十三:总结与整理(面试常用)

相关文章:

JVM专题九:JVM分代知识点梳理

今天开始,咱们开始剖析JVM内存划分的原理细节,以及我们创建的那些对象在JVM中到底是如何分配,如何流动的,首先解决第一个问题:JVM内存的一个分代模型:年轻代、老年代、永久通过之前的专题我们知道,那就是我…...

wireshark常用过滤命令

wireshark常用过滤命令 wireshark抓包介绍单机单点:单机多点:双机并行: wireshark界面认识默认布局调整布局(常用)显示FCS错误 wireshark常见列Time回包数据报对应网络模型 wireshark基本操作结束抓包再次开始抓包 **wireshark常用过滤命令**…...

「全新升级,性能更强大——ONLYOFFICE 桌面编辑器 8.1 深度评测」

文章目录 一、背景二、界面设计与用户体验三、主要新功能亮点3.1 高效协作处理3.2 共同编辑,毫无压力3.3 批注与提及3.4 追踪更改3.5 比较与合并3.6 管理版本历史 四、性能表现4.1 集成 AI 工具4.2 插件强化 五、用户反馈与使用案例 一、背景 Ascensio System SIA -…...

线程版服务器实现(pthread_server)

用到的所有方法所需要的参数可以在wrap.c文件中查询&#xff0c;wrap中找不到的直接通过man手册查询 1.首先介绍一下我自己写的包裹文件&#xff0c;里面有各种在可能要用到的方法 wrap.c: #include <stdlib.h> #include <stdio.h> #include <unistd.h> #…...

js异常处理方案

文章目录 异常处理方案同步代码的异常处理Promise 的异常处理async await 的异常处理 感谢阅读&#xff0c;觉得有帮助可以点点关注点点赞&#xff0c;谢谢&#xff01; 异常处理方案 在JS开发中&#xff0c;处理异常包括两步&#xff1a;先抛出异常&#xff0c;然后捕获异常。…...

C++文件路径处理2 - 路径拼接路径解析

1. 关键词2. filesystem.h3. filepath.cpp6. 测试代码7. 运行结果8. 源码地址 1. 关键词 关键词&#xff1a; C 文件路径处理 路径拼接 获取父目录的路径 获取文件名 获取拓展名 跨平台 应用场景&#xff1a; 路径的拼接路径的解析 2. filesystem.h #pragma once#include…...

数据结构5---矩阵和广义表

一、矩阵的压缩存储 特殊矩阵:矩阵中很多值相同的元素并且它们的分布有一定的规律。 稀疏矩阵:矩阵中有很多零元素。压缩存储的基本思想是: (1)为多个值相同的元素只分配一个存储空间; (2)对零元素不分配存储空间。 1、特殊矩阵的压缩存储 &#xff08;1&#xff09;对称矩…...

jquery使用infinitescroll无线滚动+自定义翻页

jquery版本 jquery-1.8.3.js infinitescroll版本 2.0.0 如果infinitescroll版本最新的jquery版本也要用新的 接口用nodejs jquery.infinitescroll.js官网地址 前端代码《接口返回JSON数据》 <!DOCTYPE html> <html lang"en"> <head><meta cha…...

【漏洞复现】锐捷统一上网行为管理与审计系统——远程命令执行漏洞

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 锐捷统一上网行为管理与审计系统naborTable/static_convert.php…...

通义灵码上线 Visual Studio 插件市场啦!

通义灵码&#xff0c;是阿里云出品的一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等能力&#xff0c;提供代码智能生成、研发智能问答能力。 通义灵…...

GESP 四级急救包(2):客观题真题集

客观题真题集 一、选择题1. 真题梳理2. 真题答案3. 重难点点播(1) 指针和地址(2) 时间复杂度 二、判断题1. 真题梳理2. 真题答案 一、选择题 1. 真题梳理 若函数声明为 void f(int &a, int b, const int &c)&#xff0c;且在主函数内已经声明了 x , y , z x,y,z x,y,…...

VERYCLOUD睿鸿股份确认参展2024年ChinaJoy BTOB商务洽谈馆,期待与你相聚

作为在全球数字娱乐领域兼具知名度与影响力的年度盛会&#xff0c;2024年第二十一届ChinaJoy将于7月26日至7月29日在上海新国际博览中心盛大召开&#xff0c;本届展会主题为&#xff1a;初心“游”在&#xff0c;精彩无限&#xff01;&#xff08;Stay True, Game On.&#xff…...

Java面试题:讨论Spring框架的核心组件,如IoC容器、AOP、事务管理等

Spring框架是一个功能强大且灵活的Java企业级应用开发框架&#xff0c;其核心组件包括以下几个主要部分&#xff1a; 1. IoC容器&#xff08;Inversion of Control Container&#xff09; IoC容器是Spring框架的核心部分&#xff0c;用于管理应用程序的依赖注入&#xff08;D…...

【方案】基于5G智慧工业园区解决方案(PPT原件)

5G智慧工业园区整体解决方案旨在通过集成5G通信技术、物联网、大数据和云计算等先进技术&#xff0c;实现园区的智能化、高效化和绿色化。 该方案首先构建高速、稳定的5G网络&#xff0c;确保园区内设备、人员与物流的实时连接和高效沟通。其次&#xff0c;通过工业物联网技术&…...

使用System.currentTimeMillis获取当前时间

使用System.currentTimeMillis获取当前时间 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来探讨Java中如何使用System.currentTimeMillis()方法来获取…...

手机远程控制另一台手机的全新使用教程(安卓版)

看完这篇文章&#xff0c;你可以了解到安卓手机如何远程控制安卓手机&#xff0c;以及苹果手机如何远程控制安卓手机。 如果想要用安卓手机远程管控苹果手机&#xff0c;或者苹果手机远程管控另一台苹果手机&#xff0c;请点击查看视频《手机远程管控另一台手机的全新使用教程…...

商城积分系统的代码实现(上)-- 积分账户及收支记录

一、背景 上一系列文章&#xff0c;我们说了积分的数模设计及接口设计&#xff0c;接下里&#xff0c;我们将梳理一下具体的代码实现。 使用的语言的java&#xff0c;基本框架是spring-boot&#xff0c;持久化框架则是Jpa。 使用到的技术点有&#xff1a; 分布式锁&#xf…...

【C++进阶9】异常

一、C语言传统的处理错误的方式 终止程序&#xff0c;如assert 如发生内存错误&#xff0c;除0错误时就会终止程序返回错误码 需要程序员自己去查找对应的错误 z如系统的很多库的接口函数都是通 过把错误码放到errno中&#xff0c;表示错误 二、C异常概念 异常&#xff1a;函…...

RecyclerVIew->加速再减速的RecyclerVIew平滑对齐工具类SnapHelper

XML文件 ItemView的XML文件R.layout.shape_item_view <?xml version"1.0" encoding"utf-8"?> <FrameLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"100dp"android:layout_heig…...

突破SaaS产品运营困境:多渠道运营如何集中管理?

随着数字化时代的到来&#xff0c;SaaS&#xff08;软件即服务&#xff09;产品已成为企业日常运营不可或缺的工具。然而&#xff0c;在竞争激烈的市场环境下&#xff0c;SaaS产品运营越来越重视多渠道、多平台布局&#xff0c;以更广泛地触及潜在用户&#xff0c;然而&#xf…...

智能语音热水器:置入NRK3301离线语音识别ic 迈向智能家居新时代

一、热水器语音识别芯片开发背景 在科技的今天&#xff0c;人们对于生活品质的追求已不仅仅满足于基本的物质需求&#xff0c;更渴望通过智能技术让生活变得更加便捷、舒适。热水器作为家庭生活中不可或缺的一部分&#xff0c;其智能化转型势在必行。 在传统热水器使用中&#…...

Redis集群部署合集

目录 一. 原理简述 二. 集群配置​​​​​​​ 2.1 环境准备 2.2 编译安装一个redis 2.3 创建集群 2.4 写入数据测试 实验一&#xff1a; 实验二&#xff1a; 实验三&#xff1a; 实验四&#xff1a; 添加节点 自动分配槽位 提升节点为master&#xff1a; 实验…...

【HDFS】关于Hadoop的IPC.Client类的一些整理

org.apache.hadoop.ipc.Client 类是IPC服务的一个客户端。 IPC请求把一个Writable对象当做参数,返回一个Writable对象当做结果value。 一个IPC服务运行在某个端口上,并且由参数class和value class定义。 Router里的IPC.Client对象就两个 有这样一个类:ClientCache 看名字就…...

Swoole v6 能否让 PHP 再次伟大?

现状 传统的 PHP-FPM 也是多进程模型的的运行方式&#xff0c;但每个进程只能处理完当前请求&#xff0c;才能接收下一个请求。而且对于 PHP 脚本来说&#xff0c;只是接收请求和响应请求&#xff0c;并不参与网络通信。对数据库资源的操作&#xff0c;也是一次请求一次有效&am…...

C++ STL Iterator Adapter

1. std::back_insert_iterator 使用 // back_insert_iterator example #include <iostream> // std::cout #include <iterator> // std::back_insert_iterator #include <vector> // std::vector #include <algorithm> // std::copy…...

android-aidl5

aidl类是实现Manager和Service通信的桥梁。 例如在修改Android Wifi功能的时候看到WifiManager管理WifiService&#xff1b; AIDL是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口。 比如onclick&#xff08;&#xff09;&#xff0c;用oneway修…...

day01-项目介绍及初始化-登录页

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 day01-项目介绍及初始化-登录页一、人力资源项目介绍1.1项目架构和解决方案主要模块解决的问题 二、拉取项目基础代码1.引入库2.升级core-js版本到3.25.5按照完整依…...

华为开发者大会:全场景智能操作系统HarmonyOS NEXT

文章目录 一、全场景智能操作系统 - HarmonyOS NEXT1.1 系统特性1.2 关于架构、体验和生态 二、应用案例2.1 蚂蚁mpaas平台的性能表现 三、新版本应用框架发布3.1 新语言发布3.2 新数据库发布3.3 新版本编译器的发布 四、CodeArts和DataArts4.1 CodeArts4.2 DataArts 五、总结 …...

深度学习二分类评估详细解析与代码实战

深度学习二分类的实战代码&#xff1a;使用 Trainer API 微调模型. https://huggingface.co/learn/nlp-course/zh-CN/chapter3/3 如果你刚接触 自然语言处理&#xff0c;huggingface 是你绕不过去的坎。但是目前它已经被墙了&#xff0c;相信读者的实力&#xff0c;自行解决吧。…...

c++笔记容器详细介绍

C标准库提供了多种容器来存储和管理数据。这些容器属于<vector>, <list>, <deque>, <map>, <set>, <unordered_map>, <unordered_set>等头文件中。这些容器各有优缺点&#xff0c;适用于不同的场景。下面详细介绍几种主要的容器及其…...

CS144 Lab3 TCPSender复盘

一.基础概念 1.TCPSender在TCPSocket中的地位与作用 Lab0中实现了基于内存模拟的流控制-字节流&#xff08;ByteStream&#xff09;&#xff0c;底层使用std::deque实现&#xff0c;根据最大容量Capacity进行容量控制。个人理解它相当于应用层的输入输出缓存区&#xff0c;用户…...

建筑可视化中使用云渲染的几大理由

在建筑行业中&#xff0c;可视化技术已成为不可或缺的一部分。无论是设计方案的展示、施工进度的模拟&#xff0c;还是最终效果的呈现&#xff0c;建筑可视化都发挥着至关重要的作用。 建筑可视化是指通过计算机技术和图形学算法&#xff0c;将建筑设计、规划和施工过程中的数据…...

Python数据可视化-地图可视化

1.首先绘制实现数据可视化的思维导图 具体要实现什么功能-怎么处理&#xff0c;先把思路写好 数据来源&#xff1a; 爬取的数据 运行结果&#xff1a; 部分代码&#xff1a; 完整代码请在下方↓↓↓&#x1f447;获取 转载请注明出处&#xff01;...

leetcode 动态规划(基础版)单词拆分

题目&#xff1a; 题解&#xff1a; 一种可行的dp做法是基于完全背包问题&#xff0c;将s看成是一个背包&#xff0c;wordDict看作是物品&#xff0c;然后往s中放入物品判断最终是否可以变为给定的s即可。这道题和上一题都用到了在dp如何枚举连续子串和状态表示&#xff1a;枚…...

Ubuntu/Linux调试安装南京来可CAN卡

准备好USB rules文件和can driver文件备用! 必做&#xff1a;放置USB rules文件到对应位置处理权限问题 而后&#xff1a;安装内核driver并编译。需求众多依赖编译环境&#xff0c;视情况安装填补。如GCC,G,make等等 进入对应64bit文件夹中&#xff0c;添加权限&#xff0c;执…...

vue2+TS获取到数据后自动叫号写法

1.父组件写法 初始化&#xff1a; //引入子组件 <odialog ref"odialogRef" onSure"onSurea"></odialog> //子传父private onSurea() {// 初始化信息/重新叫号来的数据this.initTabelData()setTimeout(() > {// 播放声音的数据this.search…...

28、架构-边界:微服务的粒度

微服务的粒度 在设计微服务架构时&#xff0c;确定微服务的粒度是一个关键问题。粒度过大或过小都会带来不同的问题&#xff0c;因此需要找到合理的粒度来划分微服务。下面详细探讨微服务粒度的合理范围及其影响因素。 1. 微服务粒度的上下界 微服务的粒度不应该只有唯一正确…...

开源API网关-ApacheShenYu首次按照启动遇到的问题

一.背景 公司有API网关产品需求&#xff0c;希望有图形化的后台管理功能。看到了ApacheShenYu&#xff0c;作为Apache的顶级项目&#xff0c;直接认可了。首先&#xff0c;感谢各位大神的付出&#xff0c;初步看这个项目是国内大厂中的大神创立的&#xff0c;在此表示膜拜&…...

uniapp获取证书秘钥、Android App备案获取公钥、签名MD5值

一、 uniapp获取证书秘钥 打开uniapp开发者中心下载证书打开cmd输入以下这段代码&#xff0c;下载提供查看到的密钥证书密码就可以了&#xff01;下载证书在 java 环境下运行才可以 // your_alias 换成 证书详情中的别名&#xff0c;your_keystore.keystore 改成自己的证书文件…...

QT 如何储存多种数据类型(QVariant )

QVariant 是 Qt 框架中用于存储各种数据类型的类。它提供了一个强大的类型系统&#xff0c;允许你在运行时存储和检索多种类型的数据&#xff0c;而不需要在编译时确定类型。QVariant 的主要优点在于它的灵活性和通用性&#xff0c;这使得它在 Qt 的很多组件和机制中都被广泛使…...

持续总结中!2024年面试必问的操作系统面试题(九)

上一篇地址&#xff1a;持续总结中&#xff01;2024年面试必问的操作系统面试题&#xff08;八&#xff09;-CSDN博客 十七、解释什么是操作系统的安全性和它的重要性。 操作系统的安全性&#xff08;Operating System Security&#xff09;是指操作系统采取的一系列措施来保…...

操作系统入门 -- 文件管理

操作系统入门 – 文件管理 1.文件管理概述 1.1 文件系统基本功能 目前&#xff0c;计算机内存的容量依然有限&#xff0c;并且其特性决定了数据无法长时间保存&#xff0c;因此把执行的数据以文件形式保存在外存中&#xff0c;等到需要使用时再调入内存。所以&#xff0c;操…...

由浅入深,走进深度学习(2)

今天分享的学习内容主要就是神经网络里面的知识啦&#xff0c;用到的框架就是torch 在这里我也是对自己做一个学习记录&#xff0c;如果不符合大家的口味&#xff0c;大家划走就可以啦 可能没有什么文字或者原理上的讲解&#xff0c;基本上都是代码&#xff0c;但是我还是想说…...

【Python Tips】创建自己的函数包并安装进Anaconda,像引入标准包一样直接import导入

目录 一、引言 二、方法步骤 步骤一&#xff1a;创建包目录结构 步骤二&#xff1a;配置__init__.py文件 步骤三&#xff1a;文件夹外配置setup.py文件 步骤四&#xff1a;终端Pip安装 三、结尾 一、引言 在编写项目代码的时候&#xff0c;有些自定义功能的函数是可以复用的。…...

【Python机器学习实战】 | 基于支持向量机(Support Vector Machine, SVM)进行分类和回归任务分析

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…...

备份和还原

stai和dnta snat&#xff1a;源地址转换 内网---外网 内网ip转换成可以访问外网的ip 内网的多个主机可以使用一个有效的公网ip地址访问外部网络 DNAT&#xff1a;目的地址转发 外部用户&#xff0c;可以通过一个公网地址访问服务内部的私网服务。 私网的ip和公网ip做一个…...

Java数组的初始化方法

Java数组的初始化方法 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在Java编程中&#xff0c;数组是一种非常基础也非常重要的数据结构&#xff0c;它能够存储…...

通过分离有色和无色pdf页面减少打印费

前言 该工具是我认识的一位中科大的大佬在本科毕业的时候做的一个小工具&#xff0c;去打印店打印全彩的毕业论文的话会比较贵&#xff0c;他想到有没有一种方案可以实现有彩色页面的pdf和没有彩色页面的pdf分开打印&#xff0c;前者打印彩色&#xff0c;后者打印黑白&#xf…...

c语言--指针

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理c语言中指针的相关知识点。 指针概念 指针存储的就是数据的地址。 直观理解: 李华家是北洋路130号1单元101 用变量处理数据: 我们去李华家拿数据。 用指针处理数据: 我们去北洋路130号1单元101拿数据…...

python-九九乘法表(对齐式1)

[题目描述] 输出九九乘法表&#xff0c;输出格式见样例。输入格式&#xff1a; 无输出格式&#xff1a; 输出乘法表&#xff0c;对齐方式见样例输出。样例输入 无样例输出 来源/分类&#xff08;难度系数&#xff1a;一星&#xff09; 完整代码展示&#xff1a; #对齐式1 a[] …...

《概率论与数理统计》期末复习笔记_上

目录 第1章 随机事件与概率 1.1 随机事件 1.2 事件的关系与运算 1.3 概率的定义与性质 1.4 古典概型_重点 1.5 几何概型 1.6 条件概率与乘法公式 1.7 全概率公式与贝叶斯公式_重点 1.8 事件的独立性_重点 1.9 伯努利概型_重难点 第2章 随机变量及其分布 2.1 随机变…...

js 复制文本带样式

一键复制带样式的html文本到邮件 <div><div idcopy-content><div style{{ fontSize: 16px,fontWeight: 500, lineHeight: 24px, color: #222, marginBottom: 16px }}>邀请您参加腾讯会议网络研讨会&#xff08;Webinar)</div></div><Button …...

hexo博客搭建

系列文章目录 文章目录 系列文章目录前言1. 环境配置2. 打包并发布到github仓库3. 生成ssh秘钥4.vscode配置本地与远端相对路径不一致问题总结 前言 本文主要介绍了hexo博客怎么搭建 1. 环境配置 安装git、nodejs、npm创建博客文件夹blogcmd输入命令npm install -g hexo初始化…...

《昇思25天学习打卡营第24天 | 昇思MindSporeResNet50图像分类》

24天 本节学习了使用ResNet50网络对CIFAR-10数据集进行分类。 步骤&#xff1a; 1.数据集准备与加载 2.构建网络 残差网络结构(Residual Network)是ResNet网络的主要亮点&#xff0c;ResNet使用残差网络结构后可有效地减轻退化问题&#xff0c;实现更深的网络结构设计&#x…...

SSL 之 http只用crt格式证书完成SSL单向认证通信

背景 远程调用第三方服务时&#xff0c;之前都是双向认证&#xff0c;服务器提供jks格式的keystore证书&#xff0c;客户端配置好即可。 今天遇到个奇葩需求&#xff0c;服务器只给根公钥证书(root.crt)&#xff0c;还是第三方合法证书&#xff0c;要求单向认证&#xff0c;客户…...

011、MongoDB副本集数据同步机制深度解析

目录 MongoDB副本集数据同步机制深度解析 1. 副本集架构概述 1.1 基本组成 1.2 节点角色 2. 数据同步过程详解 2.1 初始同步 2.2 持续复制 2.3 Oplog详解 3. 数据一致性与可用性 3.1 写关注(Write Concern) 3.2 读偏好(Read Preference) 3.3 因果一致性会话 4. 高…...

底盘革新+M9同款雷达,问界M7Ultra升级点都在这

20万级的SUV,8个月获得超过18万的用户,这样辉煌的成绩你几乎很难在汽车圈找到第二家,问界M7国民SUV名副其实。???但华为与赛力斯绝不止步于此,5月31日晚,问界M7 Ultra正式上市,次共推出四款车型,售价区间为28.98-32.98万元。与此同时北汽新能源与华为合作的享界S9也正…...

未来三年雷军和他的小米汽车首先不得不为生存而战

小米SU7正式上市,可谓红透了汽车界。雷军及小米汽车多个话题登上热搜,而大定的数据也映衬出小米SU7的热度。然而,在一片喧嚣声中,我倒觉得,未来三年雷军和他的小米汽车首先不得不为生存而战。未来三年小米汽车大概率将是亏损运营。从这次小米SU7的定价就可以看出端倪。小米…...

九章云极DataCanvas公司重磅亮相第七届数字中国建设峰会

近日&#xff0c;由国家发展改革委、国家数据局、国家网信办、科技部、国务院国资委、福建省人民政府共同主办的第七届数字中国建设峰会在福州盛大举行&#xff0c;九章云极DataCanvas公司重磅亮相峰会现场&#xff0c;深度展示智算中心建设核心成果及“算法算力”一体化AI智算…...

FPGA——eMMC验证

一.FPGA基础 1.FPGA烧录流程 (1) 加载流文件 —— bitfile (2) 烧录文件 —— cmm 二.MMC 1.基础知识 (1)jz4740、mmc、emmc、sd之间的关系&#xff1f; jz4740——处理器 mmc——存储卡标准 emmc——mmc基础上发展的高效存储解决方案 sd—— 三.eMMC和SD case验证 1.ca…...

vue 表格表头展示不下,显示。。。;鼠标悬浮展示全部

vue 表格表头展示不下&#xff0c;显示。。。&#xff1b;鼠标悬浮展示全部 <templateslot-scope"scope"slot"header"><span:title"临时证券类型"style"white-space:nowrap">{{ 临时证券类型 }}</span></templa…...

快解析动态域名解析,实现外网访问内网数据库

今天跟大家分享一下如何借助快解析动态域名解析&#xff0c;在两种特定网络环境下&#xff0c;实现外网访问内网mysql数据库。 第1种网络环境&#xff1a;路由器分配的是动态公网IP&#xff0c;且有路由器登录管理权限。如何实现外网访问内网mysql数据库&#xff1f; 针对这种…...