1.运行时数据区

    • 存放对象的实例,数组
    • 线程共享,最大,虚拟机启动时创建
    • 堆上无内存可完成实例分配且堆无法扩展时->OutOfMemeoryError
    • 逻辑上连续,-Xmx -Xms控制堆大小
  • 方法区(永久代)

    • 存放虚拟机加载的类信息,常量,静态变量,(即时编译器编译后的代码)
    • 无法满足内存分配需求时->OutOfMemoryError
  • 虚拟机栈

    • 有个局部变量表,存放了基本数据类型,对象的引用,returnAddress类型(指向一条字节码指令的地址)
    • 线程请求栈深度大于虚拟机所允许深度->StackOverflowError
    • 虚拟机栈扩展时无法申请到足够的内存->OutofMemoryError
  • 本地方法栈

    • 与虚拟机栈类似,区别是为本地方法服务
  • 程序计数器

    • 记录正在执行的虚拟机字节码指令地址
    • 执行本地方法是计数器为空(undefined)
    • 线程私有,唯一一个无OutOfMemoryError的区域
  • 运行时常量池

    • 方法区的一部分,存放编译期生成的字面量,和符号引用
    • 常量池无法申请内存时->OutOfMemoryError

2.新生代,老年代,持久代?各存了什么?

  • 新生代

    • 存放存活率低的对象,新创建的对象一般放新生代(Eden区),(大对象直接放老年代)
  • 老年代

    • 存放存活率较高的对象,
    • 新生代的对象经过minor gc后存活且survivor区可容纳则进入survivor区,年龄为1,在survivor区每安全度过一次minor gc,年龄加一,一般年龄为15就进入老年代
  • 持久代

    • 就是方法区

results matching ""

    No results matching ""