FinalReference 源码解读

缘起

【2】中我们已经了解到了FinalReference这种引用类型. 我们在【2】中简要分析了一下该类的子类Finalizer和Object的finalize方法之间的关系, 并得出了尽量不要覆写finalize方法的结论,因为如果你的finalize方法执行时间过长的话,由于Finalizer作为Reference的子类,referent属性迟迟得不到释放(未变成null,强引用一直存在),导致不能被后续回收,可能最终导致OOM. 本文对FinalReference特别是它的子类——Finalizer进行更加细致的分析——分析它和垃圾回收,和finalize方法之间的关系. 本文参考了【1】

Read More

阿里经典面试题——小朋友最短时间过桥问题——动态规划

缘起

阿里笔试曾经考过下面的题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
题目:在一个夜黑风高的晚上,有n(n <= 50)个小朋友在桥的这边,现在他们需要过桥,但是由于桥很窄,每次只允许不大于两人通过,他们只有一个手电筒,所以每次过桥的两个人需要把手电筒带回来,i号小朋友过桥的时间为T[i],两个人过桥的总时间为二者中时间长者。问所有小朋友过桥的总时间最短是多少。

输入:

两行数据:

第一行为小朋友个数n

第二行有n个数,用空格隔开,分别是每个小朋友过桥的时间。

输出:

一行数据:所有小朋友过桥花费的最少时间.

样例:

输入

4
1 2 5 10

输出

17

Read More

JDK7 中的String的内存结构

缘起

【1】中我们详述了String的不变性问题. 再次强调,String的不变性和String的final修饰符以及内部的value属性的final修饰符无关,只与String的所有方法”小心翼翼不发布value”有关.

现在,我们关心的是另一个问题——String在内存中的结构是长什么样子的? 本文结论对于JDK8中亦成立. 本文主要借鉴的是【3】

Read More