<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[stone_cold_cool的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/stone_cold_cool</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; stone_cold_cool]]></copyright><item><title><![CDATA[KOOM原理]]></title><link>https://blog.youkuaiyun.com/stone_cold_cool/article/details/121444045</link><guid>https://blog.youkuaiyun.com/stone_cold_cool/article/details/121444045</guid><author>stone_cold_cool</author><pubDate>Sat, 20 Nov 2021 19:44:49 +0800</pubDate><description><![CDATA[1.解决GC卡顿


为什么LeakCanary需要主动触发GC呢？LeakCanary监控泄漏利用了弱引用的特性，为Activity创建弱引用，当Activity对象变成弱可达时(没有强引用)，弱引用会被加入到引用队列中，通过在Activity.onDestroy()后连续触发两次GC，并检查引用队列，可以判定Activity是否发生了泄漏。但频繁的GC会造成用户可感知的卡顿，为解决这一问题，我们设计了全新的监控模块，通过无性能损耗的内存阈值监控来触发镜像采集，具体策略如下：

具体策略如下：

Java]]></description><category></category></item><item><title><![CDATA[Koom 解决hprof文件过大-源码解析]]></title><link>https://blog.youkuaiyun.com/stone_cold_cool/article/details/121405495</link><guid>https://blog.youkuaiyun.com/stone_cold_cool/article/details/121405495</guid><author>stone_cold_cool</author><pubDate>Thu, 18 Nov 2021 17:22:56 +0800</pubDate><description><![CDATA[解决hprof文件过大
Hprof文件通常比较大，分析OOM时遇到500M以上的hprof文件并不稀奇，文件的大小，与dump成功率、dump速度、上传成功率负相关，且大文件额外浪费用户大量的磁盘空间和流量。我们因此想到了对hprof进行裁剪，只保留分析OOM必须的数据，另外，裁剪还有数据脱敏的好处，只上传内存中类与对象的组织结构，并不上传真实的业务数据（诸如字符串、byte数组等含有具体数据的内容），保护用户隐私。

开发镜像裁剪，有两个衡量指标：一是裁剪率，即在不影响问题分析的前提下，裁剪掉的内容要足够]]></description><category></category></item><item><title><![CDATA[KOOM 解决Dump hprof冻结app原理]]></title><link>https://blog.youkuaiyun.com/stone_cold_cool/article/details/121404222</link><guid>https://blog.youkuaiyun.com/stone_cold_cool/article/details/121404222</guid><author>stone_cold_cool</author><pubDate>Thu, 18 Nov 2021 16:42:44 +0800</pubDate><description><![CDATA[解决Dump hprof冻结app
Dump hprof是通过虚拟机提供的API dumpHprofData实现的，这个过程会**“冻结”**整个应用进程，造成数秒甚至数十秒内用户无法操作，这也是LeakCanary无法线上部署的最主要原因，如果能将这一过程优化至用户无感知，将会给OOM治理带来很大的想象空间。

面对这样一个问题，我们将其拆解，自然而然产生2个疑问：
1.为什么dumpHprofData会冻结app，虚拟机的实现原理是什么？
2.这个过程能异步吗？
我们来看dumpHprofData的虚拟]]></description><category></category></item><item><title><![CDATA[koom koom-java-leak 源码分析]]></title><link>https://blog.youkuaiyun.com/stone_cold_cool/article/details/121184683</link><guid>https://blog.youkuaiyun.com/stone_cold_cool/article/details/121184683</guid><author>stone_cold_cool</author><pubDate>Sun, 07 Nov 2021 17:34:05 +0800</pubDate><description><![CDATA[1.AnalysisExtraData.kt 包含原因，分析时间，当前页面信息


class AnalysisExtraData {
  var reason: String? = null        //reason原因

  var usageSeconds: String? = null  //时间

  var currentPage: String? = null   //当前页面
}

2.HeapReport上报的信息


public class HeapReport {

    p]]></description><category></category></item><item><title><![CDATA[koom 源码分析之 koom-monitor-base]]></title><link>https://blog.youkuaiyun.com/stone_cold_cool/article/details/121177400</link><guid>https://blog.youkuaiyun.com/stone_cold_cool/article/details/121177400</guid><author>stone_cold_cool</author><pubDate>Sat, 06 Nov 2021 12:57:52 +0800</pubDate><description><![CDATA[1.LoopMonitor开启单独线程每隔1s监听一次


abstract class LoopMonitor&lt;C&gt; : Monitor&lt;C&gt;(), Callable&lt;LoopMonitor.LoopState&gt; {
    companion object {
        private const val DEFAULT_LOOP_INTERVAL = 1000L
    }

