什么是持久代

之前排查问题有涉及到一些jvm的知识,之前提到的是一些基础的gc日志知识,这次接着简单分析jvm的设计原理,相信jvm的设计方法会对我们在项目设计时有些启发。

1 什么是Perm Generation?

 持久存储的jvm使用的class对象,class对象,就像其他存储在堆中的对象一样。class对象也和object对象一样被存储和gc。class对象和其他对象的关系如图。

2 为什么要把object对象和class对象分开存储?

1) 哲学原因:在软件哲学上看,class对象是jvm需要的,object对象是应用开发需要的,分开存储,应用开发就不需要关心jvm的那些对象。

2) 历史原因:在自定义class loader[3]没有流行的时代,通过观察发现class对象很少被unload,因此独立存储会减少扫描对象,提高gc的性能。

3) 目前技术原因:目前Perm Gen存在主要是并行回收器回收时需要按照对象被移动的先后顺序处理,因为处理一个对象时需要找到对象对应的class信息,而Perm Gen是先于tenured区移动的,这使得处理对象时能够准确找到对应class对象的位置。

3 永久区中有什么?

  • 类的方法(字节码...)
  • 类名(Sring对象)
  • .class文件读到的常量信息
  • class对象相关的对象列表和类型列表 (e.g., 方法对象的array).
  • JVM创建的内部对象
  • JIT编译器优化用的信息

4 参考&延伸阅读:

1) 什么是Permanent Gen:https://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation

2) 各种收集器:https://blogs.oracle.com/jonthecollector/entry/our_collectors

3) ClassLoader简介:http://www.javaworld.com/article/2077260/learn-java/the-basics-of-java-class-loaders.html

转载于:https://www.cnblogs.com/hucn/p/3575708.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值