自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(91)
  • 收藏
  • 关注

原创 Android13 Zygote源码解析

Zygote 是 Android 系统中的一个关键进程,由init进程通过解析init.zygotexx.rc文件而创建的,所对应的可执行程序app_process,用于启动所有应用程序进程。它通过预加载常见的类和资源,在启动新的应用时通过进程复制(fork)快速创建新的进程,所对应的源文件是App_main.cpp,进程名为zygote。class mainuser root解析init.zygote.rc中的参数,创建AppRuntime并调用AppRuntime.start()方法;

2024-08-01 00:06:45 1198

原创 Android14 WatchDog源码解析

WatchDog 是 Android 系统中的一个关键组件,负责监控系统性能并检测是否存在应用或系统服务的长时间无响应。它通过检测系统中的主要线程(如主线程、Binder 线程)的响应情况,来判断系统是否处于正常运行状态。一旦发现长时间无响应,WatchDog 会采取相应的措施,如记录日志、重启系统服务等,以保持系统的流畅性和稳定性。

2024-08-01 00:00:54 1234 2

原创 Android14应用启动流程(源码+Trace)

应用启动过程快的都不需要一秒钟,但这整个过程的执行是比较复杂的,无论是对手机厂商、应用开发来说启动速度也是核心用户体验指标之一,本文采用Android14源码与perfetto工具进行解析。

2024-04-02 14:29:20 3711 2

原创 Android14 WMS启动流程

在 Android 系统中,从设计的角度来看,窗口管理系统是基于 C/S 模式的。整个窗口系统分为服务端和客户端两大部分,客户端负责请求创建窗口和使用窗口,服务端完成窗口的维护,窗口显示等。WMS 在 Android 系统的地位,它作为中间层,连接了上层的 View 框架和下层的 SurfaceFingler。

2023-10-28 14:24:32 1391

原创 Android14 AMS启动流程

本文均采用Android 14代码进行讲解,学习可以使用以下地址:http://aospxref.com/android-14.0.0_r2/

2023-10-24 17:51:13 790

原创 Android跨进程通信:Binder机制原理

本文先从机制、模型的角度去分析整个Binder跨进程通信机制的模型,其中,会详细分析模型组成中的 Binder驱动,再从源码实现角度,分析 Binder在 Android中的具体实现,从而全方位地介绍 Binder。

2023-09-25 21:51:23 565

原创 Android系统的进程管理(创建->优先级->回收)

Android系统以Linux内核为基础,所以对于进程的管理自然离不开Linux本身提供的机制。通过fork来创建进行通过信号量来管理进程通过proc文件系统来查询和调整进程状态 等进程的创建进程的优先级管理进程的内存管理进程的回收和死亡处理本文会专门讲解进程的创建,其余部分将在后面的文章中讲解。进程的优先级反应了系统对于进程重要性的判定。当内存紧张时,系统对于进程的回收策略系统对于进程的CPU调度策略虚拟机对于进程的内存分配和垃圾回收策略。

2023-08-01 15:32:23 1587

原创 CFS调度器(原理->源码->总结)

从Linux 2.6.23开始,Linux引入scheduling class的概念,目的是将调度器模块化。这样提高了扩展性,添加一个新的调度器也变得简单起来。一个系统中还可以共存多个调度器。在Linux中,将调度器公共的部分抽象,使用struct sched_class结构体描述一个具体的调度类。系统核心调度代码会通过struct sched_class结构体的成员调用具体调度类的核心算法。先简单的介绍下struct sched_class部分成员作用。

2023-07-27 11:04:53 2777

原创 Perfetto详细解析

本篇文章主要介绍Perfetto的详细使用,以及各个模块在Perfetto上的表现,如何对手机性能做基本分析,如何判断卡顿等进行解析,后续会出相关的实战文章。

2023-07-08 16:43:04 29663 10

原创 Android 11 SystemUI 启动流程

在系统服务中,有一个服务是专门为 SystemUI 的状态栏服务的, 这个服务就是 StatusbarManagerService (简称:SMS),和这个服务关系比较密切的服务是 WindowManagerService(简称:WMS), SMS 主要管控的是状态栏、导航栏, 例如:我们可以设置全屏、沉浸式状态栏都是 SMS 在起作用。由上面的初始化流程我们可以知道,每个icon都对应了slot,slot数量比较多,我们就挑一个常见的Headset讲下,其他的流程都是大致一样的。

2023-07-07 14:28:43 7565

原创 Android11 Settings启动流程

Settings主界面Activity使用的是Settings.java,子界面Activity使用的是SubSettings.java,Settings与SubSetting中的内部类都是空Activity(没有重写七大生命周期方法),都继承于SettingsActivity.系统设置的二级菜单界面Activity是SubSettings类,SubSettings类虽然是一个Activity但是它是一个空的Activity,它不继承Activity7大生命周期。

2023-07-07 14:21:52 7537

原创 bat脚本语法与实战

bat脚本就是将一系列DOS命令按照一定顺序排列而形成的集合,运行在windows命令行环境上。通过本文的学习,基本可以实现一些简单的脚本。

