zoukankan      html  css  js  c++  java
  • JVM之Java运行时数据区(线程共享区)

    JVM运行时区域各线程共享的区域包括堆区和方法区。

    堆区

    堆区最最主要的功能是存储对象实例【上篇也提到过】,因此Java垃圾回收的主要战场就是在堆区,因此也有称为GC堆区。如果堆区的内存不够会出现OutOfMemory异常。

    为了方便回收,堆区可以细分为新生代和老年代。顾名思义,新生代里都是新创建的或者年龄不大的对象,新生代区又有三个区域,eden区,s0区和s1区。绝大多数情况新生对象都是在eden区,当一次回收之后如果对象还存在,就会进入s0或者s1区,之后每次回收如果都能存在,那么年纪就加一,达到一定年龄后就会进入老年代区。

    老年代区存储的都是经过很多次回收仍然存在的,也有一些大的对象会直接进入老年代【比如长字符串和长数组】,表示这里对象存活率高,声明周期长。老年代和新生代区域的差别在于新生代GC次数更加频繁。

    方法区

    在不同的JDK版本和不同的JVM实现方式中,方法区的实现方法多经变更,甚至互相矛盾,例如永久代和元空间,因此很难详细的总结方法区的具体工作方式。因此,了解方法区的主要存储对象是更为重要的,包括:

    1、类型信息:

        类的完整名称

        类的直接父类的完整名称

        类的直接实现接口的有序列表

        类型标志(类类型还是接口类型)

        类的修饰符(public private defautl abstract final static)

      2、类型的常量池

        存放该类型所用到的常量的有序集合,包括直接常量(字符串、整数、浮点数)和对其他类型、字段、方法的符号引用。

      3、字段信息(该类声明的所有字段)

        字段修饰符(public、peotect、private、default)

        字段的类型

        字段名称

      4、方法信息

        方法信息中包含类的所有方法。

        方法修饰符

        方法返回类型

        方法名

        方法参数个数、类型、顺序等

        方法字节码

        操作数栈和该方法在栈帧中的局部变量区大小

        异常表

      5、类变量(静态变量)

      6、指向类加载器的引用

      7、指向Class实例的引用

      8、方法表

      9、运行时常量池(Runtime Constant Pool)

    方法区存储内容转载自这里

    总结:堆区用于存储实例对象,GC过程在此发生;方法区存储很多东西,重要的包括常量池、静态变量以及一些类和方法信息;栈区存储方法的参数和局部变量,还有基本数据类型和引用类型的引用

  • 相关阅读:
    L18 如何快速查找文档获得帮助
    L4 如何在XCode中下进行工作
    L17 怎么向应用程序商店提交应用
    Unity 烘焙材质到单一贴图的脚本
    关于用Max导出Unity3D使用的FBX文件流程注解
    计算两点之间的角度的代码
    Unity3d iOS基本优化和高级优化
    91SDK接入及游戏发布、更新指南
    UNITY3D与iOS交互解决方案
    Unity3d与iOS交互开发——接入平台SDK必备技能
  • 原文地址:https://www.cnblogs.com/lbrs/p/12005462.html
Copyright © 2011-2022 走看看