IDEA的火焰图简单使用

news2024/10/6 10:41:12

1. 火焰图是什么?

简单来说就是用来查看程序耗时的一张图
如何读懂火焰图?

2. mac上如何生成火焰图

找了一圈,原来idea原本就支持…

3. 测试代码

package org.example;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class StepTimeMark {
    private List<Long> times = new ArrayList<>();

    private int type;
    public long getTime() {
        if (type == 1) {
            return System.nanoTime();
        }
        return System.currentTimeMillis();
    }
    public StepTimeMark(int type) {
        times.add(getTime());
    }
    public void mark() {
        times.add(getTime());
    }
    public void end(String msg, long time) {
        times.add(getTime());
        Long aLong = times.get(0);
        Long aLong1 = times.get(times.size() - 1);
        long stepAllTime = aLong1 - aLong;
        if (stepAllTime >= time) {
            List<Long> setTimes = new ArrayList<>();
            for(int i = 1; i < times.size(); ++i) {
                setTimes.add(times.get(i) - times.get(i - 1));
            }
            String str = setTimes.stream().map(String::valueOf).collect(Collectors.joining("\t"));
            System.out.printf("%s:%s cost time: %s%n", msg, str, stepAllTime);
            System.out.print(msg);
        }
    }

    public static void main(String[] args) throws Exception {
        StepTimeMark stepTimeMark = new StepTimeMark(0);
        Thread.sleep(1200);
        stepTimeMark.mark();
        Thread.sleep(30);
        stepTimeMark.mark();

        Thread.sleep(100);
        stepTimeMark.end("sss", 500 );
    }
 }

package org.example;

import groovy.lang.GroovyShell;

public class LGroovyShell {


    public static void main(String[] args) throws Exception {

        StepTimeMark stepTimeMark = new StepTimeMark(0);
        String script = "def add(a, b) {\n" +
                "    return a + b\n" +
                "}\n" +
                "add(a,b)";
        GroovyShell groovyShell = new GroovyShell();

        groovyShell.setVariable("a", 1);
        groovyShell.setVariable("b", 2);
        stepTimeMark.mark();
        ss();
        stepTimeMark.mark();
        Object evaluate = groovyShell.evaluate(script);
        System.out.println(evaluate);
        stepTimeMark.end("step time", 0);
    }

    public static void ss () throws Exception {
        for(int i = 0 ; i < 10000; ++i) {
            for(int j = 0 ; j < 10000; ++j) {
                System.out.println(i * j);
            }
        }
    }
}

在这里插入图片描述

4. 结果

step time:230	219726	381 cost time: 220337
step time
Process finished with exit code 0

可以看到 ss函数跑了接近219s
火焰图如下:
在这里插入图片描述
没想到还要点击火焰图上的➕
在这里插入图片描述
现在可以看到 ss函数的恐怖耗时了吧。也可以看到打印出来这个系统调用的耗时挺大。

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

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

相关文章

QT Quick初学笔记---第一篇

1、对Qt Quick的初步认识 Qt Quick是Qt5界面开发技术的统称&#xff0c;是以下几种技术的集合&#xff1a; QML&#xff1a;界面标记语言JavaScript&#xff1a;动态脚本语言QT C&#xff1a;跨平台C封装库 QML是与HTML类似的一种标记语言。 QML文件采用.qml作为文件格式后…

C语言、C++和C#:区别与特点的比较

C语言、C和C#是三种不同的编程语言&#xff0c;它们在以下几个方面存在区别&#xff1a; 设计宗旨&#xff1a;C语言是一种过程式编程语言&#xff0c;旨在提供高效的系统级编程。C是在C语言基础上发展而来的&#xff0c;既支持过程式编程&#xff0c;也支持面向对象编程。C#是…

C++图形开发(14):游戏完善——无限空中起跳解决

文章目录 1.问题描述2.如何解决&#xff1f;3.整段代码 1.问题描述 在游玩过程中&#xff0c;我们肯定发现了之前所给出的游戏源码中的一个小bug&#xff1a; 小球可以空中无限起跳&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&…

Mysql进阶-

1、存储引擎 1.1 MySQL体系结构 连接层 最上层是一些客户端和链接服务,主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限。服务层 第二层架构主要完成大多数的核心服务功能&#xff0c;如SQL接口,并完成缓存…

安装VMtools

VM17上安装VMtools 遇到的问题: 安装VMware tools是灰色的 解决办法 关闭虚拟机,编辑虚拟机设置 最后点击确定&#xff0c;开启虚拟机 虚拟机->重新安装VMtools&#xff0c;点击即可&#xff0c;若没有点击&#xff0c;那就需要关机&#xff0c;再开机了 正常情况下&am…

【005】基于深度学习的图像语 通信系统

摘要 语义通信是一种新颖的通信方式&#xff0c;可通过传输数据的语义信息提高带宽效率。提出一种用于无线图像传输的系统。该系统基于深度学习技术开发并以端到端&#xff08;E2E&#xff09;的方式进行训练。利用深度学习实现语义特征的提取和重建&#xff0c;在发送端提取信…

【thinkpad电脑重装系统后双指滑动失效】

