jvm参数调优

JVM参数调优,一文让你搞懂,再也不为应用操心了! XX:+UseStringDeduplication -XX:+DisableExplicitGC #其他优化。-Xloggc:/logs/gc.log -XX:+PrintGCDetails #GC日志与监控。-XX:+UseG1GC -XX:MaxGCPauseMillis=200 #选择G1GC。-XX:MetaspaceSize 和 -XX:MaxMetaspaceSize。-XX:+PrintGCDetails # 打印GC详细信息。Eclipse MAT(内存分析) 阅读详情

一、了解JVM参数

JVM参数类型:

    • 标准参,所有JVM都应该支持
  • -X 非标,每个JVM实现不同
  • -XX 不稳定参数,下个版本可能取消

常见垃圾回收器组合参数设定:(1.8)

  • -XX:+UseSerialGC = Serial New (DefNew) + Serial Old

    • 小型程序。默认情况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器
  • -XX:+UseParNewGC = ParNew + SerialOld

    • 这个组合已经很少用(在某些版本中已经废弃)
  • -XX:+UseConcMarkSweepGC = ParNew + CMS + Serial Old

  • -XX:+UseParallelGC = Parallel Scavenge + Parallel Old (1.8默认) 【PS + SerialOld】

  • -XX:+UseParallelOldGC = Parallel Scavenge + Parallel Old

  • -XX:+UseG1GC = G1

  • Linux中没找到默认GC的查看方法,而windows中会打印UseParallelGC

    • java +XX:+PrintCommandLineFlags -version
    • 通过GC的日志来分辨
  • Linux下1.8版本默认的垃圾回收器到底是什么?

    • 1.8.0_181 默认(看不出来)Copy MarkCompact
    • 1.8.0_222 默认 PS + PO

GC常用参数

  • -Xmn -Xms -Xmx -Xss
    年轻代 最小堆 最大堆 栈空间

  • -XX:+UseTLAB
    使用TLAB,默认打开,(一般不需要调整)

  • -XX:+PrintTLAB
    打印TLAB的使用情况,(一般不需要调整)

  • -XX:TLABSize
    设置TLAB大小,(一般不需要调整)

  • -XX:+DisableExplictGC,要默认打开,禁用手动频繁调用gc
    System.gc()不管用 ,FGC

  • -XX:+PrintGC
    打印出GC信息

  • -XX:+PrintGCDetails
    打印出GC详细信息

  • -XX:+PrintGCCauses
    打印GC和产生的原因

  • -XX:+PrintHeapAtGC

  • -XX:+PrintGCTimeStamps
    打印GC详细时间

  • -XX:+PrintGCApplicationConcurrentTime (低)
    打印应用程序时间

  • -XX:+PrintGCApplicationStoppedTime (低)
    打印暂停时长

  • -XX:+PrintReferenceGC (重要性低)
    记录回收了多少种不同引用类型的引用

  • -verbose:class
    类加载详细过程

  • -XX:+PrintVMOptions
    打印运行时参数

  • -XX:+PrintFlagsFinal -XX:+PrintFlagsInitial
    必须会用,打印参数
    在这里插入图片描述

  • -Xloggc:opt/log/gc.log
    设置gc文件

  • -XX:MaxTenuringThreshold
    升代年龄,最大值15,cms默认6,其他默认15

  • 锁自旋次数 -XX:PreBlockSpin 热点代码检测参数-XX:CompileThreshold 逃逸分析 标量替换 …
    这些不建议设置

Parallel常用参数

  • -XX:SurvivorRatio
  • -XX:PreTenureSizeThreshold
    大对象到底多大
  • -XX:MaxTenuringThreshold
    指定对象经过多少次垃圾回收进入老年代,cms默认6,其他默认15。补充:动态年龄指年轻代占用空间超Survivor的一半时会把年龄最大的放入老年代。
  • -XX:+ParallelGCThreads
    并行收集器的线程数,同样适用于CMS,一般设为和CPU核数相同
  • -XX:+UseAdaptiveSizePolicy
    自动选择各区大小比例

CMS常用参数

  • -XX:+UseConcMarkSweepGC
  • -XX:ParallelCMSThreads
    CMS线程数量
  • -XX:CMSInitiatingOccupancyFraction
    使用多少比例的老年代后开始CMS收集,默认是68%(近似值),如果频繁发生SerialOld卡顿,应该调小,(频繁CMS回收)
  • -XX:+UseCMSCompactAtFullCollection
    在FGC时进行压缩
  • -XX:CMSFullGCsBeforeCompaction
    多少次FGC之后进行压缩
  • -XX:+CMSClassUnloadingEnabled
  • -XX:CMSInitiatingPermOccupancyFraction
    达到什么比例时进行Perm回收
  • GCTimeRatio
    设置GC时间占用程序运行时间的百分比
  • -XX:MaxGCPauseMillis
    停顿时间,是一个建议时间,GC会尝试用各种手段达到这个时间,比如减小年轻代

G1常用参数

  • -XX:+UseG1GC
  • -XX:MaxGCPauseMillis
    建议值,G1会尝试调整Young区的块数来达到这个值
  • -XX:GCPauseIntervalMillis
    ?GC的间隔时间
  • -XX:+G1HeapRegionSize
    分区大小,建议逐渐增大该值,1 2 4 8 16 32。
    随着size增加,垃圾的存活时间更长,GC间隔更长,但每次GC的时间也会更长
    ZGC做了改进(动态区块大小)
  • G1NewSizePercent
    新生代最小比例,默认为5%
  • G1MaxNewSizePercent
    新生代最大比例,默认为60%
  • GCTimeRatio
    GC时间建议比例,G1会根据这个值调整堆空间
  • ConcGCThreads
    线程数量
  • InitiatingHeapOccupancyPercent
    启动G1的堆空间占用比例
  • -XX:+InitiatingHeapOccupacyPercent
    默认值45%,当O超过这个值时,启动MixedGC,垃圾回收算法和cms一样

二、调优

1、调优前的基础概念:

  1. 吞吐量:用户代码时间 /(用户代码执行时间 + 垃圾回收时间)
  2. 响应时间:STW越短,响应时间越好

所谓调优,首先确定,追求啥?吞吐量优先,还是响应时间优先?还是在满足一定的响应时间的情况下,要求达到多大的吞吐量…

吞吐量优先场景:科学计算、数据挖掘。垃圾回收器一般:(PS + PO)

响应时间优先场景:网站 GUI API 。垃圾回收器一般:(1.8 G1)

2、什么是调优?

  1. 根据需求进行JVM规划和预调优
  2. 优化运行JVM运行环境(慢,卡顿)
  3. 解决JVM运行过程中出现的各种问题(OOM)

3、调优,从规划开始

步骤:

  1. 熟悉业务场景(没有最好的垃圾回收器,只有最合适的垃圾回收器)

  2. 选择回收器组合

  3. 计算内存需求(经验值 1.5G 16G)
    一般只能算个大概,然后要经过压测

  4. 选定CPU(越高越好)

  5. 设定年代大小、升级年龄

  6. 设定日志参数

    eg: -Xloggc:/opt/xxx/logs/xxx-xxx-gc-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=20M -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCCause

    解释:-Xloggc:/opt/xxx/logs/xxx-xxx-gc-%t.log:日志文件,一般是系统名+时间;UseGCLogFileRotation:循环使用;XX:NumberOfGCLogFiles有多少个日志文件;XX:GCLogFileSize:每个日志文件大小。可以每天产生一个日志文件。

  7. 观察日志情况

三、日志详解

每种垃圾回收器的日志格式是不同的!

ps日志

在这里插入图片描述
用这个参数运行HelloGC

java -Xmn10M -Xms40M -Xmx60M -XX:+PrintCommandLineFlags -XX:+PrintGCDetails  HelloGC

