- 博客(15)
- 资源 (1)
- 收藏
- 关注
原创 Lock实现原理
这个鬼AbstractQueuedSynchronizer(简称AQS),最后这个鬼,又是继承于AbstractOwnableSynchronizer(AOS),AOS主要是保存获取当前锁的线程对象,代码不多不再展开。FairSync 与 NonfairSync的区别在于,是不是保证获取锁的公平性,因为默认是NonfairSync,我们以这个为例了解其背后的原理。在这里,我会用尽可能少的代码,尽可能轻松的文字,尽可能多的图来看看lock的原理。看到这里的同学,是不是有种热泪盈眶的感觉,这尼玛,不就是。
2024-06-18 15:00:00
671
原创 synchronized详解
对象头的最后两位存储了锁的标志位,01是初始状态,未加锁,其对象头里存储的是对象本身的哈希码,随着锁级别的不同,对象头里会存储不同的内容。对象头:Java对象头一般占有2个机器码(在32位虚拟机中,1个机器码等于4字节,也就是32bit,在64位虚拟机中,1个机器码是8个字节,也就是64bit),但是如果对象是数组类型,则需要3个机器码,因为JVM虚拟机可以通过Java对象的元数据信息确定Java对象的大小,但是无法从数组的元数据来确认数组的大小,所以用一块来记录数组长度。
2024-06-18 11:45:00
1261
原创 java-----synchronized和Lock的区别
Lock接口的提出就是为了完善synchronized得不完美,变成了jdk层面实现的接口,可以人工灵活的对共享资源变量的操作和控制,无论读还是写的操作。synchronized是非中断锁(必须等待线程执行完成释放锁)、不可判断(判断是否有锁),非公平(等待的时间不一样)。Lock是可中断锁(可以手动中断)、可判断(判断是否有锁),公平(两者皆可)。c) 锁的释放是由虚拟机内部进行操作,不可进行人工操作干预,既有优点,又有缺点。Lock异常时不会自动释放锁,必须手动在finally中释放锁。
2024-06-18 09:15:00
383
原创 Android Automotive之Car API
这个Demo APP只有一个Activity,如下:@Override@Override。
2024-06-17 21:30:00
1040
原创 onSaveInstanceState()什么时候会被调用呢?
概括的讲,onSaveInstanceState 这个方法会在activity 将要被kill之前被调用以保存每个实例的状态,以保证在将来的某个时刻回来时可以恢复到原来的状态,但和activity 的生命周期方法onStop 和 onPause 不一样,与两者并没有绝对的先后调用顺序,或者说并非所有场景都会调用onSaveInstanceState 方法。那么onSaveInstanceState 方法何时会被调用呢,或者这么问,什么时候activity 会被系统kill 掉呢?
2024-06-17 18:45:00
479
原创 一次Binder通信最大可以传输多大的数据?
在前面的文章中,我通过匿名共享内存的方式解决Binder通信是无法传递大数据的问题,一次Binder通信最大可以传输是1MB-8KB(PS:8k是两个pagesize,一个pagesize是申请物理内存的最小单元)
2024-06-15 20:00:00
1940
原创 Android性能优化-GPU过度绘制及优化
过度绘制就是在绘制界面时,对同一个像素重复绘制了多次,但是用户能够看到的也只有最顶层绘制的内容,GPU过度绘制或多或少对性能有些影响。如何查看是否过度绘制:设置-开发者选项-调试GPU过度绘制-显示过度绘制区域(过度渲染等,不同机器可能不同)然后就可以看看你的应用是否存在过度绘制的情况了。那么如何判断界面是否存在过度绘制呢?开启后,点击我们的应用,可以看到各种颜色的区域,其中:最理想的是蓝色,一个像素只绘制一次,合格的页面绘制是白色、蓝色为主,绿色以上区域不能超过整个的三分之一,颜色越浅越好。
2024-06-14 20:00:00
767
原创 Perfetto D3
三、SurfaceFlinger讲解SurfaceFlinger 的主要功能是接收缓冲区,创建缓冲区,并将缓冲区发送到显示器。WindowManager 为 SurfaceFlinger 提供了缓冲区和窗口元数据,SurfaceFlinger 使用这些缓冲区和窗口元数据来组合具有显示的表面。详细定义可以看官网: SurfaceFlinger 的定义在Perfetto中,我们关注的重点就是上面这幅图对应的部分App 部分BufferQueue 部分SurfaceFlinger 部分。
2024-05-24 20:13:40
1000
1
原创 java学习引用类型之弱引用
一旦对象不再被强引用引用,弱引用就会失效并被垃圾回收器回收。弱引用对象的生命周期更短暂,当垃圾回收器进行垃圾回收时,如果一个对象只被弱引用引用,那么该对象会被回收。此外,弱引用对象对垃圾回收器来说是不可达的,因此不能仅依靠弱引用来保持对象的正常使用,还需要至少一个强引用来保持对象的可用状态。需要注意的是,由于弱引用对象的生命周期短暂,因此在程序中使用弱引用时要小心,确保适当地处理弱引用返回的。需要注意的是,由于弱引用的特性,我们需要在使用弱引用的过程中小心处理返回的。,解除了对该对象的强引用。
2024-05-09 22:00:00
435
1
原创 platform-tools下找不到systrace文件夹
谷歌官方在22年3月发布的33.0.1版本的platform-tools包中移除了systrace,而最后一个含有systrace的platform-tools版本是33.0.0,因此使用<=33.0.0版本的platform-tools即可。链接:https://www.jianshu.com/p/626eaebaa6a8。性能分析请改用perfetto。
2024-05-09 21:30:00
1012
2
原创 Perfetto D2
正常情况下,硬件加速是开启的,主线程的 draw 函数并没有真正的执行 drawCall ,而是把要 draw 的内容记录到 DIsplayList 里面,同步到 RenderThread 中,一旦同步完成,主线程就可以被释放出来做其他的事情,RenderThread 则继续进行渲染工作。主线程与渲染线程同步渲染数据,同步结束后,主线程结束一帧的绘制,可以继续处理下一个 Message(如果有的话,IdleHandler 如果不为空,这时候也会触发处理),或者进入 Sleep 状态等待下一个 Vsync。
2024-04-24 09:30:18
1013
4
原创 Perfetto 学习D1
一、Perfetto基础1、Perfetto介绍Perfetto 是一个生产级的开源堆栈,用于提高性能 仪器和痕量分析。与 Systrace 不同,它提供数据源超集,可以用 protobuf 编码的二进制流形式记录任意长度的跟踪记录。可以将Perfetto理解为systrace的升级版,用在更新的平台、新图表展示更多的信息。
2024-04-22 20:02:39
905
原创 android 内存回收(一)JVM垃圾回收机制和算法
首先做一次标记(在FROM区域),就找到那些不被根对象引用的对象标记为垃圾,然后在FROM区域这些存活的对象内存空间复制到TO区域中,复制的过程中就会完成碎片的整理,因此也不会产生碎片,等复制完成后,可以看到FROM区域全是垃圾,所以一下子给予清空,并且之后交换FROM和TO他两的位置,即原来的TO变成了FROM,原来的FROM变成了TO,所以TO总是空闲的一块儿。所谓的整理就是避免之前标记清除时的内存碎片的问题,他就会在清除的过程中,会把可用的对象向前给他移动,这样的话让内存更为紧凑,这就是整理的过程。
2024-04-18 10:34:24
827
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人