我的电脑在前段时间重装系统了&#xff0c;然后触控板一直用不了&#xff0c;但是平时用键盘比较多&#xff0c;没太在意&#xff0c;最近在宿舍&#xff0c;敲击键盘会影响室友睡觉&#xff0c;然后决心要弄好电脑触控板。 网上提及的方法很多&#xff0c;比如通过设备管理器…

利用MMSegmentation微调Mask2Former模型

前言 本文介绍了专用于语义分隔模型的python库mmsegmentation&#xff0c;github项目地址&#xff0c;运行环境为Kaggle notebook&#xff0c;GPU为P100针对环境配置、预训练模型推理、在西瓜数据集上微调新sota模型mask2former模型&#xff0c;数据说明由于西瓜数据集较小&am…

【从零开始学习JAVA | 第二十八篇】不可变集合

目录 目录 前言&#xff1a; 不可变集合&#xff1a; 常见的不可变集合&#xff1a; 1.创建list的不可变集合&#xff1a; 2.创建map的不可变集合&#xff1a; 应用场景&#xff1a; 总结&#xff1a; 前言&#xff1a; 本文我们将为大家介绍JAVA中的不可变集合&#x…

第四十七章Java枚举(enum)详解:Java声明枚举类型、枚举(enum)类、EnumMap 与 EnumSet

枚举是一个被命名的整型常数的集合&#xff0c;用于声明一组带标识符的常数。枚举在曰常生活中很常见&#xff0c;例如一个人的性别只能是“男”或者“女”&#xff0c;一周的星期只能是 7 天中的一个等。类似这种当一个变量有几种固定可能的取值时&#xff0c;就可以将它定义为…

今天实习第二天 ,vue

由于这是一次新的项目&#xff0c;有几个技术&#xff0c;docker&#xff0c;vue 老板要我学习vue。 这里我安装的是node.js&#xff0c;但是操作的时候用的是idea&#xff0c;因为vue插件集成在idea中。 01.vue的技术 vue是MVVM的履行者。 02.第一个vue程序 第一步&#xff1…

C基础day9(2023.7.11)

一、Xmind整理&#xff1a; 二、课上练习&#xff1a; 练习1&#xff1a;实现字符串逆置 #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, const char *argv[]) {char str[]"hello";char *pstr;char *qstrstrlen…

UE编辑器灯光颜色,能量传入Shader流程

编辑器界面&#xff1a; 代码流程&#xff1a; FLinearColor ULightComponent::GetColoredLightBrightness() const {// Brightness in Lumensfloat LightBrightness ComputeLightBrightness();FLinearColor Energy FLinearColor(LightColor) * LightBrightness;if (bUseTem…

数学建模-拟合算法

这里的线性函数指的是参数为线性&#xff0c;而不是变量为线性。 yabx^2是线性的 用的比较多的是多项式拟合和自己定义的 拓展资料&#xff1a;工具箱曲线拟合类型评价解释 文件-导出代码 自动生成的代码修改图名和标签 如果不收敛&#xff0c;自己要修改初始值&#xf…

ES 跨集群搜索 Cross-cluster search (CCS)

跨集群查询 跨集群搜索(cross-cluster search)使你可以针对一个或多个远程集群运行单个搜索请求。 例如&#xff0c;你可以使用跨集群搜索来筛选和分析存储在不同数据中心的集群中的日志数据。 环境准备 角色IP系统dev172.16.122.244CentOS 7.9prod172.16.122.245CentOS 7.9 ES…

记忆——记忆宫殿——地点桩

地点桩图片 室内物品放置方法——时钟放置法 https://www.zhihu.com/question/34549534 地点桩的扩展和记忆 我告诉你一个让记忆宫殿数量翻125倍的方法&#xff0c;以后用一个地点桩就扔一个。 这方法是我在背了几本书后才在偶然中发现的&#xff0c;我叫他“五行推演法”&a…

ES(1)简介和安装

文章目录 简介倒排索引 安装 简介 ES是面向文档型数据库&#xff0c;一条数据在这里就是一个文档。 和关系型数据库大致关系如下: ES7.x中废除掉Type&#xff08;表&#xff09;的概念 倒排索引 要知道什么是倒排索引&#xff0c;就要先知道什么是正排索引 idcontent100…

判断数组中所有元素是否均为True numpy.alltrue()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 判断数组中所有元素是否均为True numpy.alltrue() [太阳]选择题 请问关于以下代码的说法错误的是&#xff1f; import numpy as np print(【执行】np.alltrue([True, True, True])) print(n…

C/C++图形库EasyX保姆级使用教程(四) 图片的展示与缩放

C/C图形库EasyX保姆级使用教程 第一章 Microsoft Visual Studio 2022和EasyX的下载及安装使用 第二章 图形化窗口设置以及简单图形的绘制 第三章 图形颜色的填充及相关应用 第四章 图片的展示与缩放 文章目录 C/C图形库EasyX保姆级使用教程前言一、图片的展示1.变量存储图片2.…

安全测试方法介绍(下)渗透测试

安全主要测试方法主要有&#xff1a;静态源代码审查&#xff0c;这个在编码阶段就可以进行&#xff0c;这个阶段如果出现问题&#xff0c;修复起来成本也比较低。程序发布之后可以进行渗透测试。前面的文章中我们为大家介绍了静态源代码审查的方法和策略&#xff0c;接下来本文…