Java 后端开发中代码执行时间测量权威指南

拆开一个烧坏的IGBT模块,手把手教你识别过压、过流、过温的“案发现场” 本文详细解析了IGBT模块失效分析的实战技巧,通过观察铝层熔化纹路、焊锡溢出形态等物理痕迹,手把手教你识别过压、过流、过温的典型失效模式。文章提供了从基础工具包到现场快速诊断的完整流程,帮助工程师精准定位IGBT模块失效的根本原因。 阅读详情

以下是为您精心整理的 《Java 后端开发中代码执行时间测量权威指南:StopWatch、System.nanoTime 与 System.currentTimeMillis 深度对比与实战规范》 完整说明文档。内容结构清晰、技术严谨、注释详尽,专为 Spring Boot 开发者设计,涵盖概念辨析、使用场景、最佳实践、禁忌提醒及标准示例,可直接作为团队技术规范或新人培训材料使用。


📜 Java 后端开发中代码执行时间测量权威指南

—— StopWatch、System.nanoTime 与 System.currentTimeMillis 深度对比与实战规范

适用角色:Java 后端开发者、Spring Boot 工程师、测试负责人、性能优化工程师
文档目标:明确三类时间测量工具的定位、差异与适用边界,建立团队统一的性能分析规范,避免低效或错误实践。
核心原则:开发调试用 StopWatch,高精度测量用 nanoTime,生产监控用 Micrometer。


✅ 一、三类工具核心定位与本质区别

工具类型时间原点精度单调性主要用途是否受系统时钟影响
System.currentTimeMillis()Java 原生Unix 纪元(1970-01-01T00:00:00Z)毫秒级❌ 非单调获取当前日历时间、记录事件发生时间戳✅ 是(NTP、手动修改会跳变)
System.nanoTime()Java 原生JVM 启动时的任意固定点纳秒级(实际为微秒级)✅ 单调递增测量代码执行耗时、性能分析、基准测试❌ 否(完全不受系统时间影响)
StopWatch(Spring)第三方工具(Spring Framework)基于 System.nanoTime()纳秒级(内部封装)✅ 单调递增多段任务计时、结构化性能分析、开发调试❌ 否

🔍 关键结论:

  • 若你关心“现在几点” → 用 currentTimeMillis()
  • 若你关心“这段代码跑了多久” → 用 nanoTime() 或 StopWatch
  • StopWatch 是 nanoTime() 的高级封装,专为多任务、可读性、易用性优化,不用于生产监控。

✅ 二、使用场景与推荐选择(决策树)

graph TD
    A[需要测量代码执行时间?] -->|是| B{是否在开发/测试阶段?}
    B -->|是| C{是否需要分段统计多个子任务?}
    C -->|是| D[✅ 使用 StopWatch]
    C -->|否| E[✅ 使用 System.nanoTime() + Duration]
    B -->|否| F{是否在生产环境做性能监控?}
    F -->|是| G[✅✅✅ 使用 Micrometer + Prometheus + Grafana]
    F -->|否| H[❌ 禁止使用 StopWatch 或 System.currentTimeMillis()]

✅ 推荐选择总结表

场景推荐方案说明
开发/调试:分析一个 Service 方法中多个步骤耗时(如:校验 → DB → 外部调用 → 发送消息)✅ StopWatch结构清晰、输出美观、自动统计占比,是 Spring 开发者的“性能探针”
开发/调试:仅需测量单个方法总耗时,无 Spring 依赖✅ System.nanoTime() + Duration精度高、无外部依赖、避免时钟漂移
生产环境:监控 HTTP 接口响应时间、数据库查询耗时、缓存命中率✅✅✅ Micrometer + Prometheus + Grafana标准化、可聚合、可告警、低开销、支持分布式追踪
简单脚本/临时调试:快速验证某段代码是否慢✅ System.currentTimeMillis()无依赖,快速可用,但仅限临时使用
高精度基准测试(如 JMH)✅ System.nanoTime()JMH 内部即基于此,是黄金标准
记录日志事件发生时间(如“用户登录时间”)✅ System.currentTimeMillis()必须与真实世界时间对齐

