美文网首页
Java内存结构

Java内存结构

作者: 淡季的风 | 来源:发表于2020-08-30 21:55 被阅读0次
1.png

1. 运行时内存

如图所示, Java内存结构可以区分为:堆、方法区、虚拟机栈、本地方法栈、程序计数器。

  • 堆(Heap)

  1. 线程共享的一块内存区域, 主要作用是用来存放对象实例和数组。
  2. 占用内存空间最大,是Java垃圾回收重点关注的区域。
  3. 物理上不连续,由一片片空间拼凑而成, 只要逻辑上连续就可以。
  4. 没有内存进行对象实例创建并无法再扩展时, 会抛出OutOfMemoryError异常。
  5. -Xmx -Xms 指定最大、最小堆
  • 方法区(Method Area)

  1. 线程共享、 内存不连续、可扩展、可垃圾回收。
  2. 存储类信息、常量、静态变量、即时编译器编译后的代码等数据。
  • 虚拟机栈(VM Stack)

  1. 线程私有,生命期同线程。
  2. 虚拟机栈描述Java的内存模型,每个方法执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等,每一个方法从调用直至执行完成,对应着一个栈桢在虚拟机栈中的从入栈到出栈。
    3.局部变量表用于存储方法参数和方法定义的局部变量,包含8种基本类型和引用类型等。
  3. 错误类型:StackOverflowError 和 OutOfMemoryError
  • 本地方法栈

  1. 本地方法栈和虚拟机栈类似,本地方法栈用于执行Java调用的本地方法。
  • 程序计数器

  1. 线程私有,内存小, 没有OOM错误
  2. 是当前线程所执行的字节码的行号指示器

相关文章

网友评论

      本文标题:Java内存结构

      本文链接:https://www.haomeiwen.com/subject/siqvdktx.html