专栏首页java技术大本营java小工具|用idea查看方法的调用过程

java小工具|用idea查看方法的调用过程

开头说两句

小刀博客: https://www.lixiang.red 小刀公从号: 程序员学习大本营

项目背景

我们通过运行idea时, 只是点一下run或者debug , 其实还有一些高级的运行/debug选项可以使用,如idea 2019.2版本,可以在run的时候查看方法调用

以前的运行方式

如图所示,在idea里面运行main函数或者单元测试时有以下的选项

通常来说我们都是点的第一个或者第二个运行的 Run StringUtils.main() : 直接运行 Debug StringUtils.main(): 以debug 的方式运行,可以打断点 Run StringUtils.main with Coverage 带有运行覆盖率报告的运行 用这个运行的话,可以看到我们的代码覆盖报告:

idea 2019.2 新附加的运行方式

在这三个里面,我们可以看到运行时,方法调用等信息 Run StringUtils.main() with Allocations Profiler: 用这个运行,可以看到线程信息,可以看到线程里面方法调用栈的信息 Run StringUtils.main() with CPU profiler : 用这个运行,可以看到虚拟机和cpu进行交互的一些方法,比较底层 Run StringUtils.main with Java Flight Recorder: 用这个运行,可以看到java飞行记录器记录的运行时系统的一些信息 通过这些附加方法的调用,我们可以看到系统一些内部的信息,可以为我们学习源码,指条路径

Run StringUtils.main() with Allocations Profiler

如下图是运行spring 时调用方法列表,在这里面可以清楚的看到springboot 的上下文加载, bean的初始化以及填充,可以对学习spring 各大组件,以及源码提供帮助

Run StringUtils.main() with CPU profiler

通过CPU profiler 来运行,可以看到更底层的一些东西, 上面也有一些外层的调用方法,更多的还有C/C++底层的方法调用, invoke 等方法

Run StringUtils.main with Java Flight Recorder

在第一次调用时,需要先配置jvm 参数:

在idea右上角的configuration里面进行jvm 参数配置

点击 Run StringUtils.main with Java Flight Recorder,如下图所示,不仅仅可以看到Allocations Profiler里面的Flame Graph , Call Tree , MethodList 还多了一个Event ,可以看到JVM运行时一些事件, 如GC, Thread, 类似于飞机上的黑盒子,可以看到内部的一个参数,状态,对jvm调优有很大的帮助

最后说两句

idea 还有很多很强大的功能等待大家去发掘, 如可以直接连数据库,直接连redis , 直接ssh连接远程服务器.还有许多强大的功能,大家可以和小刀分享一下:best396975802

本文分享自微信公众号 - java技术大本营(java-ideashare),作者:微笑的小小刀

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java练习本(2019-07-31)

    “We are made for loving. If we don‘t love, we will be like plants without water....

    微笑的小小刀
  • java练习本(2019-07-03)

    a---b等价于先a--再减去b,a = 100 - b=50 ,c=50,a=99

    微笑的小小刀
  • java学习应用篇|idea的基本安装和使用

    ? :寺水,拿上剑,我们去对练一会。 ? : 啊, 等等我,那个太重了,我拿一个木头的。

    微笑的小小刀
  • 观点 | MSRA副院长周明:未来5到10年是NLP的成熟期

    机器之心原创 作者:虞喵喵 「接下来,NLP 将迎来 60 多年来发展最迅速的时期。」 6 月 1 日,在微软亚洲研究院(MSRA)的自然语言处理(NLP)主题...

    机器之心
  • 原生JS实现拖拽进度条、滚动鼠标显示相应的内容

    今天要分享的是运用原生JS实现拖拽进度条、滚动鼠标显示相应的内容,实现效果如下:

    越陌度阡
  • golang-占位符

    Printf 格式化输出 通用占位符: v 值的默认格式。 %+v 添加字段名(如结构体) %#v  相应值的Go语法表示 %T 相应值的类型的Go语...

    nbsp-nbsp
  • 收藏|Flink比Spark好在哪?

    Flink 是一个面向分布式数据流处理和批量数据处理的开源计算平台。和 Spark 类似,两者都希望提供一个统一功能的计算平台给用户,都在尝试建立一个统一的平台...

    数据社
  • 阿里P8架构师浅析如何避免在Java中检查Null语句

    通常,在Java代码中处理null变量、引用和集合很棘手。它们不仅难以识别,而且处理起来也很复杂。事实上,在编译时无法识别处理null的任何错误,会导致运行时N...

    本人秃顶程序员
  • 视频流媒体平台可以使用ffmpeg拉取rtsp视频流快照吗?

    任何的影音传播都需要通过流媒体服务器来实现,现在的安防监控直播也让视频流媒体服务器大放异彩了。比如我们的流媒体服务器EasyNVR就能够适应多种场景,搭建视频流...

    EasyNVR
  • 可视化| 抗癌新进步:从热迹视角观察细胞内部

    大数据文摘

扫码关注云+社区

领取腾讯云代金券