3 六号表哥

尚未进行身份认证

暂无相关描述

等级
TA的排名 5w+

Java 数据结构—阻塞队列学习笔记

文章目录特点阻塞你是怎么理解的呢?简单理解如下如何实现阻塞的呢?阻塞队列主要有三种实现类BlockingQueue基础APISynchrousBlockingQueueArrayBlokingQueue阻塞队列在线程池的应用execute函数的工作原理入队出队项目地址特点阻塞队列BlockingQueue是线程安全,所有的操作都加了锁。阻塞你是怎么理解的呢?队列主要的操作不外乎就...

2019-08-18 00:52:25

序列化机制——Serializable工作原理

序列化与反序列化的概念从广义上讲,数据序列化就是将数据结构或者是对象转换成我们可以存储或者传输的数据格式的一个过程,在序列化的过程中,数据结构或者对象将其状态信息写入到临时或者持久性的存储区中,而在对应的反序列化过程中,则可以说是生成的数据被还原成数据结构或对象的过程。在对象序列化和反序列化角度来看,Java提供了Serializable接口,而Android提供特有的Parcel...

2019-06-02 21:08:15

lancet 库的工作原理

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

2019-04-24 20:26:11

Android 虚拟机—Dalvik&ART

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

2019-04-21 15:50:14

Java 注解工作原理

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

2019-04-21 15:47:25

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

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

2019-04-20 23:44:18

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

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

2019-04-16 19:20:36

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

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

2019-04-16 00:15:46

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

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

2019-04-15 12:01:32

Java 并发编程—volatile 关键字

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

2019-04-14 18:39:39

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

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

2019-04-14 03:23:59

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

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

2019-04-12 15:53:41

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

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

2019-04-10 21:30:26

劣实基础–Java 并发编程基础知识

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

2019-04-07 15:29:01

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

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

2019-04-04 00:59:37

劣实基础–Java 反射机制

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

2019-04-03 17:39:13

劣实基础–Java 泛型机制

为什么需要泛型?先来看一段代码,这段代码是用来计算两个数之和,可以看到每次新增一种数据类型,那么就要新增一个方法,这显然是不好的解决方法。publicclassNoGeneric{publicintaddInt(inta,intb){returna+b;}publicdoubleaddDouble(dou...

2019-04-01 19:09:15

Java 并发编程—CAS 机制

CAS机制在介绍CAS机制之前,来看下面这段代码:它的执行结果是会是200吗?publicclassNoAtomicPersonCountimplementsRunnable{privateintpersonCount=0;publicstaticvoidmain(String[]args){NoAtomicPer...

2019-03-31 19:35:25

Java 虚拟机–内存模型

一、JVM内存模型.java源文件->javac工具编译->.class文件->JVM解析->010101机器码->跑在不同的操作系统上。基于上面的流程可以看出,java是一个跨平台语言。本节来分析Java对象如何进行分配和回收。JVM运行时数据区主要由线程私有区域和线程共享区域组成。线程私有区域:虚拟机栈...

2019-03-28 00:04:11

「性能优化2.4」 AsyncLayoutInflater实现异步加载布局

「性能优化1.0」启动分类及启动时间的测量「性能优化1.1」计算方法的执行时间「性能优化1.2」异步优化「性能优化1.3」延迟加载方案「性能优化2.0」布局加载原理「性能优化2.1」LayoutInflaterHook控件加载耗时「性能优化2.2」获取布局的加载时间「性能优化2.3」Choreographer检测丢帧「性能优化2.4」AsyncLayoutInflater实现异...

2019-03-21 23:22:31

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 脉脉勋章
    脉脉勋章
    绑定脉脉第三方账户获取
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。