zoukankan      html  css  js  c++  java
  • 什么是持久代

    之前排查问题有涉及到一些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

  • 相关阅读:
    基于应用外壳的架构
    示例代码和环境配置
    获取元素位置信息:getBoundingClientRect
    nodejs学习记录
    网页整理 --- 要换工作了,把这一堆网页先存起来
    删除网页上的广告
    周数的处理
    十六进制
    [例]字体改变,文章位置不变
    haslayout和BFC
  • 原文地址:https://www.cnblogs.com/hucn/p/3575708.html
Copyright © 2011-2022 走看看