Stop and Copy:暂停程序的运行,将所有活的对象从当前的heap复制到另一个新的heap,然后清理。该方法效率低但是清理后的对象都是紧挨着的,因此分配新空间比较简单直接。该方法在程序稳定以后效率更低,因为垃圾此时产生的较少,在进行大量的复制则是浪费操作。如果没有大量的垃圾产生将会进入到另一种模式。
Mark and Sweep:当找到一个活的对象以后,给对象设置标记,当对于所有的活的对象标记完成以后,开始进行清理,没标记的对象的空间将会被释放。但是此时heap里的空间是不连续的。如果需要得到连续空间则需要对空间进行整理。
Thinking in Java
Note: Review this book and try to find something that didn't understand correctly. Number of times now: 3rd
1. 对象导论
2. Everything is Object
2. Operator
5. Constructor and Clean
6. Access Modifier
7. 复用
7. Polymorphism
8. Interface
8. Inner Class
9. Collection
peek
方法返回第一个元素,但不会移除。ConcurrentHashMap/CopyonWriteArrayList/CopyonWriteArraySet
或者使用Collections.synchronizedList/Map/Set
方法。10. String
11. Type Information
12. Generics
Array.newInstance()
。<T extends SomeClass & SomeInterface>
。List<? extends Fruit> fList = new ArrayList<Apple>()
时,任何类型的object都不能被添加到这个容器中,因为该容器的上界为Fruit类型无法确保插入非Fruit类型会对AppleList造成影响,编译器会对插入的任何类型进行限制。List<? super Apple> aList = new ArrayList<Apple>()
时,此时编译器允许插入任何的Apple类型或者其子类型,因为此时Apple是下界,因此可以保证插入的值总是Apple或者Apple的子类型。13. Arrays
System.arraycopy()
来复制数组比for循环复制要快很多。14. More in Collections
15. Thread
Future<T>
的泛型对象,在使用该对象之前可以使用isDone()方法查看线程是否完成。直接调用get()会阻塞在该方法直到线程执行完成返回。