    //是否停止了
    //https://www.jianshu.com/]]></description><category></category></item><item><title><![CDATA[matrix-gradle-plugin 方法前后插桩实现代码分析]]></title><link>https://blog.youkuaiyun.com/stone_cold_cool/article/details/121032028</link><guid>https://blog.youkuaiyun.com/stone_cold_cool/article/details/121032028</guid><author>stone_cold_cool</author><pubDate>Fri, 29 Oct 2021 12:07:24 +0800</pubDate><description><![CDATA[1.gradle文件配置


apply plugin: 'com.tencent.matrix-plugin'
matrix {

    logLevel "D"

    trace {
        enable = true
        baseMethodMapFile = "${project.projectDir}/matrixTrace/methodMapping.txt"
        blackListFile = "${project.projectDir}/matrixTr]]></description><category></category></item><item><title><![CDATA[matrix-android-lib]]></title><link>https://blog.youkuaiyun.com/stone_cold_cool/article/details/120968809</link><guid>https://blog.youkuaiyun.com/stone_cold_cool/article/details/120968809</guid><author>stone_cold_cool</author><pubDate>Tue, 26 Oct 2021 11:26:42 +0800</pubDate><description><![CDATA[1.


1

1.


1

1.


1

1.


1

1.


1


]]></description><category></category></item><item><title><![CDATA[Eventbus注解解析器源码分析]]></title><link>https://blog.youkuaiyun.com/stone_cold_cool/article/details/120857240</link><guid>https://blog.youkuaiyun.com/stone_cold_cool/article/details/120857240</guid><author>stone_cold_cool</author><pubDate>Tue, 19 Oct 2021 23:38:17 +0800</pubDate><description><![CDATA[一.注解解析器配置

1.annotationProcessor project(':eventbus-annotation-processor')

2.annotationProcessorOptions {
        arguments = [eventBusIndex: 'org.greenrobot.eventbusperf.MyEventBusIndex']
      }


buildscript {
    repositories {
       ...]]></description><category></category></item><item><title><![CDATA[Android性能监控相关文档]]></title><link>https://blog.youkuaiyun.com/stone_cold_cool/article/details/120850077</link><guid>https://blog.youkuaiyun.com/stone_cold_cool/article/details/120850077</guid><author>stone_cold_cool</author><pubDate>Tue, 19 Oct 2021 17:05:44 +0800</pubDate><description><![CDATA[抖音 Android 性能优化系列：Java 内存优化篇

干掉OOM？快手开源大招 KOOM 剖析
]]></description><category></category></item><item><title><![CDATA[Leakcanary - hprof分析库shark 源码分析]]></title><link>https://blog.youkuaiyun.com/stone_cold_cool/article/details/120645631</link><guid>https://blog.youkuaiyun.com/stone_cold_cool/article/details/120645631</guid><author>stone_cold_cool</author><pubDate>Fri, 08 Oct 2021 09:57:05 +0800</pubDate><description><![CDATA[1.LeakNodeStatus 三个状态，没用到


internal enum class LeakNodeStatus {
  NOT_LEAKING,
  LEAKING,
  UNKNOWN;
}

2.HeapAnalysisException 封装throwable


class HeapAnalysisException(cause: Throwable) : RuntimeException(cause) {

  override fun toString(): String {
  ]]></description><category></category></item><item><title><![CDATA[matisse一篇就够]]></title><link>https://blog.youkuaiyun.com/stone_cold_cool/article/details/120024328</link><guid>https://blog.youkuaiyun.com/stone_cold_cool/article/details/120024328</guid><author>stone_cold_cool</author><pubDate>Tue, 31 Aug 2021 18:44:14 +0800</pubDate><description><![CDATA[matisse
]]></description><category></category></item><item><title><![CDATA[EventBus源码分析]]></title><link>https://blog.youkuaiyun.com/stone_cold_cool/article/details/120024303</link><guid>https://blog.youkuaiyun.com/stone_cold_cool/article/details/120024303</guid><author>stone_cold_cool</author><pubDate>Tue, 31 Aug 2021 18:42:11 +0800</pubDate><description><![CDATA[EventBus一篇就够
]]></description><category></category></item><item><title><![CDATA[Leakcanary一篇就够]]></title><link>https://blog.youkuaiyun.com/stone_cold_cool/article/details/120024293</link><guid>https://blog.youkuaiyun.com/stone_cold_cool/article/details/120024293</guid><author>stone_cold_cool</author><pubDate>Tue, 31 Aug 2021 18:41:18 +0800</pubDate><description><![CDATA[Leakcanary一篇就够
]]></description><category></category></item><item><title><![CDATA[微信Android客户端的ANR监控方案]]></title><link>https://blog.youkuaiyun.com/stone_cold_cool/article/details/119464855</link><guid>https://blog.youkuaiyun.com/stone_cold_cool/article/details/119464855</guid><author>stone_cold_cool</author><pubDate>Fri, 06 Aug 2021 23:00:03 +0800</pubDate><description><![CDATA[https://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&amp;mid=2649288031&amp;idx=1&amp;sn=91c94e16460a4685a9c0c8e1b9c362a6&amp;chksm=8334c9ddb44340cb66e6ce512ca41592fb483c148419737dbe21f9bbc2bfc2f872d1e54d1641&amp;scene=178&amp;cur_album_id=1884394569690103815]]></description><category></category></item><item><title><![CDATA[微信Android客户端的卡顿监控方案]]></title><link>https://blog.youkuaiyun.com/stone_cold_cool/article/details/119428906</link><guid>https://blog.youkuaiyun.com/stone_cold_cool/article/details/119428906</guid><author>stone_cold_cool</author><pubDate>Thu, 05 Aug 2021 23:18:54 +0800</pubDate><description><![CDATA[https://mp.weixin.qq.com/s/3dubi2GVW_rVFZZztCpsKg