⚠️ 禁止行为:

  • 在高频接口(如 QPS > 100)中嵌入 StopWatch.print() 或 System.currentTimeMillis() 输出日志。
  • 在生产环境使用 StopWatch 做实时监控。
  • 用 currentTimeMillis() 计算执行时间(可能导致负耗时!)。

✅ 三、标准使用示例(带详细中文注释)

✅ 示例 1:【开发调试】使用 StopWatch 分析用户注册全流程(推荐标准写法)

适用场景:排查“用户注册慢”的问题,定位是校验、DB 还是邮件服务拖慢。

import org.springframework.util.StopWatch;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class UserRegistrationService {

    private static final Logger log = LoggerFactory.getLogger(UserRegistrationService.class);

    public void registerUser(String username, String email) {
        // ✅ 创建 StopWatch 实例,命名清晰,便于日志识别
        StopWatch stopWatch = new StopWatch("用户注册流程性能分析");

        try {
            // === 第一步:输入参数校验 ===
            stopWatch.start("参数校验:用户名/邮箱格式校验");
            // 模拟正则校验、查重、敏感词过滤
            validateInput(username, email);
            stopWatch.stop(); // 自动记录当前任务耗时

            // === 第二步:持久化用户数据 ===
            stopWatch.start("数据库操作:插入用户记录");
            // 模拟 INSERT INTO users ...
            saveUserToDatabase(username, email);
            stopWatch.stop();

            // === 第三步:异步发送欢迎邮件 ===
            stopWatch.start("外部调用:发送欢迎邮件(SMTP)");
            // 模拟调用邮件服务,可能涉及网络延迟
            sendWelcomeEmail(email);
            stopWatch.stop();

            // === 第四步:缓存用户会话 ===
            stopWatch.start("缓存操作:写入 Redis 会话");
            cacheUserSession(username);
            stopWatch.stop();

            // ✅ 输出结构化统计信息(开发调试时推荐使用 INFO 级别)
            // 注意:仅在 DEBUG 或特定调试开关开启时输出,避免生产环境频繁打印
            if (log.isDebugEnabled()) {
                log.debug("=== {} ===\n{}", stopWatch.getId(), stopWatch.prettyPrint());
            }

            // ✅ 也可编程获取各任务耗时,用于自定义逻辑(如:超过阈值告警)
            for (StopWatch.TaskInfo task : stopWatch.getTaskInfo()) {
                if (task.getTimeMillis() > 200) { // 超过200ms警告
                    log.warn("任务 {} 耗时异常:{} 毫秒", task.getTaskName(), task.getTimeMillis());
                }
            }

            log.info("用户 {} 注册完成,总耗时:{} 毫秒", username, stopWatch.getTotalTimeMillis());

        } catch (Exception e) {
            log.error("用户注册失败", e);
            throw e;
        }
    }

    private void validateInput(String username, String email) {
        try { Thread.sleep(80); } catch (InterruptedException e) { Thread.currentThread().interrupt(); }
    }

    private void saveUserToDatabase(String username, String email) {
        try { Thread.sleep(150); } catch (InterruptedException e) { Thread.currentThread().interrupt(); }
    }

    private void sendWelcomeEmail(String email) {
        try { Thread.sleep(120); } catch (InterruptedException e) { Thread.currentThread().interrupt(); }
    }

    private void cacheUserSession(String username) {
        try { Thread.sleep(30); } catch (InterruptedException e) { Thread.currentThread().interrupt(); }
    }
}
📊 输出示例(DEBUG 日志):
=== 用户注册流程性能分析 ===
StopWatch '用户注册流程性能分析': running time (millis) = 380
---------------------------------------------
ms     %     Task name
---------------------------------------------
00080  21%   参数校验:用户名/邮箱格式校验
00150  39%   数据库操作:插入用户记录
00120  32%   外部调用:发送欢迎邮件(SMTP)
00030   8%   缓存操作:写入 Redis 会话

✅ 优势:

  • 一眼看出“数据库插入”最慢(39%),优先优化。
  • 自动计算占比,无需手动计算。
  • 任务名称清晰,便于团队协作定位。
  • 可编程获取耗时,支持阈值告警。

