自从JDK1.8版本起,JVM的内存区域发生了一些改变,实际上是持久代内存被彻底删除,取而代之的是元空间 可以使用不同版本的jstat来对比JVM的GC内存分布。
通过对比发现JDK1.7版本中存在持久代内存区域,而在1.8中,该内存区域被MetaSpace取而代之,元空间同样是堆内存的一部分,JVM为每个类加载器分配一块内存块列表,进行线性分配,块的大小取决于类加载器的类型,sun/反射/代理对应的类加载器块会小一些,之前的版本会单独卸载回收某个类,而现在则是GC过程找那个发现某个类加载器已经具备回收的条件,则会将整个类加载器相关的元空间全部回收,这样就可以减少内存碎片,节省GC扫描和压缩的时间。
1.interface 可以提供静态方法及default 方法 其中default方法可以是private的,以方便其他default方法进行调用
例如:List 中的 default 方法 stream
default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
例如:Comparator接口中有相当多的静态方法如:
public static <T, U> Comparator<T> comparing(
Function<? super T, ? extends U> keyExtractor,
Comparator<? super U> keyComparator)
{
Objects.requireNonNull(keyExtractor);
Objects.requireNonNull(keyComparator);
return (Comparator<T> & Serializable)
(c1, c2) -> keyComparator.compare(keyExtractor.apply(c1),
keyExtractor.apply(c2));
}
java1.5
引入了TimeUnit,对sleep方法提供了很好的封装,使用它可以省去时间单位的换算步骤,如先要休眠3小时24份15秒99毫秒,强烈建议使用Thread.sleep的地方完全使用TimeUnit来代替
TimeUnit.HOURS.sleep(3);
TimeUnit.MINUTES.sleep(24);
TimeUnit.SECONDS.sleep(15);
TimeUnit.MILLISECONDS.sleep(99);