Uncaught Exception Handling 测试根据 Thread.setDefaultUncaughtExceptionHandler 的方法文档 Uncaught exception handling is controlled first by the thread, then by the thread’s ThreadGroup object and finally by the default uncaught excepti 2021-06-18 #uncaught exception #exception #崩溃 #崩溃日志 #crash
浅析 IO 框架:Okio 基本概念 Okio java.io ByteString String Buffer ByteArray Source InputStream Sink OutputStream Segment SegmentPool ByteString虽然 okio.ByteString 对标的是 java.lang.String,但是它操作的对象却是 String 内部 2021-06-12 #nio #okio #io
深入探索 java.io 和 nio FileInputStream/FileOutputStreamFileInputStream 和 FileOutputStream 都属于“流式” API,就像流水(Stream)一样只能朝着一个方向读写,不能后退 FileInputStream 相当于以只读模式读文件:open(O_RDONLY) -> read -> close(fd) FileOutputStream 相当于以 2021-06-05 #ART #nio
老罗的 Android 之旅阅读笔记(Dalvik/ART 虚拟机篇) DalvikDalvik HeapDalvik 的堆空间分为 Zygote Heap 和 Active Heap Android 系统的第一个 Dalvik 虚拟机是由 Zygote 进程创建的。应用程序进程是由 Zygote 进程 fork 出来的。也就是说应用程序进程使用了一种 写时拷贝技术(COW)来复制了 Zygote 进程的地址空间。这意味着一开始的时候,应用程序进程和 Zygote 进 2021-05-28 #Dalvik #ART #JVM #VM
【转】mmap 和零拷贝 平时在面试中你肯定会经常碰见的问题就是:RocketMQ 为什么快?Kafka 为什么快?什么是 mmap? 这一类的问题都逃不过的一个点就是 零拷贝,虽然还有一些其他的原因,但是今天我们的话题主要就是零拷贝。 传统 IO在开始谈零拷贝之前,首先要对传统的 IO 方式有一个概念。基于传统的 IO 方式,底层实际上通过调用 read() 和 write() 来实现。 通过 read() 把数据从硬盘 2021-05-21 #mmap #内存,虚拟地址
【转】网络 IO 演变发展过程和模型介绍 在互联网中提起网络,我们都会避免不了讨论高并发、百万连接。而此处的百万连接的实现,脱离不了网络 IO 的选择,因此本文作为一篇个人学习的笔记,特此进行记录一下整个网络 IO 的发展演变过程。以及目前广泛使用的网络模型。 网络 IO 的发展在本节内容中,我们将一步一步介绍网络 IO 的演变发展过程。介绍完发展过程后,再对网络 IO 中几组容易混淆的概念进行对比、分析。 网络 IO 的各个发展阶段 2021-05-11 #epoll #select #poll
KOOM - 利用子进程 dump hprof 不冻结 APP 的 dump hprof在 LeakCanary 浅析 和 Matrix - ResourcesCanary 浅析 这两篇文章里,介绍了检测内存泄漏的两种相似的思路: WeakReference + ReferenceQueue + 延迟 5s 检查是否被 GC WeakReference + ConcurrentLinkedQueue,子线程轮询的方式每隔 1m 检查队列里的对 2021-05-07 #内存优化,OOM #APM
Matrix - TraceCanary 浅析 捕获掉帧/卡顿什么是掉帧/卡顿 什么是卡顿,很多人能马上联系到的是帧率 FPS (每秒显示帧数)。那么多低的 FPS 才是卡顿呢?又或者低 FPS 真的就是卡顿吗?(以下 FPS 默认指平均帧率) 其实并非如此,举个例子,游戏玩家通常追求更流畅的游戏画面体验一般要达到 60FPS 以上,但我们平时看到的大部分电影或视频 FPS 其实不高,一般只有 25FPS ~ 30FPS,而实际上我们也没有觉得 2021-04-26 #APM #性能优化
Matrix - ResourcesCanary 浅析 Activity 的泄漏检测跟 LeakCanary 一样,使用 ActivityLifecycleCallbacks 监听 Activity.onDestroy() 事件,从而收集到已销毁的 Activity 对象 public class ResourcePlugin extends Plugin { @Override public void start() 2021-04-23 #内存优化,OOM #APM
深入 OOM 堆内存分配失败导致的 OOM度量采用下述 API 来度量 APP 或系统的内存使用情况 类别 API 说明 APP Runtime.maxMemory() JVM 可以从系统那申请到的内存的最大值,ActivityManager.getMemoryClass() 和 ActivityManager.getLargeMemoryClass() 其中之一,超过此阈值会发生 OOM R 2021-04-16 #OOM