✅ 示例 2:【无 Spring 项目 / 高精度测量】使用 System.nanoTime() + Duration(标准写法)

适用场景:工具类、独立 JAR、单元测试、无 Spring 依赖的微服务。

import java.time.Duration;
import java.util.concurrent.TimeUnit;

public class HighPrecisionTimingExample {

    /**
     * 测量一个复杂计算方法的执行耗时(纳秒级精度)
     * 使用 Duration 包装,提升可读性和安全性
     */
    public static void measureComplexCalculation() {
        // ✅ 开始计时:使用 nanoTime(),确保单调性,不受系统时间影响
        long startTime = System.nanoTime();

        // 模拟一个耗时计算:斐波那契数列(非递归,避免栈溢出)
        long result = fibonacci(40);

        // ✅ 结束计时
        long endTime = System.nanoTime();

        // ✅ 将纳秒差值包装为 Duration 对象,便于转换和阅读
        Duration duration = Duration.ofNanos(endTime - startTime);

        // ✅ 输出多种格式,满足不同需求
        System.out.println("=== 高精度计时结果 ===");
        System.out.println("总耗时(纳秒): " + duration.toNanos() + " ns");
        System.out.println("总耗时(微秒): " + duration.toMicros() + " μs");
        System.out.println("总耗时(毫秒): " + duration.toMillis() + " ms");
        System.out.println("总耗时(可读格式): " + duration); // 输出:PT0.012345S
        System.out.println("耗时(秒): " + String.format("%.6f", duration.getSeconds() + duration.getNano() / 1_000_000_000.0) + " s");

        System.out.println("计算结果: " + result);
    }

    private static long fibonacci(int n) {
        if (n <= 1) return n;
        long a = 0, b = 1;
        for (int i = 2; i <= n; i++) {
            long temp = a + b;
            a = b;
            b = temp;
        }
        return b;
    }

    public static void main(String[] args) {
        measureComplexCalculation();
    }
}
📊 输出示例:
=== 高精度计时结果 ===
总耗时(纳秒): 12345678 ns
总耗时(微秒): 12345 μs
总耗时(毫秒): 12 ms
总耗时(可读格式): PT0.012345S
耗时(秒): 0.012346 s
计算结果: 102334155

✅ 优势:

  • 无任何外部依赖,可移植性强。
  • Duration 提供安全、不可变、丰富的 API(如 plus()、compareTo())。
  • 输出格式统一,便于日志系统解析。
  • 完全避免系统时钟干扰,是性能测试的黄金标准。

✅ 示例 3:【生产环境】正确做法 —— 使用 Micrometer + Prometheus(标准监控方案)

适用场景:所有生产环境接口、服务、数据库调用的性能监控。

1. 引入依赖(Spring Boot 项目)
<!-- pom.xml -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
2. 配置启用监控端点(application.yml)
management:
  endpoints:
    web:
      exposure:
        include: health, info, prometheus  # 暴露 Prometheus 指标
  metrics:
    enabled:
      http: true  # 自动监控所有 HTTP 请求
    web:
      server:
        request:
          autotime:
            enabled: true  # 自动为所有控制器方法添加计时
3. 自定义业务指标(推荐方式)
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Timer;
import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

@Service
public class UserService {

    private final MeterRegistry meterRegistry;

    // ✅ 注入 MeterRegistry,用于创建自定义计时器
    public UserService(MeterRegistry meterRegistry) {
        this.meterRegistry = meterRegistry;
    }

    public void processUserOrder(String userId, String orderId) {
        // ✅ 创建一个名为 "user.order.process" 的 Timer,带标签(tag)
        Timer timer = Timer.builder("user.order.process")
                .description("处理用户订单的耗时")
                .tag("userId", userId)           // ✅ 标签用于分组统计
                .tag("orderId", orderId)
                .register(meterRegistry);

        // ✅ 使用 timer.record() 自动记录耗时
        timer.record(() -> {
            // 模拟业务逻辑
            simulateOrderProcessing();
        });

        // ✅ 可选:单独记录某个子步骤(如数据库)
        Timer dbTimer = Timer.builder("user.order.db.query")
                .tag("table", "orders")
                .register(meterRegistry);
        dbTimer.record(() -> {
            // 模拟 SQL 查询
            queryOrderFromDB(orderId);
        });
    }