查看打印日志
在这里插入图片描述
在这里插入图片描述
其中heap dump部分:

eden space 5632K, 94% used [0x00000000ff980000,0x00000000ffeb3e28,0x00000000fff00000)
                        后面的内存地址指的是,起始地址,使用空间结束地址,整体空间结束地址

在这里插入图片描述

CMS

执行命令:java -Xms20M -Xmx20M -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC com.mashibing.jvm.gc.T15_FullGC_Problem01

[GC (Allocation Failure) [ParNew: 6144K->640K(6144K), 0.0265885 secs] 6585K->2770K(19840K), 0.0268035 secs] [Times: user=0.02 sys=0.00, real=0.02 secs]

ParNew:年轻代收集器

6144->640:收集前后的对比

(6144):整个年轻代容量

6585 -> 2770:整个堆的情况

(19840):整个堆大小

 [GC (CMS Initial Mark) [1 CMS-initial-mark: 8511K(13696K)] 9866K(19840K), 0.0040321 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]     
 //8511 (13696) : 老年代使用(最大)    
 //9866 (19840) : 整个堆使用(最大)
 [CMS-concurrent-mark-start]
 [CMS-concurrent-mark: 0.018/0.018 secs] [Times: user=0.01 sys=0.00, real=0.02 secs]     
 //这里的时间意义不大,因为是并发执行
 [CMS-concurrent-preclean-start][CMS-concurrent-preclean: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]     
 //标记Card为Dirty,也称为Card Marking
 [GC (CMS Final Remark) [YG occupancy: 1597 K (6144 K)][Rescan (parallel) , 0.0008396 secs][weak refs processing, 0.0000138 secs][class unloading, 0.0005404 secs][scrub symbol table, 0.0006169 secs][scrub string table, 0.0004903 secs][1 CMS-remark: 8511K(13696K)] 10108K(19840K), 0.0039567 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]     
 //STW阶段,YG occupancy:年轻代占用及容量   
  //[Rescan (parallel):STW下的存活对象标记    
  //weak refs processing: 弱引用处理   
   //class unloading: 卸载用不到的class    
   //scrub symbol(string) table:         
   //cleaning up symbol and string tables which hold class-level metadata and        
   //internalized string respectively    
   //CMS-remark: 8511K(13696K): 阶段过后的老年代占用及容量    
   //10108K(19840K): 阶段过后的堆占用及容量
   ​[CMS-concurrent-sweep-start]
   [CMS-concurrent-sweep: 0.005/0.005 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]     
   //标记已经完成,进行并发清理
   [CMS-concurrent-reset-start]
   [CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]    
   //重置内部结构,为下次GC做准备

G1

[GC pause (G1 Evacuation Pause) (young) (initial-mark), 0.0015790 secs]
//young -> 年轻代 Evacuation-> 复制存活对象 
//initial-mark 混合回收的阶段,这里是YGC混合老年代回收
   [Parallel Time: 1.5 ms, GC Workers: 1] //一个GC线程
      [GC Worker Start (ms):  92635.7]
      [Ext Root Scanning (ms):  1.1]
      [Update RS (ms):  0.0]
         [Processed Buffers:  1]
      [Scan RS (ms):  0.0]
      [Code Root Scanning (ms):  0.0]
      [Object Copy (ms):  0.1]
      [Termination (ms):  0.0]
         [Termination Attempts:  1]
      [GC Worker Other (ms):  0.0]
      [GC Worker Total (ms):  1.2]
      [GC Worker End (ms):  92636.9]
   [Code Root Fixup: 0.0 ms]
   [Code Root Purge: 0.0 ms]
   [Clear CT: 0.0 ms]
   [Other: 0.1 ms]
      [Choose CSet: 0.0 ms]
      [Ref Proc: 0.0 ms]
      [Ref Enq: 0.0 ms]
      [Redirty Cards: 0.0 ms]
      [Humongous Register: 0.0 ms]
      [Humongous Reclaim: 0.0 ms]
      [Free CSet: 0.0 ms]
   [Eden: 0.0B(1024.0K)->0.0B(1024.0K) Survivors: 0.0B->0.0B Heap: 18.8M(20.0M)->18.8M(20.0M)]
 [Times: user=0.00 sys=0.00, real=0.00 secs] 
