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

JVM如何处理多线程内存抢占问题

目录

1、堆内存结构

2、运行时数据

3、内存分配机制

3.1、堆内存结构

3.2、内存分配方式

1、指针碰撞

2、空闲列表

4、jvm内存抢占方案

4.1、TLAB

4.2、CAS

4.3、锁优化

4.4、逃逸分析与栈上分配

5、问题

5.1、内存分配竞争导致性能下降

5.2、伪共享(False Sharing)

1、对象内存结构

2、对象内存布局

3、问题表现

4、解决方案

5.3、内存泄漏(ThreadLocal 未清理)


前言:

        在多线程环境下,JVM 需要高效、安全地管理内存分配,避免多个线程同时竞争内存资源导致的性能下降或数据不一致问题。

如下图所示:

了解更多jvm的知识,可参考:关于对JVM的知识整理_谈谈你对jvm的理解-CSDN博客


1、堆内存结构

        由年前代和老年代组成。年轻代分为eden和survivor1和survivor2区。

        年轻代和老年代分别站别1/3和2/3。而eden区占比年轻代8/10,s1和s2分别占比1/10,1/10。

如下图所示:

        java堆里面存放的是数组和对象实例,字符串常量池、静态变量和TLAB。

如下图所示:

由上图可知:可以看到TLAB存储在堆中。

        TLAB 本身是存储在堆中,但它对每个线程都是独立的。一个线程在创建对象时会使用其自己的 TLAB 来进行分配,而不是直接访问共享的堆内存区域。

如下所示:


2、运行时数据

由下图所示:运行数据区由堆和方法区(元空间)组成。

        完整的执行过程由类加载系统、运行时数据区和执行引擎及本地方法库和接口组成。


3、内存分配机制

JVM 的内存分配主要发生在 堆(Heap) 上,涉及以下几个关键组件:

3.1、堆内存结构

  • 新生代(Young Generation):存放新创建的对象,分为 Eden区 和 Survivor区

  • 老年代(Old Generation):存放长期存活的对象。

  • TLAB(Thread-Local Allocation Buffer):每个线程私有的内存分配缓冲区。

3.2、内存分配方式

1、指针碰撞

如下图所示:

Bump-the-Pointer:适用于 连续内存空间(如 Serial、ParNew 等垃圾收集器)。

         通过原子操作移动指针分配内存。

2、空闲列表

如下图所示:

Free List:适用于 不连续内存空间(如 CMS、G1 等垃圾收集器)。

        维护一个空闲内存块列表,分配时查找合适的内存块。


4、jvm内存抢占方案

4.1、TLAB

全名(Thread-Local Allocation Buffer)。

1、作用

        每个线程在 Eden区 拥有一块私有内存(TLAB),用于分配小对象(默认约 1% Eden 大小)。避免多线程竞争全局堆内存指针,提升分配效率。

2、特点

TLAB 分配无需加锁,因为每个线程操作自己的缓冲区。

当 TLAB 用尽时,线程会申请新的 TLAB(可能触发锁竞争)。

-XX:+UseTLAB  # 默认启用
-XX:TLABSize=512k  # 调整 TLAB 大小

如下图所示:

4.2、CAS

(Compare-And-Swap)原子操作

适用场景

当 TLAB 不足或分配大对象时,线程需在 全局堆 分配内存。

JVM 使用 CAS(如 Atomic::cmpxchg 确保指针更新的原子性。

// HotSpot 源码中的内存分配逻辑(伪代码)
if (使用 TLAB) {从 TLAB 分配内存;
} else {do {old_value = 当前堆指针;new_value = old_value + 对象大小;} while (!CAS(&堆指针, old_value, new_value)); // 原子更新指针返回 old_value;
}

4.3、锁优化

如偏向锁、自旋锁

问题

    如果多个线程同时竞争全局堆内存,可能触发锁竞争。

    解决方案

    JVM 使用 偏向锁自旋锁 减少线程阻塞。

    例如,G1 垃圾收集器在分配时采用 分区(Region)锁,降低冲突概率。

    4.4、逃逸分析与栈上分配

    逃逸分析(Escape Analysis)

            JVM 分析对象是否可能被其他线程访问(即是否“逃逸”)。如果对象未逃逸,可直接在 栈上分配,避免堆内存竞争。

    如下图所示:

    启用方式

    -XX:+DoEscapeAnalysis  # 默认启用
    -XX:+EliminateAllocations  # 开启标量替换

    5、问题

            在上面介绍中,关于jvm如何可以解决内存抢占,下面解释下内存抢占引发的典型问题及解决方案。

    5.1、内存分配竞争导致性能下降

    表现

              多线程频繁分配对象时,new 操作变慢。

      解决方案

              增大 TLAB-XX:TLABSize)。使用对象池(如 Apache Commons Pool)。

      5.2、伪共享(False Sharing)

      1、对象内存结构

              在 Java 中,对象的所有实例字段(如 x 和 y)默认会连续存储在对象的内存布局中,减少内存碎片,一次性分配内存。

      代码示例:

      class FalseSharingExample {volatile long x; // 8字节volatile long y; // 8字节
      }
      • 对象头(Header):12 字节(64位 JVM,未压缩指针时)。

      • 字段 x:8 字节(紧接对象头)。

      • 字段 y:8 字节(紧接 x)。

      • 对齐填充(Padding):4 字节(见下文)。

      2、对象内存布局

              java对象的内存布局由对象头(12个字节)、实例数据、对象填充(8个字节)组成。

      如图所示:

      更多了解可参考Java对象的内存布局及GC回收年龄的研究-CSDN博客

      3、问题表现

              需要从 对象内存布局 和 CPU缓存行 两个角度分析。

      • x 和 y 的地址相差 8 字节(因为 long 类型占 8 字节)。

      • 它们必然位于同一缓存行(缓存行通常 64 字节)。

      代码示例:

      class FalseSharingExample {volatile long x; // 线程1修改volatile long y; // 线程2修改public static void main(String[] args) {FalseSharingExample example = new FalseSharingExample();Thread thread1 = new Thread(() -> {for (int i = 0; i < 1_0000_0000; i++) {example.x = i; // 高频修改x}});Thread thread2 = new Thread(() -> {for (int i = 0; i < 1_0000_0000; i++) {example.y = i; // 高频修改y}});long start = System.currentTimeMillis();thread1.start();thread2.start();thread1.join();thread2.join();System.out.println("耗时: " + (System.currentTimeMillis() - start) + "ms");}
      }

                多个线程修改同一缓存行(Cache Line)的不同变量,导致 CPU 缓存频繁失效。

        运行结果

        • 由于 x 和 y 在同一缓存行,两个线程会互相使对方的缓存失效。

        • 耗时可能高达 5000ms(实际结果依赖CPU架构)。

        原因如下图所示:

        4、解决方案

        1、手动解决

        class ManualPaddingExample {volatile long x;// 填充56字节(64字节缓存行 - 8字节long)private long p1, p2, p3, p4, p5, p6, p7; volatile long y;public static void main(String[] args) { /* 同上 */ }
        }

        效果

        • x 和 y 被隔离到不同的缓存行。

        • 耗时可能降至 1000ms(性能提升5倍)。

        2、使用 @Contended 自动解决(Java 8+)

        @Contended 让 JVM 自动完成填充,代码更简洁:

        import sun.misc.Contended;class ContendedExample {@Contended  // 确保x独占缓存行volatile long x;@Contended  // 确保y独占缓存行volatile long y;public static void main(String[] args) { /* 同上 */ }
        }

        关键步骤

        1. 添加JVM参数(允许使用@Contended):

        -XX:-RestrictContended

        运行结果

                  耗时与手动填充一致(约 1000ms),但代码更干净。

          最终内存布局:

          | 对象头 (12字节) | x (8字节) | y (8字节) | 填充 (4字节) |
          |----------------|----------|----------|-------------|

          5.3、内存泄漏(ThreadLocal 未清理)

          • 表现

            • 线程池中 ThreadLocal 未调用 remove(),导致内存无法释放。

          • 解决方案

            • 必须 remove()

          try {threadLocal.set(value);// 业务逻辑
          } finally {threadLocal.remove(); // 清理
          }

          总结


          总结

          • TLAB 是 JVM 解决多线程内存竞争的核心机制,通过 线程私有缓冲区 减少锁竞争。

          • CAS 操作 用于全局堆内存分配,保证原子性。

          • 逃逸分析 和 栈上分配 可彻底避免堆内存竞争。

          • 伪共享 和 ThreadLocal 泄漏 需额外注意,通过缓存行填充和及时清理避免。

                  通过合理配置 JVM 参数(如 TLAB 大小)和优化代码(如使用对象池),可以显著降低多线程内存抢占的开销。

          相关文章:

          JVM如何处理多线程内存抢占问题

          目录 1、堆内存结构 2、运行时数据 3、内存分配机制 3.1、堆内存结构 3.2、内存分配方式 1、指针碰撞 2、空闲列表 4、jvm内存抢占方案 4.1、TLAB 4.2、CAS 4.3、锁优化 4.4、逃逸分析与栈上分配 5、问题 5.1、内存分配竞争导致性能下降 5.2、伪共享&#xff08…...

          猫番阅读APP:丰富资源,优质体验,满足你的阅读需求

          猫番阅读APP是一款专为书籍爱好者设计的移动阅读应用&#xff0c;致力于提供丰富的阅读体验和多样化的书籍资源。它不仅涵盖了小说、非虚构、杂志等多个领域的电子书&#xff0c;还提供了个性化推荐、书架管理、离线下载等功能&#xff0c;满足不同读者的阅读需求。无论是通勤路…...

          Redis 学习笔记 4:优惠券秒杀

          Redis 学习笔记 4&#xff1a;优惠券秒杀 本文基于前文的黑马点评项目进行学习。 Redis 生成全局唯一ID 整个全局唯一 ID 的结构如下&#xff1a; 这里的时间戳是当前时间基于某一个基准时间&#xff08;项目开始前的某个时间点&#xff09;的时间戳。序列号是依赖 Redis 生…...

          C++学习:六个月从基础到就业——C++17:if/switch初始化语句

          C学习&#xff1a;六个月从基础到就业——C17&#xff1a;if/switch初始化语句 本文是我C学习之旅系列的第四十六篇技术文章&#xff0c;也是第三阶段"现代C特性"的第八篇&#xff0c;主要介绍C17引入的if和switch语句的初始化表达式特性。查看完整系列目录了解更多内…...

          C++跨平台开发经验与解决方案

          在当今软件开发领域&#xff0c;跨平台开发已成为一个重要的需求。C作为一种强大的系统级编程语言&#xff0c;在跨平台开发中扮演着重要角色。本文将分享在实际项目中的跨平台开发经验和解决方案。 1. 构建系统选择 CMake的优势 跨平台兼容性好 支持多种编译器和IDE 强大…...

          RabbitMQ 工作模式(上)

          前言 在 RabbitMQ 中&#xff0c;一共有七种工作模式&#xff0c;我们也可以打开官网了解&#xff1a; 本章我们先介绍前三种工作模式 &#xff08;Simple&#xff09;简单模式 P&#xff1a;producer 生产者&#xff0c;负责发送消息 C&#xff1a;consumer 消费者&#x…...

          为什么需要加密机服务?

          前言 大家好&#xff0c;我是老马。 以前我自己在写工具的时候&#xff0c;都是直接自己实现就完事了。 但是在大公司&#xff0c;或者说随着合规监管的要求&#xff0c;自己随手写的加解密之类的&#xff0c;严格说是不合规的。 作为一家技术性公司&#xff0c;特别是金融…...

          【Linux】利用多路转接epoll机制、ET模式,基于Reactor设计模式实现

          &#x1f4da; 博主的专栏 &#x1f427; Linux | &#x1f5a5;️ C | &#x1f4ca; 数据结构 | &#x1f4a1;C 算法 | &#x1f152; C 语言 | &#x1f310; 计算机网络 上篇文章&#xff1a;多路转接epoll&#xff0c;实现echoserver 至此&#xff0c;Linux与…...

          c/c++的findcontours崩溃解决方案

          解决 Windows 平台 OpenCV findContours 崩溃&#xff1a;一种更稳定的方法 许多在 Windows 平台上使用 OpenCV 的开发者可能会在使用 findContours 函数时&#xff0c;遇到令人头疼的程序崩溃问题。尽管网络上流传着多种解决方案&#xff0c;但它们并非总能根治此问题。 当时…...

          机器学习 Day18 Support Vector Machine ——最优美的机器学习算法

          1.问题导入&#xff1a; 2.SVM定义和一些最优化理论 2.1SVM中的定义 2.1.1 定义 SVM 定义&#xff1a;SVM&#xff08;Support Vector Machine&#xff0c;支持向量机&#xff09;核心是寻找超平面将样本分成两类且间隔最大 。它功能多样&#xff0c;可用于线性或非线性分类…...

          npm与pnpm--为什么推荐pnpm

          包管理器中 npm是最经典的&#xff0c;但大家都任意忽略一个更优质的管理器&#xff1a;pnpm 1. 核心区别 特性npmpnpm依赖存储方式扁平化结构&#xff08;可能重复依赖&#xff09;硬链接 符号链接&#xff08;共享依赖&#xff0c;节省空间&#xff09;安装速度较慢&#…...

          ollama调用千问2.5-vl视频图片UI界面小程序分享

          1、问题描述&#xff1a; ollama调用千问2.5-vl视频图片内容&#xff0c;通常用命令行工具不方便&#xff0c;于是做了一个python UI界面与大家分享。需要提前安装ollama&#xff0c;并下载千问qwen2.5vl:7b 模型&#xff0c;在ollama官网即可下载。 &#xff08;8G-6G 显卡可…...

          济南国网数字化培训班学习笔记-第三组-1-电力通信传输网认知

          电力通信传输网认知 电力通信基本情况 传输介质 传输介质类型&#xff08;导引与非导引&#xff09; 导引传输介质&#xff0c;如电缆、光纤&#xff1b; 非导引传输介质&#xff0c;如无线电波&#xff1b; 传输介质的选择影响信号传输质量 信号传输模式&#xff08;单工…...

          Kubernetes控制平面组件:Kubelet详解(六):pod sandbox(pause)容器

          云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

          51单片机,两路倒计时,LCD1602 ,Proteus仿真

          初始上电 默认2路都是0分钟的倒计时 8个按键 4个一组 一组控制一路倒计时 4个 按键:加 减 开始或者暂停 复位到0分钟相当于停止 针对第一路倒计时 4个 按键2:加 减 开始或者暂停 复位到0分钟相当于停止 针对第2路倒计时 哪一路到了0后蜂鸣器响 对应LED点亮 main.c 文件实现了…...

          MySQL之储存引擎和视图

          一、储存引擎 基本介绍&#xff1a; 1、MySQL的表类型由储存引擎(Storage Engines)决定&#xff0c;主要包括MyISAM、innoDB、Memory等。 2、MySQL数据表主要支持六种类型&#xff0c;分别是&#xff1a;CSV、Memory、ARCHIVE、MRG_MYISAN、MYISAM、InnoBDB。 3、这六种又分…...

          写spark程序数据计算( 数据库的计算,求和,汇总之类的)连接mysql数据库,写入计算结果

          1. 添加依赖 在项目的 pom.xml&#xff08;Maven&#xff09;中添加以下依赖&#xff1a; xml <!-- Spark SQL --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.12</artifactId> <version>3.3.0…...

          一:操作系统之系统调用

          系统调用&#xff1a;用户程序与操作系统交互的桥梁 在计算机的世界里&#xff0c;应用程序是我们日常接触最多的部分&#xff0c;比如浏览器、文本编辑器、游戏等等。然而&#xff0c;这些应用程序并不能直接控制硬件资源&#xff0c;比如读写硬盘、创建新进程、发送网络数据…...

          【ROS2】 核心概念6——通信接口语法(Interfaces)

          古月21讲/2.6_通信接口 官方文档&#xff1a;Interfaces — ROS 2 Documentation: Humble documentation 官方接口代码实战&#xff1a;https://docs.ros.org/en/humble/Tutorials/Beginner-Client-Libraries/Single-Package-Define-And-Use-Interface.html ROS 2使用简化的描…...

          SmartETL函数式组件的设计与应用

          SmartETL框架主要采用了面向对象的设计思想&#xff0c;将ETL过程中的处理逻辑抽象为Loader和Processor&#xff08;对应loader模块和iterator模块&#xff09;&#xff0c;所有流程组件需要继承或实现DataProvider&#xff08;iter方法&#xff09;或JsonIterator&#xff08;…...

          Spring Security与SaToken的对比与优缺点分析

          Spring Security与SaToken对比分析 一、框架定位 Spring Security 企业级安全解决方案&#xff0c;深度集成Spring生态提供完整的安全控制链&#xff08;认证、授权、会话管理、攻击防护&#xff09;适合中大型分布式系统 SaToken 轻量级权限认证框架&#xff0c;专注Token会…...

          |从零开始的Pyside2界面编程| 环境搭建以及第一个ui界面

          &#x1f411; |从零开始的Pyside2界面编程| 环境搭建以及第一个ui界面&#x1f411; 文章目录 &#x1f411; |从零开始的Pyside2界面编程| 环境搭建以及第一个ui界面&#x1f411;♈前言♈♈Pyside2环境搭建♈♈做个简单的UI界面♈♒代码实现♒♒QTdesigner设计UI界面♒ ♒总…...

          【爬虫】DrissionPage-7

          官方文档&#xff1a; https://www.drissionpage.cn/browser_control/get_page_info/ 1. 页面信息 &#x1f4cc; html 描述&#xff1a;返回当前页面的 HTML 文本。注意&#xff1a;不包含 <iframe> 元素的内容。返回类型&#xff1a;str 示例&#xff1a; html_co…...

          系统架构设计(十二):统一过程模型(RUP)

          简介 RUP 是由 IBM Rational 公司提出的一种 面向对象的软件工程过程模型&#xff0c;以 UML 为建模语言&#xff0c;是一种 以用例为驱动、以架构为中心、迭代式、增量开发的过程模型。 三大特征 特征说明以用例为驱动&#xff08;Use Case Driven&#xff09;需求分析和测…...

          深入解析Java事件监听机制与应用

          Java事件监听机制详解 一、事件监听模型组成 事件源&#xff08;Event Source&#xff09; 产生事件的对象&#xff08;如按钮、文本框等组件&#xff09; 事件对象&#xff08;Event Object&#xff09; 封装事件信息的对象&#xff08;如ActionEvent包含事件源信息&#xf…...

          QT聊天项目DAY11

          1. 验证码服务 1.1 用npm安装redis npm install redis 1.2 修改config.json配置文件 1.3 新建redis.js const config_module require(./config) const Redis require("ioredis");// 创建Redis客户端实例 const RedisCli new Redis({host: config_module.redis_…...

          Python训练营---Day29

          知识点回顾 类的装饰器装饰器思想的进一步理解&#xff1a;外部修改、动态类方法的定义&#xff1a;内部定义和外部定义 作业&#xff1a;复习类和函数的知识点&#xff0c;写下自己过去29天的学习心得&#xff0c;如对函数和类的理解&#xff0c;对python这门工具的理解等&…...

          Flask-SQLAlchemy_数据库配置

          1、基本概念&#xff08;SQLAlchemy与Flask-SQLAlchemy&#xff09; SQLAlchemy 是 Python 生态中最具影响力的 ORM&#xff08;对象关系映射&#xff09;库&#xff0c;其设计理念强调 “框架无关性”&#xff0c;支持在各类 Python 项目中独立使用&#xff0c;包括 Flask、D…...

          世界银行数字经济指标(1990-2022年)-社科数据

          世界银行数字经济指标&#xff08;1990-2022年&#xff09;-社科数据https://download.csdn.net/download/paofuluolijiang/90623839 https://download.csdn.net/download/paofuluolijiang/90623839 此数据集涵盖了1990年至2022年间全球各国的数字经济核心指标&#xff0c;数据…...

          Redis进阶知识

          Redis 1.事务2. 主从复制2.1 如何启动多个Redis服务器2.2 监控主从节点的状态2.3 断开主从复制关系2.4 额外注意2.5拓扑结构2.6 复制过程2.6.1 数据同步 3.哨兵选举原理注意事项 4.集群4.1 数据分片算法4.2 故障检测 5. 缓存5.1 缓存问题 6. 分布式锁 1.事务 Redis的事务只能保…...

          NY337NY340美光固态颗粒NC010NC012

          NY337NY340美光固态颗粒NC010NC012 在存储技术的浩瀚星空中&#xff0c;美光的NY337、NY340、NC010、NC012等固态颗粒宛如璀璨星辰&#xff0c;闪耀着独特的光芒。它们承载着先进技术与无限潜力&#xff0c;正深刻影响着存储行业的格局与发展。 一、技术架构与核心优势 美光…...

          DAY26 函数定义与参数

          浙大疏锦行-CSDN博客 知识点回顾&#xff1a; 1.函数的定义 2.变量作用域&#xff1a;局部变量和全局变量 3.函数的参数类型&#xff1a;位置参数、默认参数、不定参数 4.传递参数的手段&#xff1a;关键词参数 5.传递参数的顺序&#xff1a;同时出现三种参数类型时 函数的定义…...

          系统安全及应用

          目录 一、账号安全控制 1.基本安全措施 &#xff08;1&#xff09;系统账号清理 (2)密码安全控制 &#xff08;3&#xff09;历史命令&#xff0c;自动注销 2.用户提权和切换命令 2.1 su命令用法 2.2 sudo命令提权 2.3通过是sudo执行特权命令 二、系统引导和登录控制…...

          微信小程序 地图 使用 射线法 判断目标点是否在多边形内部(可用于判断当前位置是否在某个区域内部)

          目录 射线法原理简要逻辑代码 小程序代码调试基础库小程序配置地图数据地图多边形点与多边形关系 射线法 原理 使用射线法来判断&#xff0c;目标点是否在多边形内部 这里简单说下&#xff0c;具体细节可以看这篇文章 平面几何&#xff1a;判断点是否在多边形内&#xff08;…...

          第三十七节:视频处理-视频读取与处理

          引言:解码视觉世界的动态密码 在数字化浪潮席卷全球的今天,视频已成为信息传递的主要载体。从短视频平台的爆火到自动驾驶的视觉感知,视频处理技术正在重塑人类与数字世界的交互方式。本指南将深入探讨视频处理的核心技术,通过Python与OpenCV的实战演示,为您揭开动态影像…...

          什么是 Flink Pattern

          在 Apache Flink 中&#xff0c;Pattern 是 Flink CEP&#xff08;Complex Event Processing&#xff09;模块 的核心概念之一。它用于定义你希望从数据流中检测出的 事件序列模式&#xff08;Event Sequence Pattern&#xff09;。 &#x1f3af; 一、什么是 Flink Pattern&am…...

          ADB基本操作和命令

          1.ADB的含义 adb 命令是 Android 官方提供&#xff0c;调试 Android 系统的工具。 adb 全称为 Android Debug Bridge&#xff08;Android 调试桥&#xff09;&#xff0c;是 Android SDK 中提供的用于管理 Android 模拟器或真机的工具。 adb 是一种功能强大的命令行工具&#x…...

          NSString的三种实现方式

          oc里的NSString有三种实现方式&#xff0c;为_ _NSCFConstantString、__NSCFString、NSTaggedPointerString 1._ _NSCFConstantString(字面量字符串) 从字面意思上可以看出&#xff0c;_ _NSCFContantString可以理解为常量字符串&#xff0c;这种类型的字符串在编译期就确定了…...

          2025年PMP 学习二十 第13章 项目相关方管理

          第13章 项目相关方管理 序号过程过程组过程组1识别相关方启动2规划相关方管理规划3管理相关方参与与执行4监控相关方参与与监控 相关方管理&#xff0c;针对于团队之外的相关方的&#xff0c;核心目标是让对方为了支持项目&#xff0c;以达到项目目标。 文章目录 第13章 项目相…...

          学习黑客Kerberos深入浅出:安全王国的门票系统

          Kerberos深入浅出&#xff1a;安全王国的门票系统 &#x1f3ab; 作者: 海尔辛 | 发布时间: 2025-05-18 &#x1f511; 理解Kerberos&#xff1a;为什么它如此重要&#xff1f; Kerberos是现代网络环境中最广泛使用的身份验证协议之一&#xff0c;尤其在Windows Active Dire…...

          蓝桥杯19681 01背包

          问题描述 有 N 件物品和一个体积为 M 的背包。第 i 个物品的体积为 vi​&#xff0c;价值为 wi​。每件物品只能使用一次。 请问可以通过什么样的方式选择物品&#xff0c;使得物品总体积不超过 M 的情况下总价值最大&#xff0c;输出这个最大价值即可。 输入格式 第一行输…...

          使用 Auto-Keras 进行自动化机器学习

          使用 Auto-Keras 进行自动化机器学习 了解自动化机器学习以及如何使用 auto-keras 完成它。如今&#xff0c;机器学习并不是一个非常罕见的术语&#xff0c;因为像 DataCamp、Coursera、Udacity 等组织一直在努力提高他们的效率和灵活性&#xff0c;以便将机器学习的教育带给普…...

          算法刷题Day9 5.18:leetcode定长滑动窗口3道题,结束定长滑动窗口,用时1h

          12. 1852.每个子数组的数字种类数 1852. 每个子数组的数字种类数 - 力扣&#xff08;LeetCode&#xff09; 思想 找到nums 所有 长度为 k 的子数组中 不同 元素的数量。 返回一个数组 ans&#xff0c;其中 ans[i] 是对于每个索引 0 < i < n - k&#xff0c;nums[i..(i …...

          Protect Your Digital Privacy: Obfuscate, Don’t Hide

          Protect Your Digital Privacy: Obfuscate, Don’t Hide In today’s digital world, hiding completely online is nearly impossible. But you can protect yourself by deliberately obfuscating your personal information — making it harder for others to track, pro…...

          Spark 的运行模式(--master) 和 部署方式(--deploy-mode)

          Spark 的 运行模式&#xff08;--master&#xff09; 和 部署方式&#xff08;--deploy-mode&#xff09;&#xff0c;两者的核心区别在于 资源调度范围 和 Driver 进程的位置。 一、核心概念对比 维度--master&#xff08;运行模式&#xff09;--deploy-mode&#xff08;部署…...

          从零开始实现大语言模型(十五):并行计算与分布式机器学习

          1. 前言 并行计算与分布式机器学习是一种使用多机多卡加速大规模深度神经网络训练过程&#xff0c;以减少训练时间的方法。在工业界的训练大语言模型实践中&#xff0c;通常会使用并行计算与分布式机器学习方法来减少训练大语言模型所需的钟表时间。 本文介绍PyTorch中的一种…...

          生产模式下react项目报错minified react error #130的问题

          这天&#xff0c;线上突然出现了一个bug&#xff0c;某个页面打开空白&#xff0c;看控制台报错minified react error #130&#xff0c;在本地看却是正常的&#xff0c;百思不得其解。 后来发现是由于线上项目它的包更新过了&#xff0c;而我本地的包没有更新&#xff0c;所以我…...

          本地无损放大软件-realesrgan-gui

          —————【下 载 地 址】——————— 【​本章下载一】&#xff1a;https://drive.uc.cn/s/84516041df174 【​本章下载二】&#xff1a;https://pan.xunlei.com/s/VOQDybD4ruF0-m8UJrCF-HtLA1?pwdxz9e# 【百款黑科技】&#xff1a;https://ucnygalh6wle.feishu.cn/wiki/…...

          Java面试深度解析:微服务与云原生技术应用场景详解

          Java面试深度解析&#xff1a;微服务与云原生技术应用场景详解 面试场景 面试官&#xff1a;我们今天的面试会围绕微服务与云原生技术展开&#xff0c;结合一个在线教育平台的业务场景进行提问。希望你放松心态&#xff0c;正常发挥。 码农明哥&#xff1a;好的好的&#xf…...

          短剧小程序系统开发源码上架,短剧项目市场分析

          引言 随着短视频内容消费的爆发式增长&#xff0c;短剧小程序凭借其碎片化、强互动、低成本的特点&#xff0c;成为内容创业与资本布局的新风口。2024年以来&#xff0c;行业规模突破500亿元&#xff0c;预计2027年将超千亿17。本文将深度解析短剧小程序系统开发的技术优势、市…...