引用分类:
强引用:引用指向对象,gc运行时不回收,例如字符串常量
软引用:gc运行时可能回收(jvm内存不够),用于制作缓存
弱引用:gc运行时立即回收
虚引用:类似无引用,主要跟踪对象被回收的状态,不能单独使用,必须与引用队列联合使用
目的:避免对象长时间驻留在内存中,解决垃圾回收机制回收时机的问题
String:不可变字符串类型
StringBuilder:可变字符串类型,非同步,线程不安全,效率高
StringBuffer:可变字符串类型,同步,线程安全,效率低
ArrayList:底层基于数组实现的列表,有序,可重复,线程不安全
LinkedList:底层基于链表实现的列表,有序,可重复,线程不安全
Vector:有序,可重复的列表,线程安全
对于Map的所有子类,其中的键不可重复,所以若要将某个自定义的类作为Map的键,则需要在该类中重写
equals和hashCode方法,其中,equals方法返回的值相同,则hashCode的值必相同,反之不一定成立
HashTable:线程安全,效率低,键与值都不能为空,父类为Dictionary
HashMap:线程不安全,效率低,键最多一个null,值可以为多个null父类为AbstractMap
Properties:用于读取配置文件,键与值都只能为字符串类型
WeakHashMap:用于管理弱应用对象,在垃圾回收之后,WeakHashMap中的弱引用对象将会被回收,用于管理大数据量对象
例如:
WeakHashMap<String,String> whm=new WeakHashMap<String,String>();
whm.put("hello","world");
whm.put(new String("hi","world"));
System.gc();
System.runFinalization();
System.out.println(whm.size());
此时输出的值为1,其中的String('hi')将会被回收
IdentityHashMap:其中的键以地址来去重,而不是以hashCode和equals来去重
强引用:引用指向对象,gc运行时不回收,例如字符串常量
软引用:gc运行时可能回收(jvm内存不够),用于制作缓存
弱引用:gc运行时立即回收
虚引用:类似无引用,主要跟踪对象被回收的状态,不能单独使用,必须与引用队列联合使用
目的:避免对象长时间驻留在内存中,解决垃圾回收机制回收时机的问题
String:不可变字符串类型
StringBuilder:可变字符串类型,非同步,线程不安全,效率高
StringBuffer:可变字符串类型,同步,线程安全,效率低
ArrayList:底层基于数组实现的列表,有序,可重复,线程不安全
LinkedList:底层基于链表实现的列表,有序,可重复,线程不安全
Vector:有序,可重复的列表,线程安全
对于Map的所有子类,其中的键不可重复,所以若要将某个自定义的类作为Map的键,则需要在该类中重写
equals和hashCode方法,其中,equals方法返回的值相同,则hashCode的值必相同,反之不一定成立
HashTable:线程安全,效率低,键与值都不能为空,父类为Dictionary
HashMap:线程不安全,效率低,键最多一个null,值可以为多个null父类为AbstractMap
Properties:用于读取配置文件,键与值都只能为字符串类型
WeakHashMap:用于管理弱应用对象,在垃圾回收之后,WeakHashMap中的弱引用对象将会被回收,用于管理大数据量对象
例如:
WeakHashMap<String,String> whm=new WeakHashMap<String,String>();
whm.put("hello","world");
whm.put(new String("hi","world"));
System.gc();
System.runFinalization();
System.out.println(whm.size());
此时输出的值为1,其中的String('hi')将会被回收
IdentityHashMap:其中的键以地址来去重,而不是以hashCode和equals来去重
EnumMap:要求其中的所以键应该为枚举的值
容器同步控制:多线程访问集合的线程安全
1 常用容器 ArrayList HashSet HashMap都是线程不安全的
2 Collections提供synchronizedSet,synchronizedList,synchronizedMap等方法,将制定的容器包装成同步的