JVM调优,参数在哪里设置的?
JVM调优,参数在哪里设置的?
在Java应用程序中,JVM(Java Virtual Machine)的调优通常通过设置JVM启动参数来实现。这些参数可以控制JVM的内存分配、垃圾回收策略、线程管理、性能优化等方面。
1. JVM参数的位置
JVM参数通常在启动Java应用时通过命令行传递。设置JVM参数的常见方式有以下几种:
-
命令行启动:使用
java命令启动 Java 程序时,JVM参数通过-X或-XX前缀传递。例如:
bash
java -Xmx2g -Xms1g -XX:+UseG1GC -jar myapp.jar上述命令设置了:
- 最大堆内存为2GB:
-Xmx2g - 初始堆内存为1GB:
-Xms1g - 使用G1垃圾回收器:
-XX:+UseG1GC
- 最大堆内存为2GB:
-
配置文件:对于生产环境,通常会在启动脚本(如
.sh或.bat文件)中配置这些JVM参数。例如:
bash
export JAVA_OPTS="-Xmx2g -Xms1g -XX:+UseG1GC" java $JAVA_OPTS -jar myapp.jar -
容器化环境(如 Docker):在 Dockerfile 或 Docker Compose 中设置
JAVA_OPTS环境变量,或直接通过CMD或ENTRYPOINT传递参数。例如:
ENV JAVA_OPTS="-Xmx2g -Xms1g -XX:+UseG1GC" CMD java $JAVA_OPTS -jar /app/myapp.jar
2. 常见JVM调优参数
内存设置相关参数
-
-Xms:设置JVM初始堆内存大小。bash
-Xms1g # 初始堆内存为1GB -
-Xmx:设置JVM最大堆内存大小。bash
-Xmx2g # 最大堆内存为2GB -
-Xmn:设置年轻代(Young Generation)内存大小,通常年轻代内存占堆内存的一部分。bash
-Xmn512m # 年轻代内存大小为512MB -
-XX:NewSize和-XX:MaxNewSize:分别设置年轻代的初始大小和最大大小。bash
-XX:NewSize=512m # 初始年轻代大小为512MB -XX:MaxNewSize=1g # 最大年轻代大小为1GB
垃圾回收相关参数
-
-XX:+UseG1GC:启用G1垃圾回收器,G1是目前推荐的垃圾回收器,特别适用于大内存应用。bash
-XX:+UseG1GC -
-XX:+UseParallelGC:启用并行垃圾回收器,适合多核CPU环境。bash
-XX:+UseParallelGC -
-XX:+UseConcMarkSweepGC:启用CMS垃圾回收器(适用于低延迟需求)。bash
-XX:+UseConcMarkSweepGC -
-XX:MaxGCPauseMillis:设置垃圾回收的目标最大暂停时间(单位:毫秒)。bash
-XX:MaxGCPauseMillis=200 # 设置垃圾回收的目标最大暂停时间为200ms
性能调优相关参数
-
-XX:+PrintGCDetails:打印GC日志,详细输出每次GC的过程。bash
-XX:+PrintGCDetails -
-XX:+PrintGCDateStamps:在GC日志中加入时间戳。bash
-XX:+PrintGCDateStamps -
-XX:+HeapDumpOnOutOfMemoryError:在内存溢出时生成堆转储文件(heap dump)。bash
-XX:+HeapDumpOnOutOfMemoryError -
-XX:HeapDumpPath:指定堆转储文件的存放路径。bash
-XX:HeapDumpPath=/path/to/heapdump.hprof
线程管理相关参数
-
-XX:ThreadStackSize:设置每个线程的堆栈大小。bash
-XX:ThreadStackSize=256k # 设置线程栈大小为256KB -
-XX:CICompilerCount:设置JIT(Just-In-Time)编译器的线程数量。bash
-XX:CICompilerCount=4 # 使用4个JIT编译器线程
调试和日志相关参数
-
-Xlog:gc*:输出垃圾回收日志。bash
-Xlog:gc* # 输出GC的相关日志 -
-XX:+PrintCompilation:打印JIT编译的详细信息。bash
-XX:+PrintCompilation
3. JVM调优的常见工具
除了直接设置JVM参数外,以下工具也可以帮助你进行JVM性能调优和监控:
- JConsole:一个基于JMX的监控工具,可以监控JVM的堆内存、线程、类加载、GC等信息。
- VisualVM:一个图形化工具,可以用来监控JVM性能、堆转储分析、线程分析等。
- JProfiler:一个商业化的Java性能分析工具,提供详细的堆内存分析、CPU分析等功能。
总结
JVM调优主要通过启动时的参数配置来实现,常见的调优方向包括内存管理(如堆大小、年轻代大小等)、垃圾回收策略、性能优化和日志记录。JVM启动参数的设置通常通过命令行、启动脚本或容器配置来实现,并且这些参数可以根据实际的应用需求和运行环境进行调整。
JVM调优,只设置了最大堆内存和初始堆大小,在哪里具体分配年轻代老年代大小
在 Java 中,JVM 的堆内存分为 年轻代(Young Generation)和 老年代(Old Generation)。它们的大小通常由以下两个方面控制:
-
-Xms和-Xmx:设置堆内存的初始大小(-Xms)和最大大小(-Xmx),但是这两个参数并没有直接控制年轻代和老年代的具体大小,而是控制整个堆的大小。 -
-XX:NewRatio:用于控制年轻代和老年代的比例。默认情况下,JVM 会根据堆的大小分配一定比例的内存给年轻代和老年代。如果没有指定-XX:NewRatio,JVM 会根据默认值来决定。 -
-XX:NewSize和-XX:MaxNewSize:这些参数可以显式地控制年轻代的大小。-XX:NewSize用于设置年轻代的初始大小,-XX:MaxNewSize用于设置年轻代的最大大小。 -
-XX:SurvivorRatio:用于控制年轻代中 Eden 区 和 两个 Survivor 区 之间的内存比例。默认值通常是 8:1,即 Eden 区的大小是每个 Survivor 区的 8 倍。 -
-XX:InitialTenuringThreshold:控制对象在年轻代中经历多少次 GC 后会被晋升到老年代。
JVM 内存分配的细节:
-
-Xms和-Xmx:这些参数定义了堆的总内存大小,但并没有指定年轻代和老年代的具体分配。堆内存分为三个区域:- 年轻代(Young Generation)包括 Eden 区和两个 Survivor 区。
- 老年代(Old Generation)用于存储经过多次垃圾回收后仍然存活的对象。
- 元空间(Metaspace)用于存储类元数据(对于 JDK 8 及以上版本)。
-
年轻代和老年代的默认比例:
- 默认情况下,JVM 会将堆内存的 1/3 分配给年轻代,其余的分配给老年代。这种比例可以通过
-XX:NewRatio参数进行调整。
- 默认情况下,JVM 会将堆内存的 1/3 分配给年轻代,其余的分配给老年代。这种比例可以通过
控制年轻代和老年代大小的参数:
1. -XX:NewRatio
这个参数控制年轻代和老年代的比例。默认值通常是 2,意味着年轻代的内存大小是老年代的 1/2。例如,若堆内存大小为 6 GB,则默认情况下年轻代占 2 GB,老年代占 4 GB。
bash
-XX:NewRatio=2
2. -XX:NewSize 和 -XX:MaxNewSize
这两个参数用于控制年轻代的初始大小和最大大小。-XX:NewSize 设置年轻代的初始大小,-XX:MaxNewSize 设置年轻代的最大大小。如果你想显式地控制年轻代的大小,可以使用这两个参数。
bash
-XX:NewSize=1G -XX:MaxNewSize=2G
3. -XX:SurvivorRatio
这个参数控制年轻代中的 Eden 区和 Survivor 区的内存比例。默认值是 8,即 Eden 区的内存大小是每个 Survivor 区的 8 倍。
bash
-XX:SurvivorRatio=8
4. -XX:InitialTenuringThreshold
这个参数控制一个对象在年轻代中存活多少次 GC 后才会晋升到老年代。默认值通常是 7,表示对象在经历 7 次 GC 后会被晋升到老年代。
bash
-XX:InitialTenuringThreshold=7
总结:
- 最大堆内存和初始堆内存(
-Xms和-Xmx)控制整个堆的大小。 - 年轻代和老年代的比例:通过
-XX:NewRatio控制。 - 年轻代的大小:可以通过
-XX:NewSize和-XX:MaxNewSize明确指定。 - 年轻代内部区域的比例:通过
-XX:SurvivorRatio控制 Eden 区和 Survivor 区的大小比例。
通过这些参数,您可以根据应用程序的需求调整内存分配,以便更好地满足性能和垃圾回收的需求。
-XX:NewRatio:用于控制年轻代和老年代的比例 ,这个比例在哪里配置的
目前我无法直接提供截图,但我可以通过文字说明帮助你理解在哪里配置 -XX:NewRatio 参数。
配置方法
-
JVM 启动命令行中配置:
-XX:NewRatio是通过在 JVM 启动命令中设置的。如果你正在运行 Java 程序,可以在启动时通过命令行指定此参数。
-
示例: 假设你通过命令行启动 Java 应用程序,可以在启动命令中添加
-XX:NewRatio来控制年轻代和老年代的比例。以下是一个常见的例子:bash
java -XX:NewRatio=2 -jar your-application.jar这条命令中,
-XX:NewRatio=2将设置年轻代和老年代的内存比例为 1:2。
在常见的环境中的配置方式
-
Eclipse:如果你在 Eclipse 中运行应用程序,可以通过以下步骤配置:
- 右键点击你的 Java 项目。
- 选择 Run As → Run Configurations。
- 选择你要运行的配置。
- 在 Arguments 标签下,在 VM arguments 中添加
-XX:NewRatio=2。
-
IntelliJ IDEA:如果你在 IntelliJ IDEA 中运行 Java 应用程序,可以通过以下步骤配置:
- 打开你的项目。
- 点击 Run → Edit Configurations。
- 在 VM options 中添加
-XX:NewRatio=2。
-
Tomcat 或其他应用服务器:如果你使用的是 Tomcat 或其他应用服务器,可以在服务器启动配置文件中(如
catalina.sh或setenv.sh)添加此参数。
总结
-XX:NewRatio参数通过 JVM 启动时的命令行配置来控制年轻代和老年代的内存比例。- 配置示例:
java -XX:NewRatio=2 -jar your-application.jar。 - 你可以在 IDE 或应用服务器的启动配置中设置这个参数。
以Dokcer为例 -XX:NewRatio:用于控制年轻代和老年代的比例 ,这个比例在哪里配置的,请给出截图
虽然我无法直接提供截图,但我可以详细解释如何在 Docker 容器中配置 JVM 参数(如 -XX:NewRatio)来控制年轻代和老年代的比例。
1. 通过 Dockerfile 配置
在 Dockerfile 中,你可以通过设置 CMD 或 ENTRYPOINT 来指定 JVM 参数。在 Docker 镜像构建过程中,可以将 -XX:NewRatio 参数添加到 Java 启动命令中。
示例 Dockerfile 配置:
# 使用 Java 官方镜像 FROM openjdk:17-jdk # 将应用程序 JAR 文件添加到容器中 COPY your-application.jar /app/your-application.jar # 配置 JVM 参数来控制年轻代和老年代的比例 CMD ["java", "-XX:NewRatio=2", "-jar", "/app/your-application.jar"]
2. 通过 docker run 命令配置
如果你已经有一个 Docker 镜像,并且想要在运行时动态添加 JVM 参数(例如 -XX:NewRatio),可以在使用 docker run 命令时指定这些参数。
示例 docker run 命令:
bash
docker run -d -e JAVA_OPTS="-XX:NewRatio=2" your-docker-image
然后,确保在容器内部的启动命令中使用了 JAVA_OPTS 环境变量,例如:
CMD ["sh", "-c", "java $JAVA_OPTS -jar /app/your-application.jar"]
这样,JAVA_OPTS 环境变量中的 -XX:NewRatio=2 就会被传递给 JVM。
3. 使用 Docker Compose 配置
如果你使用 Docker Compose 来管理容器,可以在 docker-compose.yml 文件中配置 JVM 参数。
示例 docker-compose.yml 配置:
version: '3.8' services: java-app: image: openjdk:17-jdk build: context: . environment: - JAVA_OPTS=-XX:NewRatio=2 command: ["sh", "-c", "java $JAVA_OPTS -jar /app/your-application.jar"] volumes: - ./your-application.jar:/app/your-application.jar
总结
- 在 Docker 中,你可以通过 Dockerfile、docker run 命令或 Docker Compose 来配置
-XX:NewRatio参数,控制年轻代和老年代的比例。 - 通过
CMD或ENTRYPOINT指定 JVM 启动参数,将其传递给 Java 应用程序。
虽然我无法直接给出截图,但以上步骤应能帮助你在 Docker 容器中配置 Java 参数。如果你需要更详细的操作说明或遇到其他问题,欢迎随时提问!
项目中如何配置的?
DokckerFile
FROM x.com/saicmotorcv/java:8
MAINTAINER wanghuapeng <wanghuapeng@saicmotor.com>ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneCOPY /x-service/target/yl-tasks-jghc-service-0.0.1.jar /app/app.jar
COPY /x-service/start.sh /app
COPY /x-service/start2.sh /app
COPY /x-service/skywalking-agent /app/agent
EXPOSE 9600
ENTRYPOINT ["/bin/bash","/app/start.sh"]
start.sh
#!/bin/bashSERVICEIP=` ip a|grep /32| awk '{print $2}'|cut -d / -f1`if [ "$ZH_APP_MEM" == "" ]; thenvmMemory=" -Xms2G -Xmx2G "
elsevmMemory=" -Xms$ZH_APP_MEM -Xmx$ZH_APP_MEM "
fiflag=0
inst_name=${LOGFORMAT##*/}
ret=`curl -s http://ip.sxc.sh/service/${inst_name}/text`
ip_str=${ret%%]*}
wan_ip=${ip_str#*[}
port_str=${ret##*[}
wan_port=${port_str%%:*}if [ -n "$(echo $wan_port| sed -n "/^[0-9]\+$/p")" ];thenflag=1
fi
check=`echo $wan_ip|grep "^[0-9]\{1,3\}\.\([0-9]\{1,3\}\.\)\{2\}[0-9]\{1,3\}$"`
if [[ ${#check} -eq ${#wan_ip} && $flag -eq 1 ]]; thenflag=2
fiif [ $flag -ne 2 ]; thenwan_ip=""wan_port=""
fi
echo $wan_ip
echo $wan_portif [ -n "$shost" ] ;thenecho "wan ip and port is define $shost:$sport"SERVICE_HOST=$shostSERVICE_PORT=$sport
elif [ -n "$wan_port" ] ;thenecho "wan ip and port is define $wan_ip:$wan_port"SERVICE_HOST=$wan_ipSERVICE_PORT=$wan_port
fijavaagent="-javaagent:/app/agent/skywalking-agent.jar=agent.service_name=$SKYWALKING_NAME,collector.backend_service=${SKYWALKING_SERVICE}"echo "serviceip:$SERVICEIP"
echo "SKYWALKING_NAME:$SKYWALKING_NAME"
echo "SKYWALKING_SERVICE:$SKYWALKING_SERVICE"
java $javaagent \-server -jar $vmMemory \-Duser.timezone=GMT+08 \-XX:+UseConcMarkSweepGC \/app/app.jar \--spring.cloud.consul.discovery.hostname=$SERVICE_HOST \--spring.cloud.consul.discovery.port=$SERVICE_PORT \--spring.cloud.consul.discovery.healthCheckUrl=http://$SERVICE_HOST:$SERVICE_PORT/base/health \--spring.profiles.active=\${env} \--xxl.job.executor.register.port=\${xxl-job-port} \--xxl.job.executor.register.ip=$SERVICE_HOST
相关文章:
JVM调优,参数在哪里设置的?
JVM调优,参数在哪里设置的? 在Java应用程序中,JVM(Java Virtual Machine)的调优通常通过设置JVM启动参数来实现。这些参数可以控制JVM的内存分配、垃圾回收策略、线程管理、性能优化等方面。 1. JVM参数的位置 JVM参…...
2024年最新Stable Diffusion 新手入门教程,安装使用及模型下载
一、安装要求: ① 操作系统:Windows10以后的系统 ② CPU:不做强制性要求 ③ 内存:推荐8G以上 ④ 显卡:必须是Nvidia的独立显卡,显存最低4G,推荐20系以后;A卡、核显只能用CPU跑 …...
Ubuntu 20.04安装gcc
一、安装GCC 1.更新包列表 user596785154:~$ sudo apt update2.安装gcc user596785154:~$ sudo apt install gcc3.验证安装 user596785154:~$ gcc --version二 编译C文件 1.新建workspace文件夹 user596785154:~$ mkdir workspace2.进入workspace文件夹 user596785154:~…...
IT运维的365天--024 闲置路由器关闭了dhcp,如何知道它的IP是啥
有时候各种原因,我们关闭了路由器的Dhcp,比如需要获取的无线IP和有线同一个网段的情况。时间久了,如果没做标记,大部分时候就会忘了路由器原来设置的是什么IP,没有路由器的对应IP,自然也无法进路由器后台去…...
kaggle竞赛:纽约出租车行程时间NYC Taxi Trip Duration
1.引言 作为一名(坦白说有点懒的)图像处理方向的研究生,说实话最近新开一个坑,可能是因为要寒假了比较无聊,这次带来的系列是kaggle数据处理竞赛的经典例题:纽约出租车行程时间问题。希望大家多多支持&…...
Freemarker模板进行判空
文章目录 freemarker判断对象是否为null使用 ?? 操作符使用 ?has_content 内建函数直接使用 ! 操作符取反 freemarker判断列表是否为空 freemarker判断对象是否为null 在 FreeMarker 模板引擎中,你可以使用内建的指令和条件判断来检测一个对象是否为 null。Free…...
C++ const关键字(八股总结)
作用 const修饰符用来定义常量,具有不可变性。 修饰变量,说明该变量不可以被改变;修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const pointer&…...
Linux 清楚历史命令
在 Linux 中,执行完命令后,如果你想清除终端屏幕上的内容,可以使用以下几种方法: 1. 使用 clear 命令 clear 是 Linux 中最常用的清除屏幕命令。它会将终端屏幕清空,并将光标移动到屏幕左上角。 bash clear 2. 使用快…...
服务器双网卡NCCL通过交换机通信
1、NCCL变量设置 export CUDA_DEVICE_MAX_CONNECTIONS1 export NCCL_SOCKET_IFNAMEeno2 export NCCL_IB_DISABLE0 #export NCCL_NETIB export NCCL_IB_HCAmlx5_0,mlx5_1 export NCCL_IB_GID_INDEX3 export NCCL_DEBUGINFOGPUS_PER_NODE4MASTER_ADDR192.168.1.2 MASTER_PORT600…...
Redis哨兵(sentinel)
是什么 吹哨人巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务 哨兵的作用 1、监控redis运行状态,包括master和slave 2、当master down机,能自动将slave切换成新master 能干嘛…...
小白学Pytorch
小白学Pytorch 发现一个比较好的教程,对于自己来说比较合适,适合从零开始的教程。 1、搭建一个简单的网络 https://www.cnblogs.com/PythonLearner/p/13587092.html 搭建网络这步说的比较清楚: 我们使用nn包中的Sequential搭建网络&#…...
ros2笔记-2.5.3 多线程与回调函数
本节体验下多线程。 python示例 在src/demo_python_pkg/demo_python_pkg/下新建文件,learn_thread.py import threading import requestsclass Download:def download(self,url,callback):print(f线程:{threading.get_ident()} 开始下载:{…...
第5章:Go语言错误处理和异常
第5章:Go语言错误处理和异常 5.1 错误类型基础 5.1.1 error接口 // error接口定义 type error interface {Error() string }// 自定义错误 type CustomError struct {Message stringCode int }func (e *CustomError) Error() string {return fmt.Sprintf(&quo…...
题库刷题知识点总结
算法与机器学习相关 支持向量机:是一种有监督的机器学习算法,用于分类和回归任务。它通过寻找一个最优超平面来将不同类别的数据点分开,最大化两类数据点到超平面的间隔,具有良好的泛化能力和抗噪声能力。机器学习:是…...
GraphRAG:LLM之Graphrag接入milvus
前言 微软目前的graphrag更像个demo,数据量大的时候不是很友好的啊,所以将milvus接入了graphrag,看完这篇文章,其他数据库接入应该也没问题 注:这篇文章只是在search的时候接入进来,index过程或者说整个流…...
adb使用及常用命令
目录 介绍 组成 启用adb调试 常用命令 连接设备 版本信息 安装应用 卸载应用 文件操作 日志查看 屏幕截图和录制 设备重启 端口转发 调试相关 设置属性 设备信息查询 获取帮助 模拟输入 介绍 adb全称为 Android Debug Bridge(Android调试桥),是 A…...
omnipeek分析beacon帧
omnipeek查询设备发送beacon时同一信道两个beacon发送间隔 目录 用例要求分析抓包数据 1.用例要求 Beacon帧发送频率符合规范要求。参数-【同一个信道两个beacon发送间隔不能超过100ms】 2.分析抓包数据 打开becon.pkt文件(用omnipeek工具提前抓取包)…...
Java数组问题
题目2: 定义一个数组,存储1,2,3,4,5,6,7,8,9,10 遍历数组得到的每一个元素,统计数组里面一共多少个能被3整除的数字 package com.s…...
salesforce 可以为同一个简档的同一个 recordtype 的对象设置多种页面布局吗
在 Salesforce 中,对于同一个 Record Type(记录类型),默认情况下,每个 Profile(用户简档) 只能分配一个 Page Layout(页面布局)。也就是说,页面布局的分配规则…...
使用vue项目中,使用webpack模板和直接用vue.config来配置相关插件 区别是什么,具体有哪些提现呢
在 Vue 项目中,使用 Webpack 模板 和 vue.config.js 来配置相关插件的主要区别在于配置的复杂度、灵活性和易用性。以下是两者的详细对比: 1. Webpack 模板 Webpack 模板是 Vue CLI 早期版本(如 Vue CLI 2.x)中提供的项目初始化模…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