    private void simulateOrderProcessing() {
        try { Thread.sleep(150); } catch (InterruptedException e) { Thread.currentThread().interrupt(); }
    }

    private void queryOrderFromDB(String orderId) {
        try { Thread.sleep(80); } catch (InterruptedException e) { Thread.currentThread().interrupt(); }
    }
}
4. 查看监控数据

访问:http://localhost:8080/actuator/prometheus

你会看到类似指标:

# HELP user_order_process_seconds Processing time for user order
# TYPE user_order_process_seconds summary
user_order_process_seconds_count{userId="U123",orderId="O456",} 1.0
user_order_process_seconds_sum{userId="U123",orderId="O456",} 0.234
user_order_process_seconds_max{userId="U123",orderId="O456",} 0.234

# HELP user_order_db_query_seconds Database query time for orders
# TYPE user_order_db_query_seconds summary
user_order_db_query_seconds_count{table="orders",} 1.0
user_order_db_query_seconds_sum{table="orders",} 0.081

✅ 优势:

  • 零侵入:无需手动写日志。
  • 可聚合:支持 90th、95th、99th 百分位统计。
  • 可告警:对接 Prometheus + AlertManager,超时自动通知。
  • 可视化:Grafana 图表展示 QPS、P99、错误率。
  • 标准规范:符合云原生监控最佳实践。

✅ 四、团队开发最佳实践与禁忌清单

✅ 推荐做法(Best Practices)

类别推荐做法
开发调试使用 StopWatch 分析复杂方法,输出 DEBUG 日志,关闭生产环境 DEBUG 级别
性能测试使用 System.nanoTime() + Duration,避免 currentTimeMillis()
生产监控禁止使用 StopWatch 或手动计时,必须使用 Micrometer + Prometheus
日志规范所有计时日志必须带 任务名称、耗时、单位、上下文(如用户ID、订单号)
代码审查审查时发现 StopWatch 在 Controller 或高频 Service 中出现 → 拒绝合并
单元测试使用 System.nanoTime() 测量核心算法性能,避免依赖 Spring 容器
工具封装可封装 @PerformanceLog 注解 + AOP 切面,自动对标注方法记录 StopWatch,仅在 DEV 环境生效

🚫 禁忌行为(Anti-Patterns)

错误做法为什么禁止
StopWatch 写在 @RestController 方法中并输出 INFO 日志会因日志刷盘、网络传输、序列化导致性能下降 10%~30%
System.currentTimeMillis() 计算代码耗时若系统时间被 NTP 向后调整,可能出现 endTime < startTime,结果为负数
在循环中频繁创建 StopWatch 实例对象创建开销大,GC 压力增加
用 System.currentTimeMillis() 记录“请求开始时间”用于计算总耗时非单调性导致统计失真,尤其在容器或云环境
在生产环境使用 StopWatch.prettyPrint() 输出日志字符串拼接、格式化消耗 CPU,影响吞吐量
仅依赖 StopWatch 做性能优化决策必须结合 JVM Profiler(如 Async-Profiler)、APM(如 SkyWalking)综合分析

✅ 五、总结:一句话记忆口诀

🔹 “测时间,用 nanoTime;分步骤,用 StopWatch;上生产,用 Micrometer”

  • StopWatch 是你的“调试望远镜”——看清楚内部,但不能当“监控雷达”。
  • System.nanoTime() 是你的“精密秒表”——只用于测量,不用于记录。
  • Micrometer 是你的“生产心跳监测仪”——全天候、低开销、可告警。

✅ 附录:团队技术规范建议(可直接纳入团队 Wiki)

《性能测量工具使用规范》

