IDEA内存调试插件(好用)
作者:azhegps 发布时间:2022-04-19 08:51:13
JetBrains JVM Debugger Memory View plugin
在我最近的研发活动期间寻找新的工具,以提高我的开发经验,使Android Studio的生活更轻松,我发现一个有用的插件,我从来没有听说过。 这就是为什么,我决定写这个强大的工具,它如何帮助我与内存调试我的应用程序。
What is the plugin about?
根据 plugin page :
此插件扩展了内置的JVM调试器,具有在调试会话期间观察JVM堆中的对象的功能。
内存视图按照类名称分组来显示 堆中的对象总数 。
当你一步步调试代码时, “Diff”列显示调试器停靠点(debugger stops也就是debug点)之间对象数量的变化 。 这种方式你可以很容易地看到你的步进代码如何影响堆。
双击类名称,打开一个包含该类实例的对话框。 该对话框允许您 通过计算表达式过滤实例 。 所有调试器操作(如检查,标记对象,评估表达式,添加到观察等)都可以应用于此对话框中的实例。
How to install this wonderful plugin?
打开Android Studio Plugins 页面:
快捷键: 按 command/ ctrl + shift + A, 类型 插件 随后,按 enter 键:
或打开 Preferences/Settings: (Mac:Android Studio - >Preferences / Windows和Linux:File - >Settings)并找到 Plugins 页面:
按 Install jetBrains plugin… 按钮,搜索 JVM Debugger Memory View 然后 Install 。
装完重新启动Android Studio。
At first glance:
回到Android Studio后,您会发现 Memory View Tool Window 已经添加到工具栏的右侧。
Memory View Tool Window
内存视图工具窗口
如果没有看到内存视图,打开工具窗口,使用主菜单: View → Tool Windows → Memory View。
首先,这个工具只有在打了调试断点并在 debug模式 运行期间才会显示数据。
其次,我要提到的是,我阅读了Android Studio可能会发生的一些警告和错误,不过,我并没有碰到过。
警告:Android Studio版本包含以下限制:
由于Android内存限制,获取大量的实例可能会失败,并会停止VM。
Android Studio可能会停止响应,请参阅 此错误
Let's debug!
在调试模式下运行应用程序并在BreakPoint上暂停后,您会看到很神奇的画面:
这个表让我们最感兴趣的地方是 Diff ”列,当你一步步调试代码行时,你将看到会有多少新的对象实例被创建或销毁!
我想寻找我自己的对象 (即ProfileModel类) ,所以我搜索它:
正如你可以看到我已经在这行代码更新了ProfileModel vairable,在GC删除旧对象之前我得到差异是+1 ,也可以访问之前不可能访问到的旧的对象。 通过双击这条记录,我将在窗口中获取ProfileModel类的实例:
此窗口还允许你使用类方法通过计算的表达式过滤实例,例如,您可以使用 OkHttp Response 类的 isSuccessful 方法来过滤筛选在内存中加载不成功的响应:
实例过滤器功能
另一个有用的功能是跟踪新实例,您可以通过Memory View Tool窗口中的右键菜单启用:
此功能可帮助您跟踪已生成类的新实例的代码!
以上所述是小编给大家介绍的IDEA内存调试插件网站的支持!
来源:http://blog.csdn.net/azhegps/article/details/71195351
猜你喜欢
- 栈和队列的本质是相同的,都只能在线性表的一端进行插入和删除。因此,栈和队列可以相互转换。用栈实现队列—力扣232题题目要求:仅使用两个栈实现
- 最近项目需要,需要做一个BMI指数的指示条,先上效果图: BMI指数从18到35,然后上面指示条的颜色会随着偏移量的变化而改变,数字显示当前
- 1.pom.xml文件引入druid和数据库连接jar包<properties><druid.version>1.0
- 加锁和解锁我们来看下ReentrantLock的基本用法ThreadDomain35类public class ThreadDomain35
- 发送者其实比较简单,需要做的就是首先确定往哪里发送,其次怎么让消息发送顺畅。我们就看一下具体的代码吧。首先调用start方法。完成各个类的初
- 一.求两直线交点class Point { double x; do
- C#中using指令的用法1.using指令using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空
- 前言在实际项目开发中,会碰到这样的问题,数据库表结构设计好了,可实体类还没相应地弄出来。实体类的属性命名方法一般是驼峰法,而数据库中的表字段
- Redisson分布式锁之前的基于注解的锁有一种锁是基本redis的分布式锁,锁的实现我是基于redisson组件提供的RLock,这篇来看
- 本文实例为大家分享了Android创建发送和接收短信应用的简单实现过程,供大家参考,具体内容如下一、接收短信项目的结构如下:一个简单的接收和
- class Dirctonary { &nbs
- 背景我在准备使用 JVM 的命令时候观察程序的动态,但是发现 Main 函数启动就退出了,所以也没办法直接观察,于是想到了如何让 Main
- 前言本文主要给大家介绍了关于Java中Unsafe类的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧1.Unsaf
- * 什么是 * Spring MVC中的 * (Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户
- 本文较为深入的分析了android中UI主线程与子线程。分享给大家供大家参考。具体如下:在一个Android 程序开始运行的时候,会单独启动
- 电话号码输入框需求:三位,七位后有空格删除倒数第四,第八位会将空格也删除使用TextWatcherWhen an object of a t
- 场景:在学习JDBC的语言中,每次都执行通用的几步:即注册驱动,获取连接,创建操作,处理结果,释放资源 过于复杂,因此不妨将上述步骤封装成工
- 本文实例讲述了Java Swing中JList选择事件 * ListSelectionListener用法。分享给大家供大家参考,具体如下:
- 传输层安全性协议(英语:Transport Layer Security,缩写作 TLS),及其前身安全套接层(Secure Sockets
- 委托定义类型,类型指定特定方法签名。可将满足此签名的方法(静态或实例)分配给该类型的变量,然后(使用适当参数)直接调用该方法,或将其作为参数