2023-05-24 10:20:12 12040

原创 带你了解linux cgroups

cgroups(Control Groups)是linux内核提供的一种机制,它可以根据需求把一系列的系统任务整合或分隔到资源等级不同的组内,从而为系统提供一个统一的框架。通过cgroups,我们可以很方便的限制某个容器可以使用的CPU、系统内存等资源。

2023-05-04 19:46:01 5586 1

原创 ANR分析流程

个CPU想象成一座大桥,桥上只有一根车道,所有车辆都必须从这根车道上通过,系统负荷为0,意味着大桥上一辆车也没有,系统负荷为0.5,意味着大桥一半的路段有车,系统负荷为1.0,意味着大桥的所有路段都有车,也就是说大桥已经"满"了,系统负荷为2.0,意味着车辆太多了,大桥已经被占满了(100%),后面等着上桥的车辆还有一倍。总体上比较容易掌握,还没有到深入具体的原理,比如ANR的dump原理,系统怎么判定ANR,ANR的无效trace怎么办等等比较深入的问题。

2023-03-20 11:32:20 6176

原创 Simpleperf详细使用

Simpleperf是一个强大的命令行工具,它包含在NDK中,可以帮助我们分析应用的CPU性能。Simpleperf可以帮助我们找到应用的热点,而热点往往与性能问题相关,这样我们就可以分析修复热点源。如果您更喜欢使用命令行,可以直接使用 Simpleperf。Simpleperf 是一个通用的命令行 CPU 性能剖析工具,包含在面向 Mac、Linux 和 Windows 的 NDK 中。

2023-03-18 14:14:07 9855

原创 Linux进程管理

Linux是类Unix系统,借鉴了Unix的设计并实现相关接口,但并非Unix。Linux系统中万物皆为文件,这种抽象方便操作数据或设备,只需一套统一的系统接口open, read, write, close即可完成对文件的操作Linux是单内核,支持动态加载内核模块,可在运行时根据需求动态加载和卸载部分内核代码;Linux内核支持可抢占;Linux内核创建进程,采用独特的fork()系统调用,创建进程较高效;

2023-03-17 10:43:17 3416

原创 Android ART dex2oat

dex2oat通过编译优化,可以提升用户日常的使用体验(包含安装速度、启动速度、应用使用过程中的流畅度等),是 Android Art Runtime 中的一个重要的模块, 本文我们一起来了解下 dex2oat 的功能以及常用的场景。

2023-02-28 14:50:48 7653

原创 Android Lmkd 低内存终止守护程序

所有应用进程都是从zygote孵化出来的,记录在AMS中mLruProcesses列表中,由AMS进行统一管理,AMS中会根据进程的状态更新进程对应的oom_adj值,这个值会通过socket传递给lmkd。lmdk根据内核的版本情况,或传递给kernel或自身处理低内存回收机制。为腾出更多的内存空间,在内存达到一定阀值时会触发清理oom_adj值高的进程。

2023-02-28 14:49:27 8606

原创 MAT-内存泄漏工具使用

一、MAT简介二、使用MAT基本流程三、MAT使用技巧四、Android(Java)中常见的容易引起内存泄露的案例

2023-01-07 15:34:47 9300 1

原创 14.JVM-垃圾回收器

GC分类与性能指标、垃圾收集器分类、不同的垃圾回收器概述、Serial回收器:串行回收、ParNew回收器:并行回收、Parallel回收器:吞吐量优先(Parallel Scavenge)、CMS回收器:低延迟、G1回收器:区域化分代式、垃圾回收器总结、GC日志分析、垃圾回收器的新发展

2022-09-30 14:25:32 3340

原创 13.JVM-垃圾回收相关概念

1. System.gc()的理解2. 内存溢出与内存泄露2.1. 内存溢出(OOM)2.2. 内存泄漏(Memory Leak)3. Stop The World4. 垃圾回收的并行与并发4.1. 并发(Concurrent)4.2. 并行(Parallel)4.3. 并发 vs 并行4.4. 垃圾回收的并行与并发5. 安全点与安全区域5.1. 安全点(Safepoint)5.2. 安全区域(Safe Region)6. 再谈引用6.1. 强引用6.2. 软引用6.3. 弱引用6.4. 虚引用

2022-09-30 09:57:40 3697

原创 12.JVM-垃圾回收相关算法

对象存活判断、引用计数算法、可达性分析算法、对象的finalization机制、MAT与JProfiler的GC Roots溯源、垃圾清除阶段、标记-清除算法、复制算法、标记-压缩/整理算法、标记-压缩和标记-清除的区别、分代收集算法、增量收集算法、分区算法

2022-09-28 18:13:16 3412 1

原创 11.JVM-垃圾回收概述

什么是垃圾、大厂面试题、为什么需要GC、早期垃圾回收、Java垃圾回收机制、Java垃圾回收机制

2022-09-28 17:01:38 3309

原创 10.JVM-StringTable/StringPool

String的基本特性、String的内存分配、String的基本操作、字符串拼接操作、intern()的使用、new String("ab")会创建几个对象、new String("a") + new String("b") 会创建几个对象、G1中的String去重操作

