JVM 性能调优 - 参数基础(2)

news2024/11/16 9:28:18

查看 JDK 版本

$ java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

查看 Java 帮助文档

$ java -help
用法: java [-options] class [args...]
           (执行类)
   或  java [-options] -jar jarfile [args...]
           (执行 jar 文件)
其中选项包括:
    -d32          使用 32 位数据模型 (如果可用)
    -d64          使用 64 位数据模型 (如果可用)
    -server       选择 "server" VM
                  默认 VM 是 server.

    -cp <目录和 zip/jar 文件的类搜索路径>
    -classpath <目录和 zip/jar 文件的类搜索路径>
                  用 ; 分隔的目录, JAR 档案
                  和 ZIP 档案列表, 用于搜索类文件。
    -D<名称>=<值>
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  按指定的粒度启用断言
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  禁用具有指定粒度的断言
    -esa | -enablesystemassertions
                  启用系统断言
    -dsa | -disablesystemassertions
                  禁用系统断言
    -agentlib:<libname>[=<选项>]
                  加载本机代理库 <libname>, 例如 -agentlib:hprof
                  另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
    -agentpath:<pathname>[=<选项>]
                  按完整路径名加载本机代理库
    -javaagent:<jarpath>[=<选项>]
                  加载 Java 编程语言代理, 请参阅 java.lang.instrument
    -splash:<imagepath>
                  使用指定的图像显示启动屏幕
有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html。

查看 JDK 版本和帮助文档

$ java -showversion
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)           
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

用法: java [-options] class [args...]          
           (执行类)                            
   或  java [-options] -jar jarfile [args...]  
           (执行 jar 文件)                     
其中选项包括:                                  
    -d32          使用 32 位数据模型 (如果可用)
    -d64          使用 64 位数据模型 (如果可用)
    -server       选择 "server" VM             
                  默认 VM 是 server.           

    -cp <目录和 zip/jar 文件的类搜索路径>
    -classpath <目录和 zip/jar 文件的类搜索路径>
                  用 ; 分隔的目录, JAR 档案
                  和 ZIP 档案列表, 用于搜索类文件。
    -D<名称>=<值>
                  设置系统属性
    -verbose:[class|gc|jni]
                  启用详细输出
    -version      输出产品版本并退出
    -version:<值>
                  警告: 此功能已过时, 将在
                  未来发行版中删除。
                  需要指定的版本才能运行
    -showversion  输出产品版本并继续
    -jre-restrict-search | -no-jre-restrict-search
                  警告: 此功能已过时, 将在
                  未来发行版中删除。
                  在版本搜索中包括/排除用户专用 JRE
    -? -help      输出此帮助消息
    -X            输出非标准选项的帮助
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  按指定的粒度启用断言
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  禁用具有指定粒度的断言
    -esa | -enablesystemassertions
                  启用系统断言
    -dsa | -disablesystemassertions
                  禁用系统断言
    -agentlib:<libname>[=<选项>]
                  加载本机代理库 <libname>, 例如 -agentlib:hprof
                  另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
    -agentpath:<pathname>[=<选项>]
                  按完整路径名加载本机代理库
    -javaagent:<jarpath>[=<选项>]
                  加载 Java 编程语言代理, 请参阅 java.lang.instrument
    -splash:<imagepath>
                  使用指定的图像显示启动屏幕
有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html。

JVM 参数规则

当我们运行一个 java 程序的时候,通常都是 java -jar xxx.jar 的命令,也会根据实际情况配置一些运营参数

$ ps -ef | grep 2144945
root     2144945       1  0 Jan15 ?        01:44:21 /usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/bin/java -Dproc_nodemanager -Djava.net.preferIPv4Stack=true -Dsun.security.krb5.debug=true -Dsun.security.spnego.debug -Djava.library.path=/opt/hadoop/lib/native -Dcom.sun.management.jmxremote.port=7774 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -XX:+UseParallelGC -Dyarn.log.dir=/opt/hadoop/logs -Dyarn.log.file=hadoop-root-nodemanager-LOCAL-VM-337.log -Dyarn.home.dir=/opt/hadoop -Dyarn.root.logger=INFO,console -Dhadoop.log.dir=/opt/hadoop/logs -Dhadoop.log.file=hadoop-root-nodemanager-LOCAL-VM-337.log -Dhadoop.home.dir=/opt/hadoop -Dhadoop.id.str=root -Dhadoop.root.logger=INFO,RFA -Dhadoop.policy.file=hadoop-policy.xml -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.yarn.server.nodemanager.NodeManager