//以下是混合回收其他阶段
[GC concurrent-root-region-scan-start]
[GC concurrent-root-region-scan-end, 0.0000078 secs]
[GC concurrent-mark-start]
//无法evacuation,进行FGC
[Full GC (Allocation Failure)  18M->18M(20M), 0.0719656 secs]
   [Eden: 0.0B(1024.0K)->0.0B(1024.0K) Survivors: 0.0B->0.0B Heap: 18.8M(20.0M)->18.8M(20.0M)], [Metaspace: 38
76K->3876K(1056768K)] [Times: user=0.07 sys=0.00, real=0.07 secs]

四、案例分析

需要调优的情况一般是运维团队首先受到报警信息(CPU Memory)

案例1

试验用程序:

import java.util.List;
import java.util.LinkedList;

public class HelloGC {
  public static void main(String[] args) {
    System.out.println("HelloGC!");
    List list = new LinkedList();
    for(;;) {
      byte[] b = new byte[1024*1024];
      list.add(b);
    }
  }
}
  1. 区分概念:内存泄漏memory leak,内存溢出out of memory

  2. java -XX:+PrintCommandLineFlags HelloGC

  3. java -Xmn10M -Xms40M -Xmx60M -XX:+PrintCommandLineFlags -XX:+PrintGC HelloGC

(相关参数含义查看上文)
在这里插入图片描述
GC默认就是YGC,清理年轻代
(打印信息没截完)

  1. java -XX:+UseConcMarkSweepGC -XX:+PrintCommandLineFlags HelloGC
    在这里插入图片描述
    在这里插入图片描述
    (打印信息没能截完)

    用UseConcMarkSweepGC 垃圾回收次数会多很多

  2. java -XX:+PrintFlagsInitial 默认参数值

  3. java -XX:+PrintFlagsFinal 最终参数值

  4. java -XX:+PrintFlagsFinal | grep xxx 找到对应的参数

  5. java -XX:+PrintFlagsFinal -version |grep GC

案例2

1、代码

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 从数据库中读取信用数据,套用模型,并把结果进行记录和传输
 */

public class T15_FullGC_Problem01 {

    private static class CardInfo {
        BigDecimal price = new BigDecimal(0.0);
        String name = "张三";
        int age = 5;
        Date birthdate = new Date();

        public void m() {}
    }

    private static ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(50,
            new ThreadPoolExecutor.DiscardOldestPolicy());

    public static void main(String[] args) throws Exception {
        executor.setMaximumPoolSize(50);

        for (;;){
            modelFit();
            Thread.sleep(100);
        }
    }

    private static void modelFit(){
        List<CardInfo> taskList = getAllCardInfo();
        taskList.forEach(info -> {
            // do something
            executor.scheduleWithFixedDelay(() -> {
                //do sth with info
                info.m();

            }, 2, 3, TimeUnit.SECONDS);
        });
    }

    private static List<CardInfo> getAllCardInfo(){
        List<CardInfo> taskList = new ArrayList<>();

        for (int i = 0; i < 100; i++) {
            CardInfo ci = new CardInfo();
            taskList.add(ci);
        }

        return taskList;
    }
}

2、运行程序:java -Xms200M -Xmx200M -XX:+PrintGC com.mashibing.jvm.gc.T15_FullGC_Problem01
3、出现报警信息后,top命令观察到问题:内存不断增长 CPU占用率居高不下
在这里插入图片描述
(环境问题,假如Java进程出问题了,且pid是16222)
4、top -Hp 观察进程中的线程,哪个线程CPU和内存占比高
在这里插入图片描述
5、jps定位具体java进程
6、jstack 定位线程状况,重点关注:WAITING BLOCKED

这里Java进程有问题,且pid是1591(环境一致的话上面top命令能查出占用资源多的pid是1591)
在这里插入图片描述
waiting on <0x0000000088ca3310> (a java.lang.Object)
说明出现锁等待了

这里就能说明为什么阿里规范里规定,线程的名称(尤其是线程池)都要写有意义的名称,有意义的名称能快速定位问题。

6、jinfo pid 打印进程的相关信息
在这里插入图片描述
(没截全)

7、jstat -gc 动态观察gc情况
jstat -gc 4655 500 : 每个500个毫秒打印GC的情况
在这里插入图片描述
阅读GC日志发现频繁GC,查看GC dump日志工具:
arthas观察 / jconsole/jvisualVM/ Jprofiler(收费,最好用)

8、jmap - histo 4655 | head -20,查找有多少对象产生,查出前20个(面试时可以说用这个)
在这里插入图片描述
9、jmap -dump:format=b,file=xxx pid :(面试时不要说用这个)

线上系统,内存特别大,jmap执行期间会对进程产生很大影响,甚至卡顿(电商不适合)

​ 1:设定了参数HeapDump,OOM的时候会自动产生堆转储文件
​ 2:很多服务器备份(高可用),停掉这台服务器对其他服务器不影响
​ 3:在线定位(一般小点儿公司用不到)

除了使用jmap命令,还可以通过以下方式:

  1. 使用 jconsole 选项通过 HotSpotDiagnosticMXBean 从运行时获得堆转储(生成dump文件)
  2. 虚拟机启动时如果指定了 -XX:+HeapDumpOnOutOfMemoryError 选项, 则在抛出OutOfMemoryError 时, 会自动执行堆转储。如:java -Xms20M -Xmx20M -XX:+UseParallelGC -XX:+HeapDumpOnOutOfMemoryError com.mashibing.jvm.gc.T15_FullGC_Problem01
  3. 使用 hprof 命令

10、获取到dump文件之后可以使用MAT / jhat /jvisualvm 进行dump文件分析,参考这博客:https://www.cnblogs.com/baihuitestsoftware/articles/6406271.html
使用 jhat -J-mx512M xxx.dump 解析后,访问 http://ip:7000,访问分析dump文件,
可以使用OQL查找特定问题对象

11、找到代码的问题

JVM参数调优 当涉及到 Java 程序时,为了确保它们以最佳性能运行,必须缩小代码与其所运行的虚拟机(如果有)之间的资源差距。实现这一点的方法是查看并特别调优 Java 虚拟机 (JVM)。然而,说起来容易做起来难。 阅读详情

相关推荐

JVM 11 的优化指南:如何进行JVM调优,JVM调优参数有哪些

在实际的Java应用开发中,JVM(Java Virtual Machine)调优是提升应用性能的关键步骤。合理的调优可以显著提升应用的响应速度、吞吐量,并且减少内存消耗和GC(Garbage Collection)停顿时间。本文将详细介绍JVM 11的优化指南,包含如何进行JVM调优以及常见的JVM调优参数,并提供3个实用的代码示例。

程序员Linc 3060

JVM调优参数

JVM调优参数配置方式内存参数合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 JVM调优参数 配置方式 java [options] MainClass [arguments] options - JVM启动参数。 配置多个参数的.

360°顺滑 1万+

JVM 21 的优化指南:如何进行JVM调优,JVM调优参数有哪些

这篇文章将详细介绍如何进行JVM 21调优,包括JVM 21调优参数及其应用。此外,我将提供12个实用的代码示例,每个示例都会结合和Java代码。本文已收录于,我的技术网站,有大厂完整,工作技术,架构师成长之路,等经验分享随着JVM版本的不断更新,JVM 21 在性能和功能上都带来了显著的提升。合理的JVM调优不仅可以提高应用程序的性能,还能显著减少内存消耗和GC(垃圾回收)停顿时间。本文将详细介绍JVM 21 的优化指南,包含如何进行JVM调优以及常见的JVM调优参数,并提供3个实用的代码示例。

