你的位置:首页 > Java教程

[Java教程]Java知识点总结(不定时更新)


1、基于分代的垃圾收集算法

  设计思路:把对象按照寿命长短来分组,分为年轻代和年老代,新创建的对象被分在年轻代,如果对象经过几次回收后仍然存活,那么再把这个对象划分到年老代。年老代的收集频率不像年轻代那么频繁,这样就减少了每次垃圾回收时所要扫描的对象的数量,从而提高了垃圾回收效率。

  把堆划分为若干个子堆,每个堆对应一个年龄代:

  JVM将整个堆划分为Young区、Old区和Perm区,存放不同年龄的对象,这个三个区存放的对象有如下区别:

  Young区:又分为Eden区和两个Survivor区,其中所有新创建的对象都在Eden区,当Eden区满后会触发minor GC将Eden区仍然存活的对象复制到其中一个Survivor区中,另外一个Survivor区中的存活对象也复制到这个Survivor中,以保证始终有一个Survivor区是空的。

  Old区:存放的是Young区的Survivor满后触发的minor GC后仍然存活的对象,当Eden区满后会将对象存放到Survivor区中,如果Survivor区仍然存不下这些对象,GC收集器会将这些对象直接存到Old区,如果在Survivor区中的对象足够老,也直接存放到Old区,如果Old区也满了,将会触发Full GC,回收整个堆内存。

  Perm区:存放的主要是类的Class对象,Perm区的垃圾回收也是由Full GC触发的。

2、JVM参数配置

  

  参考:http://www.cnblogs.com/likehua/p/3369823.html,http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html

  

  最小内存值就是-Xms的值,即10240m

  -Xmn 5120m:表示年轻代大小,-XXSurvivorRatio=3,即Eden:FromSurvivor:ToSurvivor=3:1:1;所以Survivor一共是10240*(2/5)=2048m。

3、集合框架的线程安全性

  

A,Vector相当于一个线程安全的List
B,HashMap是非线程安全的,其对应的线程安全类是HashTable
C,Arraylist是非线程安全的,其对应的线程安全类是Vector
D,StringBuffer是线程安全的,相当于一个线程安全的StringBuilder
E,Properties实现了Map接口,是线程安全的

4、Collection接口和Map接口

  请看下面两张图: