美文网首页
Java运行时的内存区域

Java运行时的内存区域

作者: Diffey | 来源:发表于2019-05-21 11:43 被阅读0次

一 内存区域划分概述

java运行时内存区域.png

Java运行时的内存主要包括:方法区,堆,栈(虚拟机栈,本地方法栈),程序计数器。
其中栈(虚拟机栈,本地方法栈)和程序计数器是线程私有的,方法区和堆是线程共享的。

二 程序计数器

2.1 含义

一块较小的内存空间,当前线程所执行的字节码行号的指示器;字节码解释器工作时,通过改变计数器的值 选取下一条执行的字节码指令;(一些基本功能都需要依赖计数器来完成如:分支、循环、跳转、异常处理、线程恢复等)
当线程正执行 Java 程序时:程序计数器 记录正在执行的虚拟机字节指令地址。
执行 native 方法,计数器值为空 undefined;】

2.2 内存异常情况

没有规定任何 OutOfMemoryError 情况的内存区域;

2.3 线程私有情况

是线程私有的。

三 栈(虚拟机栈,本地方法栈)

3.1 含义

由一个一个的栈帧组成,栈帧是在每一个方法调用时产生的,是方法的工作空间。每一个栈帧由局部变量区、操作数栈等组成。每创建一个栈帧压栈,当一个方法执行完毕之后则出栈。

3.2 内存异常情况

栈帧过多,会抛出 StackOverflowError。
初始化新的虚拟机栈时申请不到足够的内存,则会抛出 OutOfMemoryError。

3.3 线程私有情况

是线程私有的。

四 堆

4.1 含义

Java 堆是整个虚拟机所管理的最大内存区域,所有的对象创建都是在这个区域进行内存分配,GC回收也是主要针对这块内存区域。

4.2 内存异常情况

创建新对象申请不到足够的内存,则会抛出 OutOfMemoryError。

4.3 线程私有情况

这块内存区域是线程共享的。

五 方法区

5.1 含义

方法区主要用于存放已经被虚拟机加载的类信息,如常量,静态变量。

5.2 内存异常情况

超出内存大小会抛出 OutOfMemoryError。

5.3 线程私有情况

这块内存区域是线程共享的。

相关文章

  • JAVA运行时内存及垃圾回收

    JAVA 1. Java运行时内存区域 在JAVA运行时的内存区域中,由JVM管理的内存区域分为以下几个模块: 程...

  • 理解Java内存区域与垃圾收集器

    本文主要介绍java内存区域和GC回收 java内存区域 垃圾收集器 参考 java内存区域 运行时内存区域 ja...

  • Java内存区域与内存溢出异常

    Java内存区域与内存溢出异常 @(Java虚拟机)[jvm, 内存] [TOC] 运行时数据区域 Java虚拟机...

  • java - 内存管理

    java内存管理 参考文章:Java内存管理:深入Java内存区域 1. 运行时数据区域 Java虚拟机在执行Ja...

  • JMM与可见性

    JMM jvm运行时数据区域 Java 内存区域和内存模型是不一样的东西,内存区域是指 Jvm 运行时将数据分区域...

  • 深入理解Java虚拟机(一)

    自动内存管理机智 1. Java内存区域与内存溢出异常 运行时的数据区域 根据《Java虚拟机规范(Java SE...

  • 1.Java内存区域与内存溢出异常

    Java内存区域与内存溢出异常 1. 运行时数据区域 《Java虚拟机规范(Java SE 7)》规定,Java虚...

  • GC垃圾回收机制

    一、JAVA内存区域: 在Java运行时的数据区里,由JVM(JAVA虚拟机)管理的内存区域分为下图几个模块: 其...

  • 重读 Java虚拟机(jvm)

    1. Java 内存区域与内存溢出异常 1.1 运行时数据区域 根据《Java 虚拟机规范(Java SE 7 版...

  • Java自动管理机制

    java内存区域与内存溢出异常 运行时数据区域 java在运行时主要可以分为两类,之类是线程独享的,另外就是线程共...

网友评论

      本文标题:Java运行时的内存区域

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