程序员Linc 3941

【JVM调优】如何进行JVM调优?一篇文章就够了!

深入解读JVM性能的监控、定位和调优方案,阐述jps/stat/jstack、MAT等常用性能分析工具的使用,提出JVM参数、内存溢出、内存泄漏、CPU飙升、GC频繁等实际场景下JVM调优的方案。

种一棵树最好的时间是十年前,其次是现在 4万+

JVM三大性能调优参数的含义

-Xms:设置初始分配大小,默认为物理内存的“1/64” -Xmx:最大分配内存,默认为物理内存的“1/4” -Xss规定了每个线程堆栈的大小。一般情况下256K是足够了。影响了此进程中并发线程数大小。 在整个堆内存的调整策略之中,有经验的人基本只会调整两个参数:“-Xmx”(最大内存)、“-Xms”(初始化内存)。如果要取得这些内存的整体信息,直接利用Runtime类即可; 在很多情况下,...

数字成都 2417

【JVM】JVM常用性能调优参数详细介绍

但是需要注意的是,JVM参数调优是一个复杂的过程,需要根据具体应用程序的情况进行调整,而且需要进行实验和测试,才能确定最佳的参数设置。一般是从满足程序的内存使用需求开始的,之后是时间延迟的要求,最后才是吞吐量的要求,要基于这个步骤来不断优化,每一个步骤都是进行下一步的基础,不可逆行之。JVM提供了大量的参数配置,可以通过配置这些参数对JVM进行调优、记录GC日志等等,本文只列出了我自己用到过和了解过的部分参数,根据功能划分。架构调优和代码调优是JVM调优的基础,其中架构调优是对系统影响最大的。

No8g攻城狮的博客 1519

JVM常用调优参数 ——JVM篇

JVM常用性能调优参数详解 ​ 在学习完整个JVM内容后,其实目标不仅是学习了解整个JVM的基础知识,而是为了进行JVM性能调优做准备,所以以下的内容就是来说说JVM性能调优的知识。 一、性能调优 ​ 性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等等。 ​ 架构调优和代码调优是JVM调优的基础,其中架构调优是对系统影响最大的。 性能调优基本上按照以下步骤进行: 明确优化目标 发现性能瓶颈 性能调优 通过监控及数据统计工具获得数据 确认是否达到目标 二、何时进

YING—country的博客 2万+

OpenHarmony实战开发-如何实现文件分布式同步编辑

在分布式文件场景中,分布式设备管理包含了分布式设备搜索、分布式设备列表弹窗、远端设备拉起三部分。首先在分布式组网内搜索设备,然后把设备展示到分布式设备列表弹窗中,最后根据用户的选择拉起远端设备。两台设备组网的分布式场景是工作中常常需要的。这样的分布式场景有助于加快工作效率,减少工作中的冗余,本例将为大家介绍如何实现上述功能。​ (2)订阅分布式数据变化:通过this.distributedObject.on(‘status’, this.statusCallback)监听分布式数据对象的变更。

2401_82546228的博客 745

【JVM调优及常见的JVM调优参数以及作用】

以上是一些常用的JVM优化配置参数和示例代码,具体的配置参数和代码可以根据实际需求进行调整。以上仅是一些常见的JVM调优参数,实际调优时需要根据具体情况选择合适的参数进行调整。主要是调整垃圾收集器的类型和相关参数,以提高垃圾回收的效率和吞吐量。主要是调整堆内存的大小以及堆的垃圾回收策略,以提高内存的使用效率。主要是调整线程池的大小以及一些与线程相关的参数,以提高并发性能。主要是调整类加载器的相关参数,以提高类加载的效率和性能。

qq_31532979的贺公子之数据科学与艺术博客,致力于科技向善,拥抱开源,要用技术的影响力来领导团队,而不是威权和职位! 1615