这些参数可以分为四类:

  • 以 - 开头的标准参数。所有 JVM 都支持,且向后兼容。

如 -verbose:gc、-server

  • 以 -X 开头的非标准参数,绝大多数都是用于控制 JVM 的参数。

如 -Xmx2G、-Xms2G

  • 以 -XX 开头的非稳定参数,专门用于控制 JVM 行为的参数。

如 -XX:PrintGCDetails、-XX:+UseParNewGC

  • 以 -D 开头的系统参数(也可以是自定义参数),在程序中可以通过 System.setProperty(key, value) 进行设置,以及通过 System.getProperty(key) 进行获取。

如 -Dfile.encoding=UTF-8、-Dlog.path=/data/log/

下面我们主要介绍 -X 和 -XX 参数。

-X 非标准参数的使用

在这里,先简单介绍下 JVM 常用的编译模式:

  1. 解释模式(Interpreted Mode):在解释模式下,JVM会逐行解释Java字节码并执行。这种模式下的代码执行速度较慢,因为每次执行都需要解释字节码。

  2. 即时编译模式(Just-In-Time Compilation Mode,JIT):在即时编译模式下,JVM会将热点代码(经常执行的代码)编译成本地机器代码,以提高执行速度。JIT编译器会根据运行时的性能数据进行优化,以提高代码的执行效率。

  3. 混合模式(Mixed Mode):混合模式是解释模式和即时编译模式的结合。在初始阶段,JVM会使用解释模式执行代码,同时收集运行时的性能数据。当代码被判定为热点代码时,JVM会将其编译成本地机器代码,并在后续执行中使用即时编译模式。

  4. AOT编译模式(Ahead-Of-Time Compilation Mode):AOT编译模式是在应用程序部署之前将Java字节码编译成本地机器代码。这种模式可以提高应用程序的启动速度和整体性能,但会增加部署和维护的复杂性。

下面,我们通过 java -version 命令查看 JDK 版本信息

通过截图可知,我们的编译模式为 mixed mode(混合模式,默认)。

修改编译模式为解释执行模式:

修改编译模式为编译模式:

修改编译模式为混合模式:

对于不同编译模式的耗时情况,可以通过以下实验进行验证

package com.test;

public class TestCompileMode {
    public static void main(String[] args) {
        Long start = System.currentTimeMillis();
        for(int i =0; i < 100000; i++) {
        }
        Long end = System.currentTimeMillis();
        System.out.println("cost: " + (end - start) + " ms");
    }
}

$ java -Xint com.test.TestCompileMode
cost: 1 ms

$ java -Xcomp com.test.TestCompileMode
cost: 3 ms

$ java -Xmixed com.test.TestCompileMode
cost: 0 ms

-XX 非稳定参数的使用

查看 XX 配置项所有参数及其默认值

$ java -XX:+PrintFlagsInitial | head -n 10
[Global flags]
    uintx AdaptiveSizeDecrementScaleFactor          = 4                                   {product}
    uintx AdaptiveSizeMajorGCDecayTimeScale         = 10                                  {product}
    uintx AdaptiveSizePausePolicy                   = 0                                   {product}
    uintx AdaptiveSizePolicyCollectionCostMargin    = 50                                  {product}
    uintx AdaptiveSizePolicyInitializingSteps       = 20                                  {product}
    uintx AdaptiveSizePolicyOutputInterval          = 0                                   {product}
    uintx AdaptiveSizePolicyWeight                  = 10                                  {product}
    uintx AdaptiveSizeThroughPutPolicy              = 0                                   {product}
    uintx AdaptiveTimeWeight                        = 25                                  {product}

由于非State参数非常的多,因此这里就不列出所有参数进行讲解。只介绍我们比较常用的。

Java HotSpot VM 中 -XX 的按照功能可以被松散的聚合成三类:

  • 行为参数(Behavioral Options):用于改变jvm的一些基础行为;
  • 性能调优(Performance Tuning):用于jvm的性能调优;
  • 调试参数(Debugging Options):一般用于打开跟踪、打印、输出等jvm参数,用于显示jvm更加详细的信息;

行为参数(功能开关)

