自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

baiiu

每天前进三十公里

  • 博客(247)
  • 资源 (1)
  • 收藏
  • 关注

原创 【置顶】 博文汇总

23年底了,想来也工作十年,也一直在csdn输出。这十年,从业务层做到性能优化,再到音视频,再到播放器稳定性相关的native crash。也积累了不少文章,在此汇总一下;另外还有大量的深度源码分析草稿,之后也整理发出来吧。

2023-12-15 18:50:44 1542

原创 《Effective C++》 笔记

侯捷 Effective C++ 笔记

2024-10-16 21:32:26 630

原创 python 卸载、安装、virtualenv

本文汇总下python环境的安装与卸载。

2024-10-05 18:25:56 573

原创 C++ 左值、右值、左值引用、右值引用

本文介绍C++11的各种引用的概念,理解清楚各种引用的概念,非常有助于理解基于c11引用的各种操作。

2024-06-03 08:00:00 750

原创 C++ 动态分配内存&智能指针

本文介绍C++中的内存动态分配、和更好的用于对象内存管理的智能指针。

2024-06-03 08:00:00 1118

原创 C++ 类与构造函数 三五法则

定义了拷贝操作的类类通常拥有一个资源,而拷贝成员必须拷贝此资源。但是拷贝一个资源会导致一些额外开销。在这种拷贝并非必要的情况下,定义了移动构造函数和移动赋值运算符的类就可以避免此问题。

2024-06-02 09:08:44 1185 1

原创 iOS object-c 常用API汇总

本文为入门iOS开发,object-c语法汇总。用于日常查阅。

2024-06-02 08:50:38 515

原创 MediaCodec源码分析 ACodec状态机详解

UninitializedState:未初始化状态。在业务层调用完成后切换到LoadedState。LoadedState:表示解码器已经加载完了;调用,和后,在LoadedState::onStart中调用让omx进入可Idel状态,后切换到LoadedToIdleState状态。LoadedToIdleState:初始化Buffer,解码器可用了;在接收到OMX_StateIdle返回后,并发送让omx切换到执行态,后切换到IdleToExecutingState状态。

2024-03-17 10:55:06 243

原创 MediaCodec源码分析 状态简单介绍

本文分析MediaCodec.h层的状态机,下篇介绍ACodec状态机,基于7.0代码。During its life a codec conceptually exists in one of three states: Stopped, Executing or Released.Stopped 状态具有三个子状态:Uninitialized、Configured 和 Error。有三种方式可以使 MediaCodec 进入 Uninitialized 子状态:使用工厂方法创建 MediaCodec

2024-03-17 10:43:17 133

原创 MediaCodec源码分析 Codec消息轮转

本文梳理MediaCodec的消息轮转流程,基于7.0代码。MediaCodec底层实现为JMediaCodec、MediaCodec.cpp、ACodec,他们之间是通过media包下的ALooper、AHandler、AMeesage这一套机制进行线程间通信的。本文就是分析这里的流程,先分析ALooper这一套,然后再分析MediaCodec.java是怎么调用操作下去的,ACodec又是如何跟MediaCodec.cpp通信的。

2024-03-13 11:38:59 314 2

原创 Android Native Hook 深入理解PLT hook

本文介绍NativeHook技术里的PLT hook,参考开源的xhook和bhook进行理解,本文不涉及该hook技术源码的分析,只分析大体原理,用于在进行修复稳定性问题时候寻找hook点使用。

2023-12-22 20:28:28 1517

原创 Android源码分析 理解Refbase

最近解决稳定性问题,遇到sp问题,本文就简单梳理RefBase和sp、wp下。

2023-12-13 15:02:06 642

原创 Android 深入理解SurfaceView

更改layoutParams、surfaceView.setVisibility、滑动等基本任何一个对view的操作都会引起updateWindow,所以我们在对SurfaceView操作的时候要加倍小心,避免引起多次updateWindow,从回调上看,就是避免多次触发sufaceChange。通过调整surfaceViewContainer大小、surfaceHolder.setFixedSize,这三种方式均能触发surfaceChange。

2023-09-24 21:18:17 577

原创 MediaCodec源码分析 configure流程

本文梳理MediaCodec configure流程,基于7.0代码,这里只分析AVC和HEVC的视频硬解,流程图如下。

2023-09-12 08:00:00 398

原创 MediaCodec源码分析 createByCodecName流程

本文梳理MediaCodec初始化流程,即create流程,基于7.0代码。流程图如下,创建流程还是比较清晰简单的。

2023-09-07 08:00:00 359

原创 arm体系结构:汇编指令

ARM微处理器的指令集是加载/存储型的,也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成。