项目规范
开发阶段所有复杂业务方法(如订单处理、支付链路)必须使用 StopWatch 分段计时,输出 DEBUG 日志
测试阶段单元测试中性能敏感方法必须使用 System.nanoTime() + Duration 进行基准验证
生产环境禁止任何形式的手动计时日志(StopWatch、currentTimeMillis、nanoTime 输出)
监控体系所有 HTTP 接口、数据库调用、Redis 操作必须通过 Micrometer 暴露指标,接入 Prometheus + Grafana
代码审查审查者必须检查是否存在非法计时代码,发现即退回
工具链推荐使用 @Timed 注解(Spring Boot)或自定义 AOP 切面,统一管理计时逻辑

💡 进阶建议:
为团队封装一个 @DevOnlyStopWatch 注解,配合 AOP 和 @Profile("dev"),实现仅在开发环境自动计时,生产环境自动禁用,彻底杜绝误用风险。


Android Telephony主要模块及功能 Telephony的代码主要由五个模块组成 1.Telephony Frameworks 代码区域: frameworks/opt/telephony/ 其中主要的文件在如下目录 /frameworks/opt/telephony/src/java/com/android/internal/telephony/ 其中比较常见的有以下几类文件 1.BaseCommands、RIL构成R 阅读详情

相关推荐

BlenderGis安装碰到问题,ImageIO、无法点击和地图不加载

BlenderGis安装碰到问题,ImageIO、无法点击和地图不加载问题

qq_45176349的博客 4963

Java性能权威指南-总结2

响应时间测试和吞吐量测试(假设后者是基于客户端-服务器模式)之间的差别是,响应时间测试中的客户端线程会在操作之间休眠一段时间。这被称为思考时间。响应时间测试是尽量模拟用户行为:用户在浏览器输入URL,用一些时间阅读返回的网页,然后点击页面上的链接,花一些时间阅读返回的网页,等等。当测试中引入思考时间时,吞吐量就固定了:指定数量的客户端,在给定思考时间下总是得到相同的TPS(少许差别)。基于这点,测量请求的响应时间就变得重要了:服务器的效率取决于它响应固定负载有多快。

weixin_42583701的博客 943

VoIP概述

VoIP统一通信与VoIPVoIP与传统电话比较VoIP各项产品设备的类型及应用 统一通信与VoIP 统一通信指的是把计算机与传统通信技术统一成一体的新通信模式,融合计算机网络与传统通信网络在一个网络平台上,实现电话、传真、数据传输、音视频会议、呼叫中心、即时通信等众多应用服务 VoIP又称IP电话或IP网络电话,是Voice Over IP的缩写,这种技术通过对语音信号进行编码数字化,压缩处理成压缩帧,然后转换成为IP数据包在TCP/IP网络上进行传输,从而达到了在IP网络上进行语音通信目的 VoIP与传

kaminao的博客 4355

java每秒执行一次_Java性能权威指南

[2020年5月15日]开坑。左右看看,可能这本书更加适合作为休息读物,不要求连续花长时间去理解内容,更加偏实践。书中示例代码:https://github.com/scottoaks/javaperformancetuning[2020年5月17日]第1章 导论概述本书涉及的知识主要分两类。1. 如何对Java虚拟机自身的性能进行调优,即如何通过jvm的配置来影响程序的各种性能指标;2. 理解J...

weixin_39603505的博客 1846

数字电路基础(CMOS电路、低功耗方法)

文章目录一、CMOS器件1.1.CMOS反相器1.2. CMOS与非门1.3.CMOS或非门1.4 CMOS与门和CMOS或门二、CMOS电路参数——功耗 一、CMOS器件 1.1.CMOS反相器 CMOS反相器实现非门功能,由一个PMOS管和一个NMOS管组成,其逻辑电路图如下: 其真值表如下: In PMOS NMOS Out 0 √ 导通 ×关闭 1 1 ×关闭 √...

Mr.翟的博客 1万+

Ubuntu中snap简单介绍

