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

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

查看 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)

如果您觉得文章对您有帮助,欢迎留言打赏,感谢您的支持! 

相关文章:

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

查看 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...] …...

大型软件编程实例分享,诊所门诊处方笺管理系统多台电脑同时使用的软件教程

大型软件编程实例分享&#xff0c;诊所门诊处方笺管理系统多台电脑同时使用的软件教程 一、前言 以下教程以 佳易王诊所门诊电子处方管理系统V17.2 为例说明 软件资源可以点击最下方官网卡片了解详情 软件左侧为导航栏 1、系统参数设置&#xff1a;可以设置打印等参数 2、…...

Java基于微信小程序的医院挂号系统

文章目录 1 简介2 技术栈3 系统目标3.2 系统功能需求分析3.2.1 功能需求分析 4 系统模块设计4.1 数据库模块设计 5 系统的实现5.1 微信小程序个人中心5.2 科**室内容查看的实现**5.3 预约挂号的实现5.4 后台管理界面实现5.5 医生预约管理5.6 医生信息管理 参考文献7 推荐阅读8 …...

你是在独立思考,还是在被洗脑?

你有过这样的经历吗&#xff1f; 老板走过来&#xff0c;急匆匆丢给你一句&#xff1a;帮我整理一下那个客户的资料&#xff0c;下午给我。你抬头&#xff0c;应道「好好好」。老板扬长而去。你转念一想&#xff1a; 等等&#xff0c;哪个客户&#xff1f;什么资料&#xff1f;…...

在django中集成markdown文本框

首先需要下载开源组件&#xff1a;http://editor.md.ipandao.com/&#xff0c;可能需要挂梯子。 百度网盘&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1D9o3P8EQDqSqfhAw10kYkw 提取码&#xff1a;eric 1.在html代码中生成一个div&#xff0c;ideditor <div c…...

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Slider组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Slider组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Slider组件 滑动条组件&#xff0c;通常用于快速调节设置值&#xff0c;如音量调…...

django admin 自定义界面时丢失左侧导航 nav_sidebar

只显示了自定义模板的内容&#xff0c;左侧导航没有显示出来。 原因&#xff1a;context 漏掉了&#xff0c;要补上。 # 错误写法&#xff08;左侧导航不显示&#xff09;def changelist_view(self, request, extra_contextNone):form CsvImportForm()payload {"form&qu…...

JSP原理简述

JSP动态网页技术&#xff0c;可以定义html&#xff0c;css&#xff0c;js等静态内容&#xff0c;还可以定义java代码等动态内容。 注意导入坐标时&#xff0c;JSP的scope标签是provided&#xff0c;和servlet一样&#xff0c;否则会报错。 JSP本质上就是一个Servlet&#xff0c…...

C/C++ - 异常处理

目录 错误处理 异常处理 异常传播 异常规划 标准异常 自定异常 错误处理 在C语言中&#xff0c;错误通常通过函数的返回值来表示。 错误返回值 对于能返回特殊值&#xff08;如NULL或负值&#xff09;的函数&#xff0c;在调用时检查这些值来处理错误。 #include <st…...

十、项目开发总结报告(软件工程)

1&#xff0e;引言 1.1编写目的 1.2项目背景 1.3定义 1.4参考资料 2&#xff0e;开发结果 2.1产品 2.2主要功能及性能 2.3所用工时 2.4所用机时 2.5进度 2.6费用 3&#xff0e;评价 3.1生产率评价 3.2技术方案评价 3.3产品质量评价 4&#xff…...

在 VMware 虚拟机上安装 CentOS系统 完整(全图文)教程

一、前期准备&#xff1a; 1.安装VMware 虚拟机软件&#xff08;不在讲解&#xff0c;可自行去下载安装&#xff09;。官网&#xff1a;https://customerconnect.vmware.com/cn/downloads/details?downloadGroupWKST-PLAYER-1750&productId1377&rPId111471 2.下载iso…...

吉他学习:右手拨弦方法,右手拨弦训练 左手按弦方法

第六课 右手拨弦方法https://m.lizhiweike.com/lecture2/29362775 第七课 右手拨弦训练https://m.lizhiweike.com/lecture2/29362708...

【初识爬虫+requests模块】

爬虫又称网络蜘蛛、网络机器人。本质就是程序模拟人使用浏览器访问网站&#xff0c;并将需要的数据抓取下来。爬虫不仅能够使用在搜索引擎领域&#xff0c;在数据分析、商业领域都得到了大规模的应用。 URL 每一个URL指向一个资源&#xff0c;可以是一个html页面&#xff0c;一…...