STM32F407+LAN8720网口不通?别慌,手把手教你用CubeMX和LWIP搞定RMII以太网(附复位与PHY地址避坑指南)

本文详细解析了STM32F407与LAN8720通过RMII接口实现以太网通信的完整流程,重点解决了网口不通的常见问题。从硬件连接到CubeMX配置,再到LWIP网络参数设置,提供了复位时序、PHY地址配置等关键细节的避坑指南,帮助开发者快速排查和解决以太网通信故障。

weixin_33695082的博客 415

基于PlatformIO与CMSIS的STM32库函数开发实战:从环境搭建到外设驱动

本文详细介绍了基于PlatformIO与CMSIS的STM32库函数开发实战,从环境搭建到外设驱动实现。通过对比传统IDE,PlatformIO结合CMSIS框架在跨平台开发、代码可移植性和调试体验上更具优势。文章包含PlatformIO.ini配置详解、GPIO/USART驱动开发实例及常见问题解决方案,帮助开发者高效完成STM32项目开发。

weixin_29190169的博客 418

【JVM实战】JVM参数调优

文章目录JVM参数调优一、调优基本概念二、常用JVM参数三、GC调优思路 JVM参数调优 一、调优基本概念 在调整性能时,JM有三个组件 堆大小调整 垃圾收集器调整 JIT编译器调整 大多数调优选项都与调整堆大小和选择的垃圾收集器有关。 同样,JIT编译器对性能也有很大影响,但是这个对程序员自身要求非常高。 通常,在调优Java应用程序时,重点是以下两个主要目标之一: 响应性:应用程序或系统...

明月沉江春雾晓 8213

Syzkaller实战教程2:运行环境配置+实例运行

本文详细介绍了在linux系统上搭建Syzkaller内核模糊测试环境的完整流程。 1.环境配置:通过VMware创建Ubuntu20.04虚拟机A,配置QEMU/KVM虚拟化环境,安装Go语言工具链和Syzkaller; 2.内核编译:下载Linux内核源码并配置KCOV等调试选项,编译生成带覆盖率支持的bzImage内核镜像; 3.测试环境构建:使用debootstrap创建Debian虚拟机镜像,通过QEMU启动嵌套虚拟机B; 实例测试: 4.演示两种测试场景 - 提供完整上手教程

cuguanren的博客 1370

JVM调优参数大全及G1GC调优

一、JVM常见参数 1、标准参数 -verbose:class 打印每个class信息 -verbose:gc 打印每次gc信息 2、非标参数 -X -Xloggc:filename 设置GC log文件的位置 -Xloggc:log/gc.log -Xms大小 设置堆的初始化大小 -Xmx2048m =-XX:InitialHeapSize -Xmx大小 设置堆的最大大小 -Xms1024m =-XX:MaxHeapSize 一般Xms=Xmx,防止扩容和缩容 -Xmn大小 设置年轻代大小(初始化和最大

叭嘣的博客 3万+

什么是plm系统?-数字化转型网

当今世界,产品研发能力是企业在激烈的市场竞争中保持战略优势的核心竞争力之一。如何有效地缩短产品研发周期、改善产品服务的设计迭代流程、有效降低产品的研发成本,也是企业面临的主要问题之一。PLM(Product Lifecycle Management,产品生命周期管理)在优化产品研发的全管理流程、增强企业产品的市场竞争力方面具有关键的作用。

cxo17757154043的博客 877

深入解析 ReDoc:从零构建高性能 API 文档的终极指南

ReDoc 是一个强大的开源工具,用于将 OpenAPI 规范转换为高质量、响应式的 API 文档。本文详细介绍了如何使用 ReDoc 构建和自定义 API 文档,包括如何编写支持 OpenAPI 的 API 注解、配置 HTML 页面以加载文档,以及如何利用 ReDoc 的高级功能进行定制。通过实例代码,您将学会如何灵活地展示 API 文档,提升用户体验。无论是初学者还是经验丰富的开发者,都能从本文中获得实用的技巧与方案,帮助快速搭建符合需求的 API 文档界面。

楠搏万的博客 4590

JAVA8调优指南:如何进行JVM调优、JVM参数

JAVA8调优

升仔聊编程的博客 2082

SAP 清账凭证 完整生成逻辑(超详细原理 + 底层规则 + 分录逻辑 + 互清特殊规则)

【SAP清账凭证核心逻辑摘要】(149字) SAP清账凭证生成遵循两大类型:1)资金往来对冲型(如F-32/F-44互清),强制生成含完整借贷分录的独立凭证,通过AUGDT/AUGBL字段绑定未清项,典型场景如应收冲应付(借:应付账款 贷:应收账款);2)纯核销型(如F.13自动清账),仅标记行项目状态不产生实际分录。关键规则:①仅未清项管理科目可清账;②互清必须配置主数据关联;③差额清账自动补差(折扣/汇差);④原始凭证永不修改,仅更新BSIK/BSAD等表状态。清账凭证均保留可追溯性,支持FBRA重置还

