个人博客不仅是个人写作的地方,更是一个展示自己个性、扩大个人影响力的产品。

之前我写过一篇《如何在一天之内搭建以你自己名字为域名且具备cool属性的个人博客》帮助不少人从零开始搭建了自己的博客。而今天想做的是把博客当成个人产品来进行迭代开发,以更好地展示个人形象。

阅读全文 »

垃圾回收机制是 Java 非常重要的特性之一,也是面试题的常客。它让开发者无需关注空间的创建和释放,而是以守护进程的形式在后台自动回收垃圾。这样做不仅提高了开发效率,更改善了内存的使用状况。

今天本文来对垃圾回收机制进行讲解,主要涉及下面几个问题:

  • 什么是堆内存?
  • 什么是垃圾?
  • 有哪些方法回收这些垃圾?
  • 什么是分代回收机制?
阅读全文 »

OOM 是 Android 开发中常见的问题,而内存泄漏往往是罪魁祸首。

为了简单方便的检测内存泄漏,Square 开源了 LeakCanary,它可以实时监测 Activity 是否发生了泄漏,一旦发现就会自动弹出提示及相关的泄漏信息供分析。

本文的目的是试图通过分析 LeakCanary 源码来探讨它的 Activity 泄漏检测机制。

阅读全文 »

类加载机制是 Java 语言的一大亮点,使得 Java 类可以被动态加载到 Java 虚拟机中。

这次我们抛开术语和概念,从例子入手,由浅入深地讲解 Java 的类加载机制。

本文涉及知识点:双亲委托机制、BootstrapClassLoader、ExtClassLoader、AppClassLoader、自定义网络类加载器等

文章涉及代码:
https://github.com/wingjay/HelloJava/blob/master/common/src/classloader/HelloClassLoader.java

阅读全文 »

注解这种语法本身很有意思,当前很多流行库如 DaggerButterKnife等都是基于注解这种语法。

熟练使用注解,既能让你的代码变得简洁易读,动态运行时执行你想要的操作,还能帮你生成代码,省去重复代码写作。

本文涉及知识点:注解的生命周期,代码编辑时注解,编译时注解代码生成,运行时注解动态反射。

阅读全文 »

关于Java反射机制的文章很多,这次换种方式来讲解反射的作用。

本文涉及到的知识点:class.getDeclaredXXX()XXX.getModifiers()method.getReturnType()method.getParameterTypes()method.isAnnotationPresent(XXX.class)Modifier.isStatic(method.getModifiers())constructor.newInstance(XX)

本文涉及代码:
https://github.com/wingjay/HelloJava/blob/master/data-structure/src/reflection/ForArticle.java

阅读全文 »

正常情况下,每个子线程完成各自的任务就可以结束了。不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了。

本文涉及到的知识点:thread.join(), object.wait(), object.notify(), CountdownLatch, CyclicBarrier, FutureTask, Callable 等。

本文涉及代码:
https://github.com/wingjay/HelloJava/blob/master/multi-thread/src/ForArticle.java

阅读全文 »

2016年自己的博客产出并不多,主要原因是自己希望在博客中只分享技术干货,而非泛泛而谈,所以一直克制自己写文的想法。不过这里其实存在一个漏洞,那就是平常的开发过程中并没有那么多的难题要解决,也就导致工作中并不能提供那么多干货素材。因此,我才来重新考虑自己2017年的博客计划和方向。

阅读全文 »