卡顿   UI线程不能够及时的进行渲染，导致UI的反馈不能按照用户的预期，连续、一致的呈现。

ANR   ANR是Google人为规定的概念，产生ANR的原因最多也只有四个。



二、Looper Printer

而大部分的主线程的操作最终都会执行到这个dispatchMessage方法中。

为什么说是大部分？因为有些情况的卡顿，这种方案从原理上就无法监控到。

下图是next方法简...]]></description><category></category></item><item><title><![CDATA[Android Matrix Resource-Canary 源码解析]]></title><link>https://blog.youkuaiyun.com/stone_cold_cool/article/details/119037855</link><guid>https://blog.youkuaiyun.com/stone_cold_cool/article/details/119037855</guid><author>stone_cold_cool</author><pubDate>Fri, 23 Jul 2021 16:30:32 +0800</pubDate><description><![CDATA[1.ResourcePlugin init方法里创建执行activity泄漏检测的类ActivityRefWatcher，start方法里启动检测mWatcher.start();


public class ResourcePlugin extends Plugin {
    private static final String TAG = "Matrix.ResourcePlugin";
    //配置类
    private final ResourceConfig mConfig;
   ]]></description><category></category></item><item><title><![CDATA[Android Matrix之TraceCanary Wiki]]></title><link>https://blog.youkuaiyun.com/stone_cold_cool/article/details/118763017</link><guid>https://blog.youkuaiyun.com/stone_cold_cool/article/details/118763017</guid><author>stone_cold_cool</author><pubDate>Thu, 15 Jul 2021 16:42:19 +0800</pubDate><description><![CDATA[一.怎么衡量流程性

1.帧率 FPS

游戏60FPS ，电影 FPS 25FPS ~ 30FPS，人眼 12FPS

FPS 低并不意味着卡顿发生，而卡顿发生 FPS 一定不高。

2.掉帧程度可以更直观地衡量卡顿

16ms，如果一帧的准备时间超出这个值，则认为发生掉帧，假设每帧准备时间约 32ms，每次只掉一帧，那么 1 秒内实际只刷新 30 帧，即平均帧率只有 30FPS，但这时往往不会觉得是卡顿。反而如果出现某次严重掉帧（&gt;300ms），那么这一次的变化，通常很容易感知到。所以界面的...]]></description><category></category></item><item><title><![CDATA[微信Android客户端的卡顿监控方案]]></title><link>https://blog.youkuaiyun.com/stone_cold_cool/article/details/118738513</link><guid>https://blog.youkuaiyun.com/stone_cold_cool/article/details/118738513</guid><author>stone_cold_cool</author><pubDate>Wed, 14 Jul 2021 22:05:57 +0800</pubDate><description><![CDATA[1.TracePlugin 启动创建UIThreadMonitor，AppMethodBeat，AnrTracer，FrameTracer，EvilMethodTracer，StartupTracer


			
    //构造函数传入TraceConfig
	public TracePlugin(TraceConfig config) {
        this.traceConfig = config;
    }

    @Override
    public void init(Ap...]]></description><category></category></item><item><title><![CDATA[PRIVACY POLICY of screenrecorder]]></title><link>https://blog.youkuaiyun.com/stone_cold_cool/article/details/118166467</link><guid>https://blog.youkuaiyun.com/stone_cold_cool/article/details/118166467</guid><author>stone_cold_cool</author><pubDate>Thu, 24 Jun 2021 01:02:06 +0800</pubDate><description><![CDATA[PRIVACY POLICY of screenrecorder

INTRODUCTION
Welcome!
We values your privacy.

Camera
We use Camera get picture when you want screenrecorder with other firend video.


]]></description><category></category></item></channel></rss>