金牌架构师 530

JVM 8 调优指南:如何进行JVM调优,JVM调优参数

JVM调优是指通过调整Java虚拟机的配置来提升Java应用程序的性能。这包括优化堆内存设置、选择合适的垃圾收集器以及调整其他性能相关的参数。通过这些示例,我们可以深入了解JVM 8的调优策略和方法。合理使用JVM调优参数,可以帮助您的Java应用实现更高效、稳定的性能。希望这些示例能帮助您在实际工作中更有效地进行JVM调优。本文已收录于,我的技术网站ddkk.com,有大厂完整面经,工作技术,架构师成长之路,等经验分享。

架构师专栏 1658

YOLOv11-seg 改进系列 | 引入原创 RSCD 重参数共享卷积分割头,增强 Head 表达力并压低计算量

本文提出一种改进的YOLOv11-seg分割头Segment_RSCD,通过重参数共享卷积增强表达能力。该模块在LSCD共享检测头基础上引入DiverseBranchBlock重参数卷积,保留三尺度预测与Proto掩码原型接口不变。相比原始Segment头,Segment_RSCD参数增加4%但计算量降低1.3%,在共享卷积结构中通过多分支补偿表达能力损失,同时利用Scale层保持尺度差异校准。该方法不改动Backbone/Neck结构,仅重构检测/分割头,实现训练期多路径聚合与部署期等效单分支的平衡。

qq_44224801的博客 179

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

JVM性能调优的6大步骤,及关键调优参数详解

JVM性能调优的6大步骤,及关键调优参数详解JVM性能调优方法和步骤1.监控GC的状态2.生成堆的dump文件3.分析dump文件4.分析结果,判断是否需要优化5.调整GC类型和内存分配6.不断分析和调整JVM调优参数参考 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数。 1.Full GC 会对整个堆进行整理,包括Young、Tenured和Perm。Full GC因...

u013030086的博客 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

JVM性能调优2:JVM性能调优参数整理

整理的基于jdk 1.6 jvm参数。

rodesad的博客 8396

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

JVM 21 的调优指南:如何进行JVM调优,JVM调优参数

以上示例展现了JVM调优的不同方面,包括内存管理、性能优化和资源利用率的提升。之前写的也有33篇系列教程JVM调优实战打击也可以去围观。每个应用的具体情况都不尽相同,因此在进行JVM调优时,需要根据实际情况进行细致的调整和测试。希望这些示例能够为你掌握JVM调优提供实用的参考。记住,有效的JVM调优策略是基于对应用性能和资源使用的深入了解。持续监控和适时调整,才能确保应用的最佳性能。本文已收录于,我的技术网站ddkk.com,有大厂完整面经,工作技术,架构师成长之路,等经验分享。

架构师专栏 3793
上一篇: Java类的加载过程
下一篇: JVM工具
lingengy
博客等级 码龄12年 167粉丝 144原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值