-XX:-DisableExplicitGC  禁止调用System.gc();但jvm的gc仍然有效
-XX:+MaxFDLimit 最大化文件描述符的数量限制
-XX:+ScavengeBeforeFullGC   新生代GC优先于Full GC执行
-XX:+UseGCOverheadLimit 在抛出OOM之前限制jvm耗费在GC上的时间比例
-XX:-UseConcMarkSweepGC 对老生代采用并发标记交换算法进行GC
-XX:-UseParallelGC  启用并行GC
-XX:-UseParallelOldGC   对Full GC启用并行,当-XX:-UseParallelGC启用时该项自动启用
-XX:-UseSerialGC    启用串行GC
-XX:+UseThreadPriorities    启用本地线程优先级 

性能调优

-XX:LargePageSizeInBytes=4m 设置用于Java堆的大页面尺寸
-XX:MaxHeapFreeRatio=70 GC后java堆中空闲量占的最大比例
-XX:MaxNewSize=size 新生成对象能占用内存的最大值
-XX:MaxPermSize=64m 老生代对象能占用内存的最大值
-XX:MinHeapFreeRatio=40 GC后java堆中空闲量占的最小比例
-XX:NewRatio=2  新生代内存容量与老生代内存容量的比例
-XX:NewSize=2.125m  新生代对象生成时占用内存的默认值
-XX:ReservedCodeCacheSize=32m   保留代码占用的内存容量
-XX:ThreadStackSize=512 设置线程栈大小,若为0则使用系统默认值
-XX:+UseLargePages  使用大页面内存

调试参数

-XX:-CITime 打印消耗在JIT编译的时间
-XX:ErrorFile=./hs_err_pid<pid>.log 保存错误日志或者数据到文件中
-XX:-ExtendedDTraceProbes   开启solaris特有的dtrace探针
-XX:HeapDumpPath=./java_pid<pid>.hprof  指定导出堆信息时的路径或文件名
-XX:-HeapDumpOnOutOfMemoryError 当首次遭遇OOM时导出此时堆中相关信息
-XX:OnError="<cmd args>;<cmd args>" 出现致命ERROR之后运行自定义命令
-XX:OnOutOfMemoryError="<cmd args>;<cmd args>"  当首次遭遇OOM时执行自定义命令
-XX:-PrintClassHistogram    遇到Ctrl-Break后打印类实例的柱状信息,与jmap -histo功能相同
-XX:-PrintConcurrentLocks   遇到Ctrl-Break后打印并发锁的相关信息,与jstack -l功能相同
-XX:-PrintCommandLineFlags  打印在命令行中出现过的标记
-XX:-PrintCompilation   当一个方法被编译时打印相关信息
-XX:-PrintGC    每次GC时打印相关信息
-XX:-PrintGC Details    每次GC时打印详细信息
-XX:-PrintGCTimeStamps  打印每次GC的时间戳
-XX:-TraceClassLoading  跟踪类的加载信息
-XX:-TraceClassLoadingPreorder  跟踪被引用到的所有类的加载信息
-XX:-TraceClassResolution   跟踪常量池
-XX:-TraceClassUnloading    跟踪类的卸载信息
-XX:-TraceLoaderConstraints 跟踪类加载器约束的相关信息

XX 参数的使用有两种类型,一种是 Boolean 类型,另外一种是键值对类型。

  • Boolean 类型。
    • -XX:+某个属性 或者,-XX:-某个属性。 + 表示开启了这个属性,- 表示关闭了这个属性。
    • 案例:-XX:-PrintGCDetails,表示关闭了 GC 详情输出。同理,-XX:+PrintGCDetails,表示开启了GC详情输出
  • key-value 类型。
    • -XX: key=value。
    • 案例:-XX: MetaspaceSize=20000,设置 Java 元空间的值为 20000。

查看程序是否开启了某个参数

package com.test;

public class TestCompileMode {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("Hello, World!");
        Thread.sleep(Integer.MAX_VALUE);
    }
}

【关闭验证】

运行 TestCompileMode

java com.test.TestCompileMode

使用 jps(Java Virtual Machine Process Status Tool) 命令查看进程ID

$ jps -l
27392 org.jetbrains.idea.maven.server.RemoteMavenServer
17240
22088 sun.tools.jps.Jps
21740 org.jetbrains.idea.maven.server.RemoteMavenServer
25548 com.test.TestCompileMode

