愿景:"让编程不再难学,让技术与生活更加有趣"
更多架构课程请访问 xdclass.net
目录
第2集 JDK7新特性之try-with-resources
第1集 JDK8新特性之新内存空间Matespace
简介:讲解JDK8里面的新的内存空间MetaSpace
-
JVM 种类有很多,比如 Oralce-Sun Hotspot, Oralce JRockit, IBM J9, Taobao JVM,我们讲的是Hotspot才有,JRockit以及J9是没有这个区域
-
JVM内存知识 在JDK8之前的HotSpot JVM,有个区域叫做“永久代(permanent generation), 通过在命令行设置参数-XX:MaxPermSize来设定永久代最大可分配的内存空间
如果JDK8里面设置了PermSize 和 MaxPermSize 会被忽略并给出警告
-
作用:该块内存主要是被JVM用来存放 class 和 mate 信息的,当 class 被加载 loader 的时候就会被存储到该内存区中,如方法的编译信息及字节码、常量池和符号解析、类的层级信息,字段,名字等
-
有大项目经验的同学对下面这个异常应该熟悉 java.lang.OutOfMemoryError: PermGen space
原因是: 永久代空间不够,类太多导致
-
jdk8的修改 JDK8 HotSpot JVM 使用本地内存来存储类元数据信息,叫做 元空间(Metaspace) 在默认情况下Metaspace的大小只与本地内存大小有关
常用的两个参数 -XX:MetaspaceSize=N 指Metaspace扩容时触发FullGC的初始化阈值
-XX:MaxMetaspaceSize=N 指用于限制Metaspace增长的上限,防止因为某些情况导致Metaspace无限的使用本地内存
不管两个参数如何设置,都会从20.8M开始,然后随着类加载越来越多不断扩容调整直到最大
-
查看大小 jstat -gc pid MC: current metaspace capacity MU: mateaspace utilization 单位是KB
第2集 JDK7新特性之try-with-resources
简介:讲解JDK7里面的try-with-resources资源处理
-
什么是try-with-resources
资源的关闭很多人停留在旧的流程上,jdk7新特性就有,但是很多人以为是jdk8的 在try( ...)里声明的资源,会在try-catch代码块结束后自动关闭掉 旧的 public static void main(String[] args) throws IOException { String path = "/Users/jack/Desktop/t.txt"; test(path); } private static void test(String filepath) throws FileNotFoundException { OutputStream out = new FileOutputStream(filepath); try { out.write((filepath+"可以学习java架构课程").getBytes()); } catch (Exception e) { e.printStackTrace(); }finally { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } 新的 private static void test(String filepath){ try(OutputStream out = new FileOutputStream(filepath);) { out.write((filepath+"可以学习java架构课程").getBytes()); } catch (Exception e) { e.printStackTrace(); } }
-
注意点 1、实现了AutoCloseable接口的类,在try()里声明该类实例的时候,try结束后自动调用的close方法,这个动作会早于finally里调用的方法
2、不管是否出现异常,try()里的实例都会被调用close方法
3、try里面可以声明多个自动关闭的对象,越早声明的对象,会越晚被close掉
干货文档
关注公众号发送:“CSDN干货文档” 即可领取