2023-08-26 16:11:51 516

原创 arm体系结构:寄存器

本文主要介绍ARM RISC 32位体系结构下的相关知识,主要理解寄存器和相关指令,要读懂汇编啊。

2023-08-24 20:50:49 484

原创 Linux pthread_create源码分析

本文介绍pthread_create函数的使用和源码分析。

2023-06-03 12:53:58 1249

原创 Android 设置线程优先级源码分析

Android中设置线程优先级有thread.setPriority()方式和Process. setThreadPriority()两个方法。使用Process. setThreadPriority()进行更精准的设置,thread.setPriority可能会将线程优先级设置的比background还低,导致线程运行获取不到足够的时间片,出现不可知问题。本篇文章对这两种设置线程优先级的API的进行源码分析。

2023-05-27 17:26:26 549

原创 Android 创建线程源码分析 JavaThread&NativeThread

本文分析在Android中创建线程时候的源码分析,即JavaThread和NativeThread。

2023-05-20 17:59:32 797

原创 Android 性能优化 命令行查看CPU使用率

本文介绍cpu使用率概念,和使用ps命令、top命令和dumpsys cpuinfo命令来查看cpu使用率,帮助我们了解应用程序在运行过程中的整体状态和各个线程状态。

2023-05-06 23:28:21 4233

原创 C语言 非本地跳转 实现native层TryCatch

C语言的本地跳转是指goto、break、continue等语句,但是这个语句最大局限就是只能实现函数内部的跳转。C 语言提供了一种用户级异常控制流形式,称为非本地跳转(non local jump),它将控制直接从一个函数转移到另一个当前正在执行的函数,而不需要经过正常的调用—返回序列。

2023-04-19 23:05:20 521

原创 Android ART&Dalvik虚拟机 追踪对象分配

本文介绍Dalvik虚拟机中的Allocation Tracker,用于追踪dalvik内存分配,能直观的看到分配了什么对象,和分配对象的堆栈。

2023-04-09 15:20:53 160

原创 Android ART虚拟机 GC流程分析

本文分析ART虚拟机的GC流程,主要函数从CollectGarbageInternal开始。当配置CMS为默认回收器时:- collector_type_为kCollectorTypeCMS。- foreground_collector_type_取值为kCollectorTypeCMS。它代表程序位于前台时使用的回收器类型。- background_collector_type_的取值为kCollectorTypeHomogeneousSpaceCompact。它代表程序位于后台时使用的回收器类型。

2023-04-05 14:01:14 721

原创 Android ART虚拟机 GC的各种类型

本文介绍ART虚拟机的GC类型,为下篇介绍ART的GC做准备。每个Space都有自己的gc回收策略,如下图所示:- kGcRetentionPolicyNeverCollect:不需要回收某个Space所包含的垃圾对象(因为该Space可能不存在垃圾对象)。- kGcRetentionPolicyAlwaysCollect:每次垃圾回收都需要处理某个Space空间。- kGcRetentionPolicyFullCollect:直到最后时刻才回收某个Space空间中的垃圾对象。

2023-04-04 23:23:13 586

原创 Android ART虚拟机 对象创建内存分配流程

本篇文章介绍我们在日常开发使用Java时new对象的时,ART在堆上的内存分配是如何分配的。内存又和gc相关,下篇文章会分析ART的gc流程。本文可以参考之前写的Dalivk虚拟机下的对象创建时内存分配流程一起看,会对ART虚拟机理解的更深刻些。

2023-04-03 23:38:55 576

原创 Android ART虚拟机 Space类体系

在ART虚拟机实现中,内存分配和释放的算法是封装在不同的Space中来完成的。而外部使用者只能借助Space及派生类的接口来完成内存的分配与释放。通过阅读这些Space的实现,可以看出ART虚拟机的一个重要的特点就是大量使用映射内存,相较于Dalvik虚拟机来说在内存分配上管理的更细致。

2023-04-02 18:41:38 1337

原创 Android ART虚拟机 堆Heap类构造函数

本文主要介绍Heap的构造函数,从构造函数里大量使用各种Space,可以看出ART虚拟机的一个重要的特点就是大量使用映射内存。主要代码在art/runtime/gc/heap.cc里。

2023-04-01 23:04:10 972

原创 Android ART虚拟机 关键类

本文介绍ART虚拟机中的关键类,方便之后对ART更方便的理解。此处几个类和dalvik一脉相承,也可以更好的理解dalvik里面的GC模块。

2023-03-31 22:56:40 561

原创 Andriod ART虚拟机 启动和初始化