查看程序是否开启了 PrintGCDetails 参数

$ jinfo -flag PrintGCDetails 25548
-XX:-PrintGCDetails

- 没有关闭,故程序没有开启 PrintGCDetails

【开启验证】

运行 TestCompileMode

java -XX:+PrintGCDetails com.test.TestCompileMode

使用 jps(Java Virtual Machine Process Status Tool) 命令查看进程ID

$ jps -l
27392 org.jetbrains.idea.maven.server.RemoteMavenServer
23444 com.test.TestCompileMode
17240
25768 sun.tools.jps.Jps
21740 org.jetbrains.idea.maven.server.RemoteMavenServer

查看程序是否开启了 PrintGCDetails 参数

$ jinfo -flag PrintGCDetails 23444
-XX:+PrintGCDetails

+ 表示开启,故程序开启了 PrintGCDetails

查看元数据空间值

package com.test;

public class TestCompileMode {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("Hello, World!");
        Thread.sleep(Integer.MAX_VALUE);
    }
}

运行 TestCompileMode

 java com.test.TestCompileMode

查看程序的元数据空间值

$ jps -l
27392 org.jetbrains.idea.maven.server.RemoteMavenServer
23444 com.test.TestCompileMode
17240
25768 sun.tools.jps.Jps
21740 org.jetbrains.idea.maven.server.RemoteMavenServer

$ jinfo -flag MetaspaceSize 23444
-XX:MetaspaceSize=21807104

设置元数据空间值

java -XX:MetaspaceSize=100m com.test.TestCompileMode

设置堆内内存大小

$ java -XX:InitialHeapSize=50m -XX:MaxHeapSize=100m com.test.TestCompileMode

或者

$ java -Xms50m -Xmx100m com.test.TestCompileMode

默认情况下 -Xms 初始化堆内存为物理内存的 1/64 ,最大堆内存为物理内存 1/4。

查看堆内存参数 

$ jps -l
25920 sun.tools.jps.Jps
27392 org.jetbrains.idea.maven.server.RemoteMavenServer
30532 com.test.TestCompileMode
17240 
21740 org.jetbrains.idea.maven.server.RemoteMavenServer
26748 org.jetbrains.jps.cmdline.Launcher

$ jinfo -flag InitialHeapSize 30532
-XX:InitialHeapSize=52428800

$ jinfo -flag MaxHeapSize 30532
-XX:MaxHeapSize=104857600

查看程序的所有参数值

$ jps -l
27392 org.jetbrains.idea.maven.server.RemoteMavenServer
2804 sun.tools.jps.Jps
30452 com.test.TestCompileMode
17240 
21740 org.jetbrains.idea.maven.server.RemoteMavenServer

$ jinfo -flags 30452
Attaching to process ID 30452, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.151-b12
Non-default VM flags: -XX:CICompilerCount=4 -XX:InitialHeapSize=52428800 -XX:MaxHeapSize=104857600 -XX:MaxNewSize=34603008 -XX:MinHe
apDeltaBytes=524288 -XX:NewSize=17301504 -XX:OldSize=35127296 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUno
rderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
Command line:  -Xms50m -Xmx100m

  • Non-Default:表示该参数的值已经被用户手动设置,而不是使用默认值。这意味着该参数的值是通过命令行选项、环境变量或其他方式显式设置的,而不是使用JVM的默认配置。

  • Command Line Flag:表示该参数是通过命令行选项来设置的。

查看 JVM 当前所有 XX 配置项

$ java -XX:+PrintFlagsFinal -version | head -n 10
[Global flags]
    uintx AdaptiveSizeDecrementScaleFactor          = 4                                   {product}
    uintx AdaptiveSizeMajorGCDecayTimeScale         = 10                                  {product}
    uintx AdaptiveSizePausePolicy                   = 0                                   {product}
    uintx AdaptiveSizePolicyCollectionCostMargin    = 50                                  {product}
    uintx AdaptiveSizePolicyInitializingSteps       = 20                                  {product}
    uintx AdaptiveSizePolicyOutputInterval          = 0                                   {product}
    uintx AdaptiveSizePolicyWeight                  = 10                                  {product}
    uintx AdaptiveSizeThroughPutPolicy              = 0                                   {product}
    uintx AdaptiveTimeWeight                        = 25                                  {product}
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

Global flags:全局参数,如果自定义修改了某个应用的参数,并不会修改全局参数。