通过Snap可以安装众多的软件包。需要注意的是,snap是一种全新的软件包管理方式,它类似一个容器拥有一个应用程序所有的文件和库,各个应用程序之间完全独立。所以使用snap包的好处就是它解决了应用程序之间的依赖问题,使应用程序之间更容易管理。但是由此带来的问题就是它占用更多的磁盘空间 介绍一些常用命令,有点类似docker 1、查看已经通过snap安装的snap包 snap list可以查看 2、可以搜索想要的snap包,例如tomcat snap search tomcat

icanflying的博客 4万+

Java性能权威指南-总结1

对于那些不频繁的操作来说,例如那种同时只需处理一个请求的servlet,修复微基准测试所发现的纳秒级性能衰减就是浪费时间,这些时间用在优化其他操作上可能会更有价值。性能分析反馈基于以下因素:频繁调用的方法、调用时的栈深度、方法参数的实际类型(包括子类)等,它还依赖于代码实际运行的环境。如果用相同的测试衡量斐波那契方法的其他实现,就能看到各种编译效应,特别是当这个实现与当前的实现处在不同的类中时。可以看到,循环中包括了计算随机数,所以测试的总时间是计算斐波那契数列的时间,加上生成一组随机数的时间。

weixin_42583701的博客 742

PCL 点云八叉树射线相交

PCL 点云八叉树射线相交

dayuhaitang1的博客 850

java必读书籍_最佳5本Java性能调优书籍–精选,必读

java必读书籍 为什么Java开发人员应该阅读有关性能调优的书? 当我很久以前第一次面对这个问题时,我以为以后会做,但是我很长一段时间都没有回过头来。 仅当我在用Java编写的任务关键型服务器端财务应用程序中遇到严重的性能和可伸缩性问题时,我才意识到自己缺乏对性能测量,调试和查找瓶颈的知识,这是我的错误。 的确,当您真正需要它时,您将学习最多,但是那些时间并不是学习基础知识的最佳时间,实际上...

最佳 Java 编程 972

5.7 医疗 Agent 实战:构建一个懂“望闻问切”的智能医疗咨询助手

本文介绍了如何构建一个智能医疗咨询助手项目,通过LoRA微调和vLLM部署技术,将通用大模型改造为专业"AI皮肤科医生"。项目采用精简架构:Streamlit前端直接与vLLM推理服务通信,重点展示了微调模型在专业性、安全性和同理心方面的显著提升。实施步骤包括:部署微调模型、构建交互界面,并通过对比测试验证微调效果。项目强调AI仅作为咨询助手而非医生替代品,始终以引导用户寻求专业医疗帮助为核心目标,体现了负责任AI应用的关键原则。

yonggeit的博客 2959

Django 6.0:有哪些新特性以及它们对实际项目的重要性

Django 6.0 感觉像是一个成熟的版本,它基于实际应用案例而打造。它减少了不必要的复杂性,同时扩展了框架的开箱即用功能。升级到 Django 6.0 不仅仅是为了保持版本更新,更是为了构建更易于维护、更安全、更能适应未来发展的应用程序。

iCloudEnd的博客 338

Java性能权威指南

JVM主要接受两类标志: 布尔标志—— -XX:+FlagName表示开启,-XX:-FlagName表示关闭 附带参数的标志—— -XX:FlagName=something,表示将标志flagname的值设置为something 性能测试的方法 微基准测试,用来测量微小代码单元的性能,包括调用同步方法的用时与非同步方法用时的比较,创建线程的代价与使用线程池的代价,执行某种算法的耗...

帷幄庸者的博客 1151

通过Python实现物联网金橙子自动打标

对于自家公司使用金橙子打标卡时,为了与生产线或者PLC联动等,往往需要对金橙子打标卡进行二次开发,而在二次开发中不得不涉及到MarkEzd.dll这个文件,而这个dll文件网上版本多不说,一般都没法直接使用,最后还不得不花大价钱购买专用库。而本文针对这个问题,涉法通过python来绕过MarkEzd.dll文件,直接进行自动化控制EzCad来实现联动,可应用于实际生产。文章最后拓展一下以物联网的形式,实现手机平台等登录网页,输入想要的印字内容后,远程打印的案例。

lylelo的博客 3365

Java性能权威指南-总结28

