标签 Java 下的文章

ClassNotFoundExceptionNoClassDefFoundError 都是某个类在运行时没有找到时出现的,但它们发生的场景不同。

ClassNotFoundException 是一个异常,当你在运行时使用 Class.forName()loadClass() 方法尝试去加载一个类且这个类没有在 classpath 下找到时会出现该异常。

NoClassDefFoundError 是一个错误,当某个类在编译时存在但在运行时丢失时会出现该错误。

阅读全文

所谓序列化,就是将对象转为字节流,而反序列化则是将字节流还原为对象。

序列化可以将对象的字节序列持久化——保存在内存、文件、数据库中,在网络上传送对象的字节序列,或者用于 RMI(远程方法调用)。

例子

首先来看一个简单的例子。定义一个 User 类,并实现 Serializable 接口。

阅读全文

HashMap是很重要的数据结构,也是面试的宠儿,这里就HashMap的源码进行分析,以便理解HashMap的实现。

散列表

散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。 也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。 这个映射函数称做散列函数,存放记录的数组称做散列表。

散列函数能使对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快定位。散列函数有直接定址法、数字分析法、平方取中法、折叠法、随机数法、除留余数法等。

阅读全文

Survivor的作用

当没有Survivor时,如果增加老年代空间,需要更多存活对象才能填满老年代,这样可以降低Full GC的频率;但是,随着老年代空间加大,一旦发生Full GC,执行所需要的时间更长。

如果减少老年代空间,虽然Full GC所需时间减少;但是,老年代很快被存活对象填满,Full GC频率增加。

因此,Survivor的存在意义,就是减少被送到老年代的对象,进而减少Full GC的发生。

阅读全文