查看 InitialHeapSize 默认值和当前配置的值

$ java -XX:+PrintFlagsInitial -version | grep InitialHeapSize
    uintx InitialHeapSize                           = 0                                   {product}

$ java -XX:+PrintFlagsFinal -version | grep InitialHeapSize
    uintx InitialHeapSize                          := 400556032                           {product}
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

查看 MaxHeapSize 默认值和当前配置的值

$ java -XX:+PrintFlagsInitial -version | grep MaxHeapSize
    uintx MaxHeapSize                               = 130862280                           {product}

$ java -XX:+PrintFlagsFinal -version | grep MaxHeapSize
    uintx MaxHeapSize                              := 2111832064                          {product}
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
 

查看 JVM 自动配置的或者用户手动设置的 XX 选项(非应用程序的)

$ java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=400412928 -XX:MaxHeapSize=6406606848 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompresse
dOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1436001.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言实现memcpy、memmove库函数

目录 引言一、库函数介绍二、库函数详解三、源码实现1.memcpy源码实现2.memmove源码实现 四、测试1.memcpy函数2.memmove函数 五、源码1.memcpy源码2.memmove源码 六、参考文献 引言 关于memcpy和memmove这两个函数&#xff0c;不论是算法竞赛还是找工作面试笔试&#xff0c;对…

如何正确理解和获取S参数

S参数是网络参数&#xff0c;定义了反射波和入射波之间的关系&#xff0c;给定频率的S参数矩阵指定端口反射波b的矢量相对于端口入射波a的矢量&#xff0c;如下所示&#xff1a; bS∙a 在此基础上&#xff0c;如下图所示&#xff0c;为一个常见的双端口网络拓扑图&#xff1a;…

一文简介Maven初级使用

一.概述 Maven是专门用于管理和构建Java项目的工具&#xff0c;它的主要功能有&#xff1a; 提供了一套标准化的项目结构提供了一套标准化的项目构建流程&#xff08;编译&#xff0c;测试&#xff0c;打包&#xff0c;发布&#xff09;提供了一套依赖管理机制 一方面&…

跟着pink老师前端入门教程-day19

一、移动WEB开发之流式布局 1、 移动端基础 1.1 浏览器现状 PC端常见浏览器&#xff1a;360浏览器、谷歌浏览器、火狐浏览器、QQ浏览器、百度浏览器、搜狗浏览器、IE浏览器。 移动端常见浏览器&#xff1a;UC浏览器&#xff0c;QQ浏览器&#xff0c;欧朋浏览器&#xff0…

Intellij Idea的数据库工具 DataGrip

DataGrip DataGrip&#xff1a; IDEA自带&#xff0c;非常好用。智能提示很强大&#xff0c;快捷键跟IDEA自身一致。 如果下载不了 DataGrip&#xff0c;也可以直接用 IDEA 自带的。 常用的快捷键 alt8&#xff1a; 打开数据库Service ctrlshiftF10&#xff1a;打开常用的数…

使用arduino驱动直流减速电机(蓝牙控制)

此篇博客用于记录使用arduino驱动直流减速电机的过程&#xff0c;仅实现简单的功能&#xff1a;PID调速、蓝牙控制 1、直流减速电机简介2、DRV8833电机驱动模块简介3、HC-05蓝牙模块简介电机转动测试4、PID控制5、蓝牙控制电机 1、直流减速电机简介 我在淘宝购买的电机&#x…

Go 中如何检查文件是否存在?可能产生竞态条件?

嗨&#xff0c;大家好&#xff01;本文是系列文章 Go 技巧第十三篇&#xff0c;系列文章查看&#xff1a;Go 语言技巧。 Go 中如何检查文件是否存在呢&#xff1f; 如果你用的是 Python&#xff0c;可通过标准库中 os.path.exists 函数实现。遗憾的是&#xff0c;Go 标准库没有…

pytorch 利用Tensorboar记录训练过程loss变化

文章目录 1. LossHistory日志类定义2. LossHistory类的使用2.1 实例化LossHistory2.2 记录每个epoch的loss2.3 训练结束close掉SummaryWriter 3. 利用Tensorboard 可视化3.1 显示可视化效果 参考 利用Tensorboard记录训练过程中每个epoch的训练loss以及验证loss&#xff0c;便于…

【Java数据结构】单向 不带头 非循环 链表实现

