这段时间看了看工作室的工具库的下载组件,发现其存在一些问题: 下载核心逻辑有 bug,在暂停下载或下载失败等情况时有概率无法顺利完成下载。 虽然原来的设计是采用多线程断点续传的设计,但打了一下日志发现其实下载任务都是在同...
之前学习容器的时候缺少了一些笔记,现在补一下笔记顺便重新理解一遍这些容器的源码。 HashMap 是我们在 Java 开发中经常接触到的容器,今天就让我们从它的源码入手来了解它的实现原理。本文为上部分,不包含其有关红黑树的操作,下一...
JVM 与类加载 Java 语言中,类型的加载、连接和初始化都是在运行期进行的。这样会导致一些性能的开销,但同时使得 Java 成为了一种可以动态扩展的语言。比如编写一个面向接口的程序,可以到运行时再对其具体的实现类进行指定。Android...
JVM 与 Class 提到 Class 文件我们先来讨论一下 Java 的跨平台性。Java 是一种『一次编写,到处运行』的语言,也就是说它具有跨平台性。这与 C/C++ 『一次编写,处处编译』的跨平台性不同,Java 的跨平台性是依赖于 Java 虚拟机(以下...
由于自己之前常用到的很多开源框架比如GreenDao、EventBus、ButterKnife、ARouter等都用到了自定义的注解,感觉自己应该花时间去学一下怎么在自己写的库中用到注解了,因此写下了这样一篇文章。 什么是注解 首先,要明白什么是注解。 ...
Java中的ClassLoader 任何的Java程序都是由若干的.class文件组成的完整Java程序。程序运行时需要将.class文件加载到JVM中使用。而负责加载.class文件的就是ClassLoader机制。 ClassLoader的作用简单来说就是加载.class文件,提供给程...
众所周知,Java是有四种引用的,分别是:强引用、弱引用、软引用、虚引用。 为了学习这些引用之间的区别和联系,写下这篇博客。 参考自此博客 强引用 我们平时用到的最普遍的引用,就是强引用。如果一个对象具有强引用,GC就不会回收...
Java泛型 Java的泛型是JDK5带来的新特性,它有如下的优点: 适用于多种数据类型执行相同的代码 泛型中的类型在使用时指定 泛型归根到底就是“模版” 但是,为了做到向下兼容,Java中的泛型仅仅是一个语法糖,并不是C++那样的真泛型。 ...
JVM是Java Virtual Machine的简称,也就是Java虚拟机。 什么是虚拟机? 虚拟机指通过软件模拟的具有硬件系统功能的,运行在隔离环境中的完整计算机系统。 JVM与其他虚拟机的区别 VMWare、Virtual Box都是通过软件模拟物理CPU的...
实现多线程的方法 查看Thread类的源码,可以发现它实现了Runnable接口,然后在自己的run方法中调用了Runnable的run方法。这里其实就是静态代理这一设计模式,Thread是代理角色,而Runnable则是真实角色。在Thread的start方法中,会为...