10 2021 档案

摘要:一、代理模式是什么? 代理是指为其它对象提供的一种代理,用以对这个对象访问的控制。通俗说就是代替别人去做我们想做的事件。 二、静态代理 抽象类: 1 public abstract class BaseObject { 2 3 protected abstract void operation(); 阅读全文
posted @ 2021-10-30 16:58 naray 阅读(244) 评论(0) 推荐(0)
摘要:一、反射机制定义 Java反射机制就是在程序运行状态中,对于任意一个类,都能知道这个类的所有的属性和方法;对于任意一个对象,都能任意的调用对象中属性和方法;这种动态获取类信息以及动态调用对象中任意的属性和方法的功能就是Java的反射机制。 在Java中使用ClassLoader类动态装载Class文 阅读全文
posted @ 2021-10-30 16:28 naray 阅读(263) 评论(0) 推荐(0)
摘要:一、锁优化技术 JDK5之后,在多线程并发上实现了很多锁优化技术,分别是自适应自旋锁、锁消除、锁膨胀、轻量级锁、偏向锁。 二、自适应的自旋锁 自旋锁是其他线程获取持有锁的线程的锁时,让尝试获取锁的线程“忙循环”一会,等待持有锁的线程释放锁。如果,在忙循环结束后,线程依然获取不到锁,线程进入堵塞等待。 阅读全文
posted @ 2021-10-28 18:02 naray 阅读(247) 评论(0) 推荐(0)
摘要:一、简介 synchronized是互斥同步的同步机制,互斥同步又称堵塞同步。synchronized在多线程环境下,其中一条线程获得锁,其他线程需要堵塞等待持有锁的线程释放锁。 synchronized是块结构的同步语法,synchronized需要指定对象参数,对参数的引用就是reference 阅读全文
posted @ 2021-10-27 17:31 naray 阅读(347) 评论(0) 推荐(0)
摘要:一、什么是线程安全的 线程安全就是多线程同时访问一个对象时,需要保证这个对象,在多线程操作下获得的结果是正确的,或者说这个对象在多线程同时访问下,内部状态是正确的。 二、Java中线程安全 Java中多线程操作一个共享对象才会有线程安全问题。 1. 不可变 不可变的对象一定是线程安全的,不管是对象的 阅读全文
posted @ 2021-10-26 21:56 naray 阅读(79) 评论(0) 推荐(0)
摘要:一、面向过程 面向过程是把数据和过程独立分开思考,数据是客体,过程是程序处理数据的过程。 二、面向对象 面向对象是从现实角度出发,将数据和行为作为对象的一部分。 面向对象的特性是:封装、继承、多态。 阅读全文
posted @ 2021-10-23 18:04 naray 阅读(479) 评论(0) 推荐(0)
摘要:一、线程调度 线程调度就是操作系统为线程分配处理器使用权的过程。 二、线程调度方式 1. 协同式(Cooperative threads-scheduling) 协同式是指线程的切换是线程自己控制,也就是说线程执行完成后主动通知切换到另一条线程执行。 协同式调度的好处: 实现简单,线程的切换是线程可 阅读全文
posted @ 2021-10-23 17:04 naray 阅读(387) 评论(0) 推荐(0)
摘要:一、线程是什么 线程是比进程更轻量的调度单位,线程可以共享进程资源(内存地址、文件I/O等),又可以独自调度。 Java中,线程是处理器执行调度的最基本单位。 主流操作系统都提供了线程实现,Java语言提供了不同操作系统平台和不同硬件下对线程的同一处理。 二、线程分类 1. 内核线程 内核线程(Ke 阅读全文
posted @ 2021-10-23 16:24 naray 阅读(167) 评论(0) 推荐(0)
摘要:一、原子性 原子性是指一个操作或者多个操作全部执行并且不会被打断,要么全部不执行。Java内存模型保证read、load、use、assign、store、write六种操作是原子操作,也可以认为Java的基本数据类型也具备原子性(double和float除外,这种除外几乎不会发生,开发中可以不用考 阅读全文
posted @ 2021-10-23 14:04 naray 阅读(328) 评论(0) 推荐(0)
摘要:volatile关键字的作用 volatile关键字是Java虚拟机提供的最轻量级的同步机制,volatile具有可见性和有序性,但是,不具有原子性特性。 Java中提供的操作运算符不具有原子性。 看下面例子: public class Main { public static volatile i 阅读全文
posted @ 2021-10-23 11:24 naray 阅读(111) 评论(0) 推荐(0)
摘要:一、简介 执行引擎是Java虚拟机核心组成部分,Java虚拟机是一个相对物理机的概念。物理机和Java虚拟机都具有执行引擎,物理机的执行引擎是作用在处理器、寄存器、内存和操作系统之上的。而Java虚拟机是由软件实现的,不受物理条件限制。 二、运行时栈帧结构 方法是Java虚拟机最基本的执行单元,栈帧 阅读全文
posted @ 2021-10-20 23:22 naray 阅读(152) 评论(0) 推荐(0)
摘要:深入理解Java虚拟机:JVM高级特性与最佳实践学习笔记 一、强引用、软引用、弱引用、虚引用 二、Java 对象是否GC回收 三、JVM可达性分析算法 四、Java虚拟机之类文件结构 五、Java虚拟机类加载器机制 六、Java虚拟机执行引擎 七、Java 泛型 八、Java volatile关键字 阅读全文
posted @ 2021-10-20 14:52 naray 阅读(62) 评论(0) 推荐(0)
摘要:一、简介 众所周知,Java虚拟机最大的特性就是跨平台,但是,Java虚拟机还有另一个重要的特性,就是语言无关性,Java虚拟机支持其它语言通过编译器编译成.class字节码文件,交付给虚拟机运行。 大家都知道Java语言通过javac编译器将Java编译成.class字节码文件,其它语言也是一样的 阅读全文
posted @ 2021-10-18 22:58 naray 阅读(107) 评论(0) 推荐(0)
摘要:一、可达性分析算法 “GC Roots”根对象集作为起始点集合,从这些节点开始,根据引用关系向下搜索,搜索过程路径称为“引用链”。如果,某对象到GC Root没有引用链相关联,那么,就是GC Root到对象不可达,则证明这个对象不可能再被使用。 上图所示,Object 1与GC Root可达,而Ob 阅读全文
posted @ 2021-10-18 17:16 naray 阅读(819) 评论(0) 推荐(0)
摘要:一、对象何时回收 Java中,使用可达性分析算法标识对象是否回收,即使对象通过可达分析算法被标记为不可达对象,对象不一定被被回收,对象需要经过两次标记才会被回收。在第一次标记后对象会被放入“即将回收”的集合中。对象在随后的判定是否有必要执行finalize()函数后,才会被进行第二次标记,这样,对象 阅读全文
posted @ 2021-10-18 16:29 naray 阅读(362) 评论(0) 推荐(0)
摘要:概述 在Java 1.2版本后,将引用概念进行扩充,分别为:强引用、软引用、弱引用、虚引用,引用强度由强到弱。 一、强引用 在程序中最常用的引用方式,如:Object obj = new Object()这种引用关联,强引用只要引用关系存在,GC在回收时就不会回收引用的对象。 二、软引用 软引用是描 阅读全文
posted @ 2021-10-18 11:45 naray 阅读(459) 评论(0) 推荐(0)
摘要:1. 什么是泛型 泛型指的是定义类、接口、方法的时候不局限于某种特定类型,而是让类、接口、方法的调用者决定使用哪种类型。 泛型的本质是参数泛型化或者参数多态的应用,可以将泛型参数(操作的数据类型)作为方法签名中的一种特殊类型。泛型能够应用在类、接口、方法,就是泛型类、泛型接口、泛型方法。 针对泛型化 阅读全文
posted @ 2021-10-15 10:43 naray 阅读(99) 评论(0) 推荐(0)
摘要:一、生命周期 创建阶段(Created):创建Java对象 为对象分配内存空间。 构造对象。 从超类到子类对static成员进程初始化,类的static成员的初始化在ClassLoader加载该类时进行。 超类成员变量按顺序初始化化,递归调用超类的构造函数。 子类成员变量按顺序初始化,一旦对象被创建 阅读全文
posted @ 2021-10-12 19:18 naray 阅读(2681) 评论(0) 推荐(0)
摘要:一、new操作符 new操作符用来实例化对象并返回该对象引用。 Java中new创建对象分为三步: 声明对象引用。 实例化对象:Java中实例化对象就是创建一个Java对象,即分配内存并返回指向该内存的引用。 初始化对象实例:调用构造函数,为类的实例对象赋值。 Java对象内存布局: 对象头(Obj 阅读全文
posted @ 2021-10-12 18:49 naray 阅读(764) 评论(0) 推荐(0)
摘要:一、idleHandler是做什么的 /** * Callback interface for discovering when a thread is going to block * waiting for more messages. */ public static interface Id 阅读全文
posted @ 2021-10-07 19:24 naray 阅读(92) 评论(0) 推荐(0)
摘要:一、简介 Perffto工具是Android 10及以上版本提供的的跟踪工具,与Systrace工具不同,Perffto是平台级工具,提供数据的超集。 阅读全文
posted @ 2021-10-05 21:59 naray 阅读(608) 评论(0) 推荐(0)
摘要:一、Systrace的作用 系统跟踪工具,记录短时间内的设备活动。Systrace是Android 4.1版本及以上版本提供的性能数据采集和分析工具。 Systrace帮助开发者收集Android子系统(如:SurfaceFlinger、WindowManagerService等Frameworks 阅读全文
posted @ 2021-10-05 21:56 naray 阅读(246) 评论(0) 推荐(0)
摘要:一、简介 TraceView是Android自带的工具,用于分析函数调用过程,可以对Android应用层和Frameworks层代码进行性能分析。在新版本Android Studio弃用了此工具,使用Profile集成工具分析。 TraceView是图形化性能分析工具,工具输出*.trace文件。如 阅读全文
posted @ 2021-10-05 21:54 naray 阅读(1048) 评论(0) 推荐(0)
摘要:一、测量方式 1. 使用AM服务启动App的第一个界面并输出应用启动时间。 通过adb命令执行am命令启动App并出界应用启动时间。 命令格式: adb shell am start -W packagename/packagename.首页Activity 示例: adb shell am sta 阅读全文
posted @ 2021-10-05 21:41 naray 阅读(1393) 评论(0) 推荐(0)
摘要:一、App启动分类 1. App启动时间 App启动时间(App startup time)是官方给出的指标标准。 2. 启动分类: 冷启动 热启动 温启动 二、各分类启动过程 冷启动 桌面图标被点击触发应用启动,从AMS收到启动应用事件,通知Zygote启动应用进程,到应用生命周期执行,到Acit 阅读全文
posted @ 2021-10-05 20:51 naray 阅读(316) 评论(0) 推荐(0)
摘要:一、子线程创建Handler的前题条件是什么 子线程创建Handler必须先创建子线程Looper。 假如,在子线程不先创建Looper会怎样? Thread { _handler = Handler() }.start() 结果: E/AndroidRuntime: FATAL EXCEPTION 阅读全文
posted @ 2021-10-04 21:58 naray 阅读(1011) 评论(0) 推荐(0)
摘要:一、Binder是什么? Binder是Android提供的进程IPC通信的工具。Binder通信使用的数据结构是Parcel。 二、Binder的优点? 在Linux中进程IPC通信方式有很多,其中最常用的管道、Socket、共享内存、信号等。为什么Android还要设计一套新的IPC通信机制。 阅读全文
posted @ 2021-10-04 20:08 naray 阅读(90) 评论(0) 推荐(0)
摘要:一、Parcel是什么 Container for a message (data and object references) that can be sent through an IBinder. A Parcel can contain both flattened data that wi 阅读全文
posted @ 2021-10-04 16:22 naray 阅读(888) 评论(0) 推荐(0)
摘要:一、Android中常用的IPC通信 管道 Socket 共享内存 信号 二、管道 管道是一种IPC通信方式,分为有名管道和无名管道,无论是有名管道还是无名管道其原理都是在内核开辟一块缓存空间,这段缓存空间的操作是通过文件读写方式进行的。 管道为分半双工和全双工: 半双工:半双工管道是单向通信,进程 阅读全文
posted @ 2021-10-04 15:49 naray 阅读(439) 评论(0) 推荐(0)
摘要:一、Surface的Buffer是从哪里来的? 源码:frameworks/base/core/java/android/view/ViewRootImpl.java View触发绘制是通过requestLayout()函数或者setLayoutParms()函数: performTravsersa 阅读全文
posted @ 2021-10-03 01:55 naray 阅读(1685) 评论(0) 推荐(1)
摘要:一、Surface是什么 Handle onto a raw buffer that is being managed by the screen compositor. 大概意思是处理由屏幕合成器管理的原理缓存区。 二、Surface实现原理 在Surface类里有一个Canvas对象,在Canv 阅读全文
posted @ 2021-10-02 22:59 naray 阅读(1566) 评论(0) 推荐(0)