模拟实现LinkedList&#xff1a;下一篇文章 LinkedList底层是双向、不带头结点、非循环的链表 /*** LinkedList的模拟实现*单向 不带头 非循环链表实现*/ class SingleLinkedList {class ListNode {public int val;public ListNode next;public ListNode(int val) {this.val …

【多模态大模型】视觉大模型SAM:如何使模型能够处理任意图像的分割任务?

SAM&#xff1a;如何使模型能够处理任意图像的分割任务&#xff1f; 核心思想起始问题: 如何使模型能够处理任意图像的分割任务&#xff1f;5why分析5so分析 总结子问题1: 如何编码输入图像以适应分割任务&#xff1f;子问题2: 如何处理各种形式的分割提示&#xff1f;子问题3:…

c++之说_10|自定义类型 union 联合体

之前我们说了一些 struct 结构体 现在来了解新的自定义类型 union 联合体 语法 union ptr {void* fptr;CLassFunPtr p;FunPtr p2;ptr& operator(CLassFunPtr ptr){p ptr;return *this;}ptr& operator(FunPtr Fptr){p2 Fptr;return *this;} } FunPtr_; 我们看到了…

第 383 场 LeetCode 周赛题解

A 边界上的蚂蚁 模拟 class Solution { public:int returnToBoundaryCount(vector<int> &nums) {int s 0;int res 0;for (auto x: nums) {s x;if (s 0)res;}return res;} };B 将单词恢复初始状态所需的最短时间 I 枚举&#xff1a;若经过 i i i 秒后 w o r d w…

Leetcode刷题笔记题解(C++):257. 二叉树的所有路径

思路&#xff1a;深度优先搜索 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right…

leetcode 算法 67.二进制求和(python版)

需求 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 示例 1&#xff1a; 输入:a “11”, b “1” 输出&#xff1a;“100” 示例 2&#xff1a; 输入&#xff1a;a “1010”, b “1011” 输出&#xff1a;“10101” 代码 class Solution…

这个门禁考勤技术,看了都说好!

在当今数字化时代&#xff0c;考勤管理对于企业、学校、机构等各类组织至关重要。随着科技的不断进步&#xff0c;传统的考勤方式逐渐显露出效率低、安全性差等问题。 因此&#xff0c;为了应对这些挑战&#xff0c;三维人脸考勤系统作为一项创新的解决方案应运而生。 客户案例…

C#,纽曼-尚克斯-威廉士素数(Newman Shanks Williams prime)的算法与源代码

1 NSW素数 素数是纽曼-尚克斯-威廉士素数&#xff08;Newman-Shanks-Williams prime&#xff0c;简写为NSW素数&#xff09;当且仅当它能写成以下的形式&#xff1a; 1981年M. Newman、D. Shanks和H. C. Williams在研究有限集合时&#xff0c;率先描述了NSW素数。 首几个NSW素…

【经典例子】Java实现2048小游戏(附带源码)

一、游戏回顾 2048游戏是一款数字益智游戏&#xff0c;目标是通过合并相同数字的方块来达到2048这个目标。游戏在一个4x4的方格上进行&#xff0c;每个方格上都有一个数字&#xff08;初始时为2或4&#xff09;。玩家可以通过滑动方向键&#xff08;上、下、左、右&#xff09;…

Java实现用户画像活动推荐系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 兴趣标签模块2.3 活动档案模块2.4 活动报名模块2.5 活动留言模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 数据流程设计3.4 E-R图设计 四、系统展示五、核心代码5.1 查询兴趣标签5.2 查询活动推荐…

升级GPT4保姆级教程

前言&#xff1a; 2024-01-26开通了GPT4之后至今已经使用了两周&#xff0c;体验下来是真的强&#xff0c;各种GPTs使用起来也很丝滑&#xff0c;不需要自己额外调试。之前看版本计划&#xff0c;2024年会发布GPT5&#xff0c;如果你还没有用上GPT4的话快快来升级体验一下吧&a…

C语言之自定义类型:联合和枚举

目录 1. 联合体类型的声明2. 联合体的特点3. 联合体大小的计算联合的一个练习 4. 枚举类型的声明5. 枚举类型的优点6. 枚举类型的使用 1. 联合体类型的声明 像结构体一样&#xff0c;联合体也是由一个或者多个成员构成&#xff0c;这些成员可以不同的类型 但是编译器只为最大…