![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
读源码
川川~
剪水行舟
展开
-
反射有性能损失,损失在哪里?Class.getDeclaredMethod与Class.getMethod方法的区别是什么?
反射有性能损失,损失在哪里?反射的执行过程:ClassLoader加载一个类会把类信息加载到JVM中,反射方法时,会动态解析Class需要获取方法中的数据组成Method对象,反射执行的时候会通过Method对象执行需要执行的方法整个过程会产生额外的对象,并且在执行方法时(Method.invoke),每次执行都会检查方法的可见性,相当于用Method对象作为中间者来执行,这种方式比直接执行慢。反射是基于程序集和元数据的,在使用反射的时候,会搜索元数据,而元数据是基于字符串的,并且无法预编译,所以这原创 2020-06-23 16:30:14 · 893 阅读 · 0 评论 -
搞清Class.forName()和ClassLoader.loadClass()的区别
反射定义在运行状态中,对任意一个类,都能知道这个类中所有的属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性。反射的使用过程中要基于Class对象,那通过Class.forName()或者ClassLoader.loadClass()获取Class有什么区别呢?查看Class.forName()源码 @CallerSensitive public static Class<?> forName(String className) t原创 2020-06-22 17:37:13 · 2891 阅读 · 0 评论 -
为什么PathClassLoader的父加载器(parent)是BootClassLoader?
目录写在前面查看PathClassLoader的源码ActivityThread类的main方法总结写在前面双亲委托机制中,当加载一个Class的时候,如果当前ClassLoader有父加载器的时候用父类加载器加载。为什么我们写的应用程序使用PathClassLoader加载,又为什么PathClassLoader的父加载器(parent)是BootClassLoader?查看PathClassLoader的源码从上图可知,PathClassLoader构造函数传入了一个ClassLoader类型原创 2020-06-21 14:15:18 · 1100 阅读 · 0 评论 -
“码上理解”---RxJava 线程调度分析(一)切换子线程
目录RxJava简单介绍文章目的环境搭建和代码示例分析subscribeOn(Schedulers.io())Schedulers.io()subscribeOn()三级目录RxJava简单介绍RxJava现在几乎每个Android项目中都有它的身影,RxJava是使用了Rx(ReactiveX)函数库的语言库,除了RxJava,Rx几乎支持了全部的流行编程语言,例如:RxJS、Rx.NET等等。RxJava的优点和使用这篇文章不做详细介绍,今天关注一下框架内部原理:比如我们平时用RxJava的时候原创 2020-06-06 17:52:29 · 620 阅读 · 0 评论 -
“码上理解”--- 手撕RxJava订阅关系,事件发送和接收
目录RxJava简单介绍文章目的环境搭建和代码示例subscribe()方法Observable.create(new ObservableOnSubscribe< String>() {})1.以observer为参数创建了一个发射器2.调用observer的onSubscribe方法3.调用source的subscribe方法,并将发射器传递过去总结(以create操作符为例)RxJava简单介绍RxJava现在几乎每个Android项目中都有它的身影,RxJava是使用了Rx(Reac原创 2020-06-05 10:42:22 · 412 阅读 · 0 评论