微信小程序(三十八)滚动容器

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.滚动触底事件 2.下拉刷新事件 源码&#xff1a; index.wxml <view class"Area"> <!-- scroll-y 垂直滚动refresher-enabled 允许刷新bindrefresherrefresh 绑定刷新作用函数bindscrollto…...

Python学习之路-Tornado基础:数据库

Python学习之路-Tornado基础:数据库 简介 与Django框架相比&#xff0c;Tornado没有自带ORM&#xff0c;对于数据库需要自己去适配。我们使用MySQL数据库。 在Tornado3.0版本以前提供tornado.database模块用来操作MySQL数据库&#xff0c;而从3.0版本开始&#xff0c;此模块…...

Golang的for循环变量和goroutine的陷阱,1.22版本的更新

先来看一段golang 1.22版本之前的for循环的代码 package mainimport "fmt"func main() {done : make(chan bool)values : []string{"chen", "hai", "feng"}for _, v : range values {fmt.Println("start")go func() {fmt.P…...

List 差集

文章目录 基本类型对象类型 基本类型 ListUtils.subtract 方法用于计算两个集合的差集&#xff0c;即返回 list1 中有但 list2 中没有的元素。 其中&#xff0c;list1 指向第一个集合&#xff0c;list2 指向第二个集合。该方法返回一个新的 List 对象&#xff0c;它包含所有在…...

ArcGIS的UTM与高斯-克吕格投影分带要点总结

UTM&#xff08;通用横轴墨卡托投影、等角横轴割椭圆柱投影&#xff09;投影分带投影要点&#xff1a; 1&#xff09;UTM投影采用6度分带 2&#xff09;可根据公式计算&#xff0c;带数&#xff08;经度整数位/6&#xff09;的整数部分31 3&#xff09;北半球地区&#xff0…...

华为第二批难题一:基于预训练AI模型的元件库生成

我的理解&#xff1a;华为的这个难道应该是想通过大模型技术&#xff0c;识别元件手册上的图文内容&#xff0c;与现有建库工具结合&#xff0c;有潜力按标准生成各种库模型。 正好&#xff0c;我们正在研究&#xff0c;利用知识图谱技术快速生成装配模型&#xff0c;其中也涉…...

Android AOSP源码研究之万事开头难----经验教训记录

文章目录 1.概述2.Android源下载1.配置环境变量2.安装curl3.下载repo并授权4.创建一个文件夹保存源码5.设置repo的地址并配置为清华源6.初始化仓库7.指定我们需要下载的源码分支并初始化 2.1 使用移动硬盘存放Android源码的坑2.2 解决方法 3.Android源码编译4.Android源烧录 1.…...

动态数据源

一、部署 1、导入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.1.0</version></dependency>2、编写yml 配置文件 spring:datasource:dyna…...

2024.1.29力扣每日一题——自由之路

2024.1.29 题目来源我的题解方法一 动态规划 题目来源 力扣每日一题&#xff1b;题序&#xff1a;514 我的题解 方法一 动态规划 定义 dp[i][j] 表示从前往后拼写出 key的第 i个字符&#xff0c; ring 的第 j个字符与 12:00 方向对齐的最少步数&#xff08;下标均从 0 开始&…...

Qt应用软件【协议篇】UDP示例

UDP协议简介 UDP(用户数据报协议)是一种无连接的网络协议,提供了简单但是不可靠的消息传输服务。与TCP不同,UDP不保证数据包的顺序、重复性或者可达性,但它在速度和效率上具有优势,特别适合那些对实时性要求高的应用,如视频流、在线游戏等。 Qt中的UDP编程 在Qt中,U…...

MyBatis之动态代理实现增删改查以及MyBatis-config.xml中读取DB信息文件和SQL中JavaBean别名配置

MyBatis之环境搭建以及实现增删改查 前言实现步骤1. 编写MyBatis-config.xml配置文件2. 编写Mapper.xml文件&#xff08;增删改查SQL文&#xff09;3. 定义PeronMapper接口4. 编写测试类1. 执行步骤2. 代码实例3. 运行log 开发环境构造图总结 前言 上一篇文章&#xff0c;我们…...

百面嵌入式专栏(面试题)内存管理相关面试题1.0

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将介绍内存管理相关面试题 。 一、内存管理相关面试题 page数据结构中的_refcount和_mapcount有什么区别?匿名页面和高速缓存页面有什么区别?page数据结构中有一个锁,我们称为页锁,请问trylock_page()和loc…...

SpringMVC 1.请求参数检查 2.全局异常处理 3.请求参数封装为Pojo

ErrorEnum.java // 枚举所有的错误 package com.example.demo.enums;import lombok.Getter;public enum ErrorEnum {SYSTEM_ERROR(-1, "系统错误"),PARAM_ERROR(-2, "参数错误"),OK(0, "成功"),;Getterprivate final int code;Getterprivate fi…...

7机器人位姿的数学描述与坐标变

由上次刚体的空间转动直接切换为机器人相关术语。 1.机器人位姿的数学描述与坐标变换 1.1位姿描述 {B}相对于{A}的姿态描述用3x3矩阵表示为&#xff1a; 式中为三个单位正交主矢量&#xff0c;分别表示刚体坐标系{B}的三个坐标轴XBYBZB在参考系{A}中的方位&#xff0c;∠XBXA表…...

基于ESP8266 开发板(MCU)遥控小车

遥控小车 ​ 遥控界面 ​ 【项目源码】 第一版ESP8266 https://github.com/liyinchigithub/esp8266_car_webServerhttps://github.com/liyinchigithub/esp8266_car_webServer 第二版ESP32 GitHub - liyinchigithub/esp32-wroom-car: 嵌入式单片机 ESP32 Arduino 遥控小车&a…...

【C生万物】C语言数据类型、变量和运算符

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…...

CTF--Web安全--SQL注入之‘绕过方法’

一、什么是绕过注入 众所周知&#xff0c;SQL注入是利用源码中的漏洞进行注入的&#xff0c;但是有攻击手段&#xff0c;就会有防御手段。很多题目和网站会在源码中设置反SQL注入的机制。SQL注入中常用的命令&#xff0c;符号&#xff0c;甚至空格&#xff0c;会在反SQL机制中…...

线程池常用的阻塞队列

新任务来的时候&#xff0c;会先判断当前运行的线程数量是否达到核心线程数&#xff0c;如果达到的话&#xff0c;新任务就会被存放在队列中。 不同的线程池会选用不同的阻塞队列&#xff0c;我们可以结合内置线程池来分析。 ● 容量为 Integer.MAX_VALUE 的 LinkedBlockingQue…...

【Java EE】----SpringBoot的日志文件

1.SpringBoot使用日志 先得到日志对象通过日志对象提供的方法进行打印 2.打印日志的信息 3.日志级别 作用&#xff1a; 可以筛选出重要的信息不同环境实现不同日志级别的需求 ⽇志的级别分为&#xff1a;&#xff08;1-6级别从低到高&#xff09; trace&#xff1a;微量&#…...

【网络安全】2024年暗网威胁分析及发展预测

暗网因其非法活动而臭名昭著&#xff0c;现已发展成为一个用于各种非法目的的地下网络市场。 它是网络犯罪分子的中心&#xff0c;为被盗数据交易、黑客服务和邪恶活动合作提供了机会。为了帮助企业组织更好地了解暗网发展形势&#xff0c;近日&#xff0c;卡巴斯基的安全研究…...

SpringMVC-组件解析

一、引子 我们在上一篇文章Spring MVC-基本概念中&#xff0c;为读者解释了如何使用SpringMVC框架&#xff0c;将承接客户端请求的工作从原生的Servlet转移到我们熟知的Controller中。那么我们不禁会好奇&#xff0c;SpringMVC框架到底做了什么&#xff0c;是怎么把请求分发给…...

ubuntu22.04@laptop OpenCV Get Started: 002_reading_writing_videos

ubuntu22.04laptop OpenCV Get Started: 002_reading_writing_videos 1. 源由2. Read/Display/Write应用Demo3 video_read_from_file3.1 C应用Demo3.2 Python应用Demo3.3 重点过程分析3.3.1 读取视频文件3.3.2 读取文件信息3.3.3 帧读取&显示 4 video_read_from_image_sequ…...

Elasticsearch(ES) 简述请求操作索引下文档 增删查改操作

上文 Elasticsearch(ES) 创建带有分词器规则的索引 带着大家创建了一个带有分词功能的索引 老规矩 我们启动一下ES服务 本文 我们就来说说 关于文档的操作 我们先来添加一个文档 就像数据库加一条数据一样 这里 并不需要指定什么表结构和数据结构 它的文档结构是无模式的 添…...

Chrome扩展开发纪要

1. 开发人员模式 以Edge(Chromium)为例, 可在管理扩展页, 在左侧开发人员模式打开, 只有此项开启后才能加载未压缩的扩展, 虽然也可以打包扩展, 但是浏览器会检测, 未上线的crx包是无法被安装的. 所以不打算上架的crx只能使用 加载解压缩的扩展 安装 2. 创建扩展 2.1 建立文…...

LeetCode-第28题-找出字符串中第一个匹配项的下标

1.题目描述 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 2.样例描述 3.思路描述 可以让字符串 …...

分享90个行业PPT,总有一款适合您

分享90个行业PPT&#xff0c;总有一款适合您 90个行业PPT下载链接&#xff1a;https://pan.baidu.com/s/1bHvhk_42-IFAjNdjPPtMZw?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易…...

【原创 附源码】Flutter海外登录--Tiktok登录最详细流程

最近接触了几个海外登录的平台&#xff0c;踩了很多坑&#xff0c;也总结了很多东西&#xff0c;决定记录下来给路过的兄弟坐个参考&#xff0c;也留着以后留着回顾。更新时间为2024年2月7日&#xff0c;后续集成方式可能会有变动&#xff0c;所以目前的集成流程仅供参考&#…...

国内chatGPT3.5升级到chatGPT4.0的教程(24年2月更新)

最新的充值方法看这里。 通过虚拟卡 WildCard 的方式来升级 GPT 4.0 最快了&#xff0c;大概2分钟就可以升级完成, 而且升级 GPT 4.0 价钱也不贵&#xff0c;虚拟卡一年10美元&#xff0c;GPT4 每个月也才 20美元。如果你觉得 GPT 4.0 对你可能有帮助&#xff0c;那就赶快来升级…...

【python量化交易】qteasy使用教程01 - 安装方法及初始化配置

qteasy教程1 - 安装方法及初始化配置 qteasy教程1 - 安装方法及初始配置qteasy安装前的准备工作1&#xff0c; 创建安装环境2&#xff0c;安装MySQL数据库 (可选)安装pymysql 3&#xff0c;创建tushare账号并获取API token (可选)4&#xff0c;安装TA-lib (可选)WindowsMac OSL…...

UML 2.5图形库

UML 2.5图形库 drawio是一款强大的图表绘制软件&#xff0c;支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用&#xff0c;则直接输入网址drawon.cn或者使用drawon(桌案), drawon.cn内部完整的集成了drawio的所有功能&#xff0c;并实现了云端存储&#…...

分享springboot框架的一个开源的本地开发部署教程(若依开源项目开发部署过程分享持续更新二开宝藏项目PostgresSQL数据库版)

1首先介绍下若依项目&#xff1a; 若依是一个基于Spring Boot和Spring Cloud技术栈开发的多租户权限管理系统。该开源项目提供了一套完整的权限管理解决方案&#xff0c;包括用户管理、角色管理、菜单管理、部门管理、岗位管理等功能。 若依项目采用前后端分离的架构&#xf…...

打卡今天学习 Linux

过年了&#xff0c;祝大家过年快乐 在今天的学习中&#xff0c;我们涉及了一些关键的 Linux 系统管理知识点&#xff0c;包括 systemctl、IP 地址配置、域名解析、映射的创建、软链接等。让我们简要回顾一下这些主题。 1. systemctl systemctl 是一个强大的 Linux 系统管理工…...

单片机精进之路-3流水灯

P1代表单片机的P1口的8个io的寄存器&#xff0c;使用_crol_函数&#xff1a;将 k进行1位左位移&#xff0c;并将值以unsigned char类型返回&#xff0c;再将K的值赋给P1&#xff0c;这样就点亮了P1口对应的IO为低电平的led灯。 //flow light and beep #include <reg51.h>…...

c# File.WriteAllLines 和 File.WriteAllText

File.WriteAllLines 和 File.WriteAllText 都是 C# 中用于写入文本文件的方法&#xff0c;但它们有一些区别。 1. File.WriteAllLines 方法&#xff1a; File.WriteAllLines 方法用于将字符串数组的内容按行写入文本文件。每个数组元素都被写入文件的一行&#xff0c;且方法会…...

linux系统定时任务管理

crontab使用 一、crontab简介 crontab 这个指令所设置的工作将会循环的一直进行下去&#xff01;可循环的时间为分钟、小时、每周、每月或每年等。crontab 除了可以使用指令执行外&#xff0c;亦可编辑 /etc/crontab 来支持。 至于让 crontab 可以生效的服务则是 crond 这个服…...

mysql的慢sql优化

为什么要优化慢sql &#xff1f; 慢sql会长时间占用 数据库连接数&#xff0c;如果项目中有大量的慢sql&#xff0c;那么可用的数据库连接数就会变少&#xff0c;进而会影响业务。 慢sql优化 优化慢sql&#xff0c;最常见的就是添加索引。查询语句中不要使用select *尽量减少…...

排序算法---插入排序

原创不易&#xff0c;转载请注明出处。欢迎点赞收藏~ 插入排序是一种简单直观的排序算法&#xff0c;它的基本思想是将待排序的元素分为已排序和未排序两部分&#xff0c;每次从未排序部分中选择一个元素插入到已排序部分的合适位置&#xff0c;直到所有元素都插入到已排序部分…...