自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

六号表哥

你应该了解真相,真相会使你自由。

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

原创 lancet 库的工作原理

Lancetlancet 是一个轻量级Android AOP框架。dependencies{ classpath 'me.ele:lancet-plugin:1.0.4'}apply plugin: 'me.ele.lancet'dependencies { provided 'me.ele:lancet-base:1.0.4'}下面使用 Lancet 来 ho...

2019-04-24 20:26:11 4917 1

原创 Android 虚拟机—Dalvik&ART

Dalvik 虚拟机与ART 虚拟机Dalvik是什么?Dalvik 是实现了 JVM 规范的虚拟机,内部默认使用的 CMS 垃圾回收器。但是与 JVM 不一样的是 JMM 运行的 .class 字节码,而 Dalvik 运行的 dex 文件。dex 全称 Dalvik Executable Format ,是一种专门为 Dalvik 设计的一种压缩格式,dex 是由很多 class 压缩后...

2019-04-21 15:50:14 273

原创 Java 注解工作原理

文章目录注解的本质定义和使用注解定义注解类应用注解获取被注解的信息验证注解的工作就是通过动态代理实现的。断点验证我们的结论将动态代理类写入到磁盘总结参考注解的本质这里先得出结论,注解的工作就是通过动态代理实现的。定义和使用注解下面来定义一个最简单的注解,并通过这个注解引出注解的本质。下面编写的类并没有实际意义,只是为了演示而已。定义注解类@Retention(Retentio...

2019-04-21 15:47:25 695

原创 「性能优化4.0」运行期间检测不合理的图片

Bitmap 内存模型在 API10 之前,Bitmap 对象本身存在 Dalvik Heap 中,像素是存在 native 中,这样像素并不会占用 Heap 空间,也就不会造成 Heap 内存溢出。但是缺点是Bitmap 对象被回收了,但是 native 层像素回收的时机可能跟 Heap 中 Bitmap 的对象回收时机不对应。API10之后,像素也放在 Dalvik Heap...

2019-04-20 23:44:18 603

原创 「性能优化3.1」Android多线程优化

文章目录多线程优化给线程起名字目的是什么?什么时候设置?检测关键异步任务的耗时情况避免直接创建Thread直接创建Thread的弊端锁定线程的创建者设置线程优先级参考项目地址多线程优化给线程起名字目的是什么?在出 bug 时方便定位到是哪个线程出问题。在 Android SDk 提供的类中,也是有给线程起名字的。IntentService//IntentService.ja...

2019-04-16 19:20:36 385

原创 「性能优化3.0」Android线程调度&异步方式汇总

文章目录线程调度与线程调度模型nice valuecgroup(control group)CPU 密集型与 IO 密集型多线程优化的注意点Android 的异步方式参考线程调度与线程调度模型任意时刻,只有一个线程占用 CPU,处于运行状态。而多线程并发执行就是轮流获取 CPU 执行权。分时调用模型轮流获取 CPU 执行权,均分 CPU 执行时间。抢占式调度模型优先级...

2019-04-16 00:15:46 651

原创 Java 虚拟机内存模型—线程私有

文章目录JVM 内存模型线程私有区域程序计数器虚拟机栈栈帧的组成StackOverflowError本地方法栈逃逸分析优化线程私有部分的回收问题参考JVM 内存模型.java 源文件 -> javac 工具编译 -> .class 文件 -> JVM 解析 -> 010101 机器码 -跑在不同的操作系统上。基于上面的流程可以看出,java 是一个跨平台语言。...

2019-04-15 12:01:32 1201

原创 Java 并发编程—volatile 关键字

volatile 关键字volatile 作用volatie 用于修饰变量,它有两个作用。它可以保证变量在多线程之间是可见的,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。禁止指令重排序。volatile 保证变量的可见性先来看一下 volatile 保证变量在线程之间的可见性问题,在下面这段代码中,isContinuePrint共享变量,printThread...

2019-04-14 18:39:39 123

原创 Java 并发编程—线程间的共享和协作(二)

线程间的共享和协作文章目录线程间的共享和协作Lock 显示锁Lock APIReentrantLock什么是可重入锁?ReentrantLock实现公平锁和非公平锁读写锁ReentrantReadWritLockCondition接口对比 Object 的 wait 和 notify使用 Lock 配合 Condition 实现等待通知机制总结参考Lock 显示锁在 Java 中,一般情况...

2019-04-14 03:23:59 356

原创 Java 并发编程—线程间的共享和协作(一)

线程间的共享和协作线程间的共享JVM 会为每一个线程独立分配虚拟机栈空间,本地方法栈空间以及程序计数器,而对于共享内存中的变量,是对每一个线程而言是共享的,因此多线程并发访问共享内存中的变量时就会出现线程安全问题。具体可以参考JVM 内存模型这篇博客。synchronized 内置锁在前面提到共享资源在多个线程并发访问时会出现线程安全问题,而解决线程安全问题就是要解决以下两个问题,一是要...

2019-04-12 15:53:41 467

原创 Java类加载器-动态加载外部dex

Android 类加载Android 只能加载识别 dex 文件,因此需要将 .java 文件编译 .class 文件,然后将 .class 优化为 .dex 文件。过程:.java -> .class -> .dex下面来练习如何去加载一个 dex 文件,并调用 dex 中的方法。获取需要动态加载的 dex 文件编写 DynamicClass.java 类public...

2019-04-10 21:30:26 1239 1

原创 Java 并发编程基础知识

CPU 核心线程数和线程数的关系目前的 CPU 有双核,四核,八核,一般情况下,它和线程数是1:1的对应关系,也就是四核 CPU 一般就能并行执行 4 个线程。但 Intel 引入超线程技术后,使核心数与线程数形成1:2的关系,也就是我们常说的 4核8线程线程调度任意时刻,只有一个线程占用 CPU,处于运行状态。而多线程并发执行就是轮流获取 CPU 执行权。线程调度模型分时调用...

2019-04-07 15:29:01 305

原创 劣实基础–Java 动态代理机制

代理模式代理在我们日常生活中经常出现,例如我们去租房,为了方便我们会去找中介,让他们帮我去找房子,事后我们给他一定比例的中介费就可以了,这种好处就不需要我们自己去奔波租房。在程序中也有代理这种思想,当我们想在一个已有的类的方法被调用前和调用后都输出一段日志信息,而我们目前无法修改类内部的结构,但是我们可以生成一个代理对象,通过代理对象去调用目标对象的这些方法,因为目标方法会被代理对象所调用,...

2019-04-04 00:59:37 866

原创 劣实基础–Java 反射机制

反射与动态代理反射一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的。于是我们直接对这个类进行实例化,之后使用这个类对象进行操作。反射则是一开始并不知道我要初始化的类对象是什么,自然也无法使用 new 关键字来创建对象了。这时候,我们使用 JDK 提供的反射 API 进行反射调用。反射就是在运行时才知道要操作的类是什么,并且可以在运行时获取类的完整构造,并调用对应的方法或者属性。...

2019-04-03 17:39:13 1251 1

原创 Java 泛型机制

为什么需要泛型?先来看一段代码,这段代码是用来计算两个数之和,可以看到每次新增一种数据类型,那么就要新增一个方法,这显然是不好的解决方法。public class NoGeneric { public int addInt(int a, int b) { return a + b; } public double addDouble(dou...

2019-04-01 19:09:15 1043

EventBusDemo源码

EventBusDemo源码

2016-05-27

空空如也

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

TA关注的人

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