随后的调用会快很多:尽管仍然需要通过系统调用读文件,但因为这些文件已经在操作系统的内存中,所以数据可以快速返回。表达式的代码,并断定它不过是语法糖,底层还是创建匿名类(特别是从长远来看,两者的性能一样)。表达式的性能,一个最基本的问题是,它们与其所对应的替代物匿名类相比如何。表达式或匿名类的代码体至关重要:如果其中执行了任何较为重型的操作,那花在这一操作上的时间会把。表达式的这种典型用法,通常不会在每次循环迭代时创建一个新对象,所以在个别案例下,使用。如前面所介绍的,类加载的性能可能很重要,特别是在。

weixin_42583701的博客 417

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java代码统计工具_Java性能权威指南

[2020年5月15日]开坑。左右看看,可能这本书更加适合作为休息读物,不要求连续花长时间去理解内容,更加偏实践。书中示例代码:https://github.com/scottoaks/javaperformancetuning[2020年5月17日]第1章 导论概述本书涉及的知识主要分两类。1. 如何对Java虚拟机自身的性能进行调优,即如何通过jvm的配置来影响程序的各种性能指标;2. 理解J...

weixin_39578899的博客 279

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

java性能优化权威指南---性能测试

目录 一、性能测试的4项原则 原则一、应该在产品实际使用的环境中进行性能测试 原则二、理解批处理流逝时间、吞吐量和响应时间 原则三、用统计方法应对性能的变化(没看明白???) 原则四、尽早频繁测试 二、性能测试的简单三分类  1、微基准测试 2、宏基准测试(测试全应用)  3、介基准测试 一、性能测试的4项原则 原则一、应该在产品实际使用的环境中进行性能测试 原则二、理解批...

l1394049664的博客 520

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java性能权威指南-总结3

理想情况下,还应该包括JFR记录的信息,或者对系统影响较小的性能分析(profiling)信息,周期性线程堆栈,以及其他堆分析数据,例如直方图或者全堆的转储信息(尤其是全堆转储,需要占用大量空间,没有必要长期保留)。比如代码性能衰减了5%,随着开发的推进,开发人员或许可以采用以下措施:如果他的代码依赖有待集成的功能特性,那就等该功能可用时,再稍微调整代码,性能衰减的问题或许就解决了。因此,除非在预期的负载和预期的硬件下测试,否则永远无法在测试中完全了解特定生产环境下的性能。比如,包含无限循环的简单脚本。

weixin_42583701的博客 755

Java性能权威指南-总结27

的保护和传统的同步。因为这里没有试图考虑竞争,所以在这样一种情况下,这里的微基准测试是有效的:没有竞争,手头上的问题是研究同步访问资源有些多余时的损失。尽管Java中的集合类提供的数据类型非常丰富,但是在基本层面上,这些类都必须仅使用Java基本的数据类型来保存其数据:数值(整型、双精度浮点型等)、对象引用和这些类型的数组。在编写应用时,选择恰当的集合类,以及恰当地使用集合类,是一个重要的性能考量。集合的内存使用效率没有达到最佳的例子:在用于保存集合中的元素的底层存储中,往往会浪费一些内存。

weixin_42583701的博客 267

【读书笔记】Java性能权威指南 读书笔记

文章目录1.导论2.性能测试方法3, Java性能调优工具3.2 java 监控工具3.2.1 基本信息3.3 性能分析工具3.3.1 采样分析器3.3.2 探查分析器3.3.3 阻塞方法和线程时间线3.3.4 本地分析器3.4 Java任务控制3.4.1 Java飞行记录器4. JIT编译器4.1 编译器介绍4.2 调优入门: 选择编译器类型4.2.1 优化启动4.2.2 优化批处理4.2.3 优化长时间运行的应用4.3 Java和JIT编译器版本4.4 编译器中级调优4.4.1 调优代码缓存4.4.2 

九师兄 745

Java性能权威指南-总结17