2022-09-28 16:54:26 3347

原创 9. JVM-方法区

栈、堆、方法区的交互关系、方法区、设置方法区大小与OOM、设置方法区大小、如何解决这些OOM、 方法区的内部结构、方法区(Method Area)存储什么、类型信息、 域(Field)信息、方法(Method)信息、non-final的类变量、全局常量: static final、常量池、 为什么需要常量池、常量池中有什么、运行时常量池、方法区的演进细节、永久代为什么要被元空间替代?、StringTable为什么要调整位置、 静态变量放在哪里、方法区的垃圾回收、方法区常见面试题

2022-09-15 14:33:02 3598 1

原创 8. JVM-堆

准备环境(下载各版本JDK)、堆的核心概述、设置堆内存大小与OOM、年轻代与老年代、图解对象分配过程、Minor GC、Major GC、Full GC、堆空间分代思想、内存分配策略、为对象分配内存:TLAB、堆是分配对象的唯一选择吗、逃逸分析

2022-09-13 10:55:01 4618

原创 7. JVM-本地方法栈

本地方法栈

2022-09-13 09:53:20 3179

原创 6. JVM-本地方法接口

1. 什么是本地方法2. 为什么使用Native Method?2.1. 与Java环境的交互2.2. 与操作系统的交互2.3. Sun's Java3. 现状

2022-09-13 09:50:41 3185

原创 5. JVM-虚拟机栈

虚拟机栈概述、栈的存储单位、局部变量表、操作数栈、栈顶缓存技术、动态链接、方法的调用、方法返回地址、栈的相关面试题

2022-09-10 17:47:43 3182

原创 4. JVM-程序计数器(PC寄存器)

JVM-程序计数器(PC寄存器)1. PC Register介绍2. 举例说明3. 两个常见问题3.1 使用PC寄存器存储字节码指令地址有什么用呢?3.2 PC寄存器为什么被设定为私有的?4. CPU时间片

2022-09-09 15:29:11 3044

原创 3. JVM-运行时数据区概述及线程

JVM-运行时数据区概述及线程

2022-09-09 15:15:12 3201

原创 2. JVM-类加载子系统

JVM-类加载子系统、类加载器与类的加载过程、类加载器分类、双亲委派机制、沙箱安全机制

2022-09-09 11:35:07 3336

原创 1.JVM与Java体系结构

Java以JVM简介、 多语言混合编程、Java发展的重大事件、虚拟机与Java虚拟机、Java代码执行流程、JVM的架构模式、JVM的生命周期、JVM的发展历程

2022-09-09 10:36:40 3283

原创 3. 无重复字符的最长子串(Java-滑动窗口)

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子

2022-07-12 09:38:02 3053

原创 leetcode:2. 两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9

2022-07-11 14:15:49 3014

原创 Linux常用命令汇总

学完这些基本命令基本能脱离window,在linux下进行一些基本的操作,满足日常的工作需要,比如:文件/文件夹的增、删、改、查,复制、剪切、粘贴等

2022-07-09 15:17:27 3708

原创 leetcode两数之和(求数组下标/求数组元素)

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。...

2022-07-09 11:05:28 430

原创 JZ78 把二叉树打印成多行

描述给定一个节点数为 n 二叉树,要求从上到下按层打印二叉树的 val 值,同一层结点从左至右输出,每一层输出一行,将输出的结果存放到一个二维数组中返回。例如:给定的二叉树是{1,2,3,#,#,4,5}该二叉树多行打印层序遍历的结果是[[1],[2,3],[4,5]]数据范围:二叉树的节点数 0≤n≤1000, 0≤val≤1000要求:空间复杂度 O(n),时间复杂度 O(n)输入描述:给定一个二叉树的根节点示例1输入:{1,2,3,

2022-05-22 14:49:43 2970

原创 序列化和反序列化有什么作用?

一、基本概念1、序列化和反序列化的定义: (1)Java序列化就是指把Java对象转换为字节序列的过程 Java反序列化就是指把字节序列恢复为Java对象的过程。 (2)序列化最重要的作用:在传递和保存对象时.保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中。 反序列化的最重要的作用:根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。 总结:核心作用就是对象状态的保存和重建。(整个过程核心点就是字...

2022-05-20 16:24:55 15541

原创 有哪些高并发设计技术方案?

一、负载均衡靠优化单台机器的内存、CPU、磁盘、网络带宽,使其发挥极致性能,已经不太现实。正所谓 "双拳难敌四手,恶虎还怕群狼",现在早已经是分布式时代,靠的是数量取胜,也称之为水平伸缩方案这么多的系统,如何流量调度,这里的第一道入口就是负载均衡负载均衡,它的职责是将网络请求 “均摊”到不同的机器上。避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况通过负载均衡,可以让每台服务器获取到适合自己处理能力的负载。在为高负载服务器分流的同时,还可以避免资源浪费,一举两得。常

2022-05-20 16:17:54 4703

空空如也

空空如也

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

TA关注的人

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