之前整理了一系列Dalvik虚拟机的关于堆内存和GC的文章,轮到对ART内存进行分析优化了,继续整理输出一波,本篇为ART虚拟机系列的第一篇,介绍ART虚拟机的启动和初始化。本ART系列基于7.0代码分析。

2023-03-29 20:30:07 626

原创 C++ 进阶知识整理

本文整理c++进阶语法和知识点。

2023-03-27 18:46:00 148

原创 Android Dalvik虚拟机 堆内存管理 增长&释放

本篇继续介绍安卓dalvik虚拟机系列,介绍Dalvik虚拟机的堆内存管理,即堆是如何增长和释放的。

2023-03-04 14:46:36 925

原创 Android Dalvik虚拟机 GC流程分析

本篇继续介绍安卓dalvik虚拟机,介绍Dalvik虚拟技的GC流程。

2023-03-01 21:26:02 1036

原创 设计模式 状态机

本文梳理状态机概念,在实操中状态机和类似,只是被封装起来,可以很方便的实现状态初始化和状态转换。

2023-02-19 22:02:13 1363

原创 Android Dalvik虚拟机 对象创建内存分配流程

本篇文章介绍我们在日常开发使用Java时new对象的时,Dalvik在堆上的内存分配是如何分配的。内存又和gc相关,下篇文章会分析Dalvik的gc流程。

2023-02-12 16:55:59 650

原创 Android Dalvik虚拟机 堆初始化流程

Dalvik虚拟机中,堆是由heap[0] Active堆和heap[1] Zygote堆两部分组成的。其中,Zygote堆用来管理Zygote进程在启动过程中预加载和创建的各种对象,而Active堆是在Zygote进程fork第一个子进程之前创建的。之后无论是Zygote进程还是其子进程,都在Active堆上进行对象分配和释放。这样做的目的是使得Zygote进程和其子进程最大限度地共享Zygote堆所占用的内存。

2023-02-11 18:48:38 873 1

原创 Android Dalvik虚拟机 启动和初始化

本文整理Dalvik虚拟机在启动流程和初始化流程,为下篇分析Dalvik的内存分配流程和gc流程打一个基础。本系列代码均基于4.4.2分析。Dalvik虚拟机启动流程、Dalvik虚拟机初始化流程、Dalvik虚拟机核心变量gDvm含义

2023-02-05 17:07:28 550

原创 Android 虚拟机 内存优化 分析GC日志

Android虚拟机在发生垃圾回收 (GC) 事件时,会把相应消息会输出到 Logcat 中,可以看出来虚拟机的内存情况,这为我们做内存优化提供了另外一个可参考的依据,要尽量减少stop the world类型的GC。本文介绍如何查看GC日志,先做到看懂GC日志。

2023-01-07 17:04:20 2741

原创 操作系统 内存管理单元MMU TLB

本文详细介绍Linux操作系统下的内存管理单元MMU和TLB。内存管理子系统的架构如图所示,分为用户空间、内核空间和硬件3个层面。硬件层面处理器包含一个称为内存管理单元(Memory Management Unit, MMU)的部件,负责把虚拟地址转换成物理地址。内存管理单元包含一个称为页表缓存(Translation Lookaside Buffer, TLB)的部件,保存最近使用过的页表映射,避免每次把虚拟地址转换成物理地址都需要查询内存中的页表。MMU地址转换流程主要分为几个阶段:1. 用户进程访

2022-10-15 23:54:37 934

原创 Android 性能优化 Systrace使用

汇总System trace使用,学习下音视频如何用Systrace查看,有心得了会贴上来。

2022-10-10 00:15:02 1308

深入理解Android内核设计思想第一版高清完整带目录

第一版,带目录,高清完整 《深入理解Android内核设计思想》适用于Android 4.3以上的版本。全书从操作系统的基础知识入手,全面剖析进程/线程、内存管理、Binder机制、GUI显示系统、多媒体管理、输入系统等核心技术在Android中的实现原理。书中讲述的知识点大部分来源于工程项目研发,因而具有较强的实用性,希望可以让读者“知其然,更知其所以然”。全书分为编译篇、系统原理篇、应用原理篇、系统工具篇共4篇22章,基本涵盖了参与Android开发所需具备的知识,并通过大量图片与实例来引导读者学习,以求尽量在源代码分析外为读者提供更易于理解的思维方式。 《深入理解Android内核设计思想》既适合Android系统工程师,也适合于应用开发工程师来阅读提升Android开发能力。读者可以在《深入理解Android内核设计思想》潜移默化的学习过程中更深刻地理解Android系统,并将所学知识自然地应用到实际开发难题的解决中。

2018-05-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除