举例而言,假设某个应用服务器的任务队列中有30000个任务,有4个CPU可用,如果执行一个任务只需要50毫秒,同时假设这段时间不会到达新任务,则清空任务队列需要6分钟。(20个线程都必须执行加锁代码,当然,成本会随线程数增加,但每个线程所花的时间是固定的,这是重点。在这个例子中,池中会有8个线程(最大线程数)的唯一一种情形是,有7个任务正在处理,队列中有10个任务,这时又来了一个新任务。实际的语言会非常复杂,最简单的理解是,当一个线程离开某个同步块时,必须将任何修改过的值刷新到主内存中。

weixin_42583701的博客 405

Java性能权威指南学习笔记

xmind格式学习笔记下载链接:https://github.com/bsr1983/note/blob/master/Java%E6%80%A7%E8%83%BD%E6%9D%83%E5%A8%81%E6%8C%87%E5%8D%97.xmind Java性能权威指南 导论  JVM调优标志   布尔标志    -XX:+FlagName 表示开启 -XX:-FlagNam...

fengbin2005 518

Java性能权威指南怎么样_Java性能权威指南

目录推荐序  xi前言  xii第1章 导论  11.1 概述  21.2 平台版本约定  21.3 全面的性能调优  41.3.1 编写更好的算法  41.3.2 编写更少的代码  41.3.3 老调重弹的过早优化  51.3.4 其他:数据库很可能就是瓶颈  61.3.5 常见的优化  71.4 小结  8第2章 性能测试方法  92.1 原则1:测试真实应用  92.1.1 微基准测试  9...

weixin_34260071的博客 194

读Java性能权威指南(第2版)笔记25_性能测试方法上

1.3.5.1. 对于不那么频繁的操作,修复微基准测试发现的纳秒级别的回归问题就会浪费时间,将这些时间用于优化其他操作必然更有益。2.3.7.3. 如果你只能测量一个数字,那么最好选择基于百分位响应时间的测试,因为减小这个数字将惠及大多数用户。1.4.1. 要测量一个应用程序的性能,最好的测量对象就是应用程序本身,外加它使用的任何外部资源。1.5.6. 用介基准测试进行自动化测试也是很好的方法,特别是在模块级别的测试中。1.5.5. 介基准测试的性能特点比微基准测试的更接近实际应用程序。

lyingSeven的博客 191

最佳5本Java性能调优书籍–精选,必读

为什么Java开发人员应该阅读有关性能调优的书? 当我很久以前第一次面对这个问题时,我以为以后会做,但是我很长一段时间都没有回过头来。 仅当我在用Java编写的任务关键型服务器端财务应用程序中遇到严重的性能和可伸缩性问题时,我才意识到自己的错误,即缺乏对性能测量,调试和查找瓶颈的知识。 的确,当您真正需要它时,您将学到最多的知识,但是那些时间并不是学习基础知识的最佳时间,实际上,这些时间是应...

最佳 Java 编程 4303

[原创]Java性能优化权威指南读书思维导图

[原创]Java性能优化权威指南读书思维导图 书名:Java性能优化权威指南 原书名:Java performance 作者: (美)Charlie Hunt    Binu John    译者: 柳飞 陆明刚 京东购书地址: http://item.jd.com/11407830.html 介绍:《Java性能优化权威指南》是Java应用性能调优的圣经,内容通俗易懂,介绍了大量的监...

weixin_34179762的博客 147

双向绑定原理,安卓开发权威指南

要准确的测量APP的启动时间,首先我们要了解APP整个启动过程。 启动过程,一般可以分为以下三类:爱奇艺Android客户端启动优化与分析从上图可以看出,启动过程中,Cold的模式下,生命周期中做的事情最多,启动的时间最长,因此,我们以冷启动来衡量APP启动时间。启动过程中,如何判断哪些生命周期影响启动速度呢?我们知道,APP的启动和运行,就是Linux系统创建进程和组件对象,并在UI线程中处理组件消息的过程。启动过程图:App的启动过程,可以划分为三个阶段:当APP启动时,如果当前app的进程不存在,便会

VIP129370的博客 754
上一篇: PostgreSQL 多表 JOIN 为何推荐“小表驱动大表”?
下一篇: 新入职/接手新项目:快速熟悉流程与掌握业务的完整指南(Java 后端视角)
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值