这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区 虚拟机在执行Java文件的时候会把他所管理的内存划分为若干个不同的数据区域, 这些区域有各自的用途 ,...程序计数器区域 是唯一一个在《Java虚拟机规范》中没有规定任何OneOfMemoryError情况的区域 Java虚拟机栈(Java Virtual Machine Stack) 与上面的程序计数器一样...(但是在《Java虚拟机规范》中 它表明 所有的对象示例以及数组都应该在堆上分配), 具体听谁的咱也不知道… 相关细节: 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。...堆一样,是各个线程共享的内存区域。...这区域的内存回 收目标主要是针对常量池的回收和对类型的卸载,一般来说这个区域的回收效果比较难令人满意,尤 其是类型的卸载,条件相当苛刻,但是这部分区域的回收有时又确实是必要的。
基本问题: 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针两种方式) 拓展问题: String...2 运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。 ? 这些组成部分一些事线程私有的,其他的则是线程共享的。...在 HotSpot 虚拟机中和 Java 虚拟机栈合二为一。 2.4 堆 Java 虚拟机所管理的内存中最大的一块,Java 堆是所有线程共享的一块内存区域,在虚拟机启动时创建。...此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里分配内存。...2.5 方法区 方法区与 Java 堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
Java虚拟机运行时数据区包含两类:由所有线程共享的数据区和线程隔离的数据区。 线程共享的数据区包括方法区和堆。
Java运行时数据区域 Java虚拟机所管理的内存包括以下几个运行时数据区域,如下图: 程序计数器 程序计数器(Program Counter Register)是一块较小的内存区域,是当前线程执行的字节码的行号指示器...程序计数器所在的内存区域是唯一一个在Java虚拟机没有OOM(OutOfMemoryError)情况的区域。...上面三个内存数据区域(程序计数器、Java虚拟机栈、本地方法栈)都是私有的,那么我们来看一下内存线程共享的数据区域。 Java堆 Java堆是所有线程共享的一个内存区域,在虚拟机启动时创建。...主要是存放对象实例(并不是全部对象实例)和数组,因此Java堆是GC收集器管理的主要区域。Java堆可以是处于物理上不连续的内存空间中,只要逻辑上是联系的。...方法区 方法区(Method Area)与Java堆一样是线程之间共享的内存区域。他主要存储被虚拟机加载的类信息、常量、静态变量、及时编译器编译后的代码等数据。
一.概述 Java虚拟机在执行Java程序时,会把它管理的内存划分为若干个不同的数据区域。JDK1.8和之前版本略有不同。...2.4 堆 Java 虚拟机所管理的内存中最大的一块,Java 堆是所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里分配内存。...Java 堆是垃圾收集器管理的主要区域,因此也被称作GC 堆(Garbage Collected Heap)。...最大堆内存可通过-Xmx参数配置,若没有特别配置,将会使用默认值,详见:Default Java 8 max heap size) ...... 2.5 方法区 方法区也是各个线程共享的内存区域,它用于存储已经被虚拟机加载的类信息...直接内存并不是虚拟机运行时数据区的一部分,也不是虚拟机规范中定义的内存区域,但是这部分内存也被频繁地使用。
(写在前面(常见面试题) 下面是面试官可能在“Java内存区域”知识点问你的问题,快拿出小本本记下来! 基本问题: 介绍下Java内存区域(运行时数据区)。...(为什么要学习Java内存区域) 对于Java程序员来说,在虚拟机自动内存管理机制下,不再需要像C/C++程序开发程序员这样为内一个new 操作去写对应的delete/free操作,不容易出现内存泄漏和内存溢出问题...2 运行时数据区域 Java虚拟机在执行Java程序的过程中会把它管理的内存划分成若干个不同的数据区域。 ? 这些组成部分一些事线程私有的,其他的则是线程共享的。...在HotSpot虚拟机中和Java虚拟机栈合二为一。 2.4 堆 Java虚拟机所管理的内存中最大的一块,Java堆是所有线程共享的一块内存区域,在虚拟机启动时创建。...2.5 方法区 方法区与 Java 堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
引言 学习Java也有一段时间了,总感觉有些东西学的不是很精通。例如Java内存区域到底是怎么样的?程序是怎么跑的?对象是怎么存放的?这些都影响了我对自己的程序运行的熟悉程度。 一....运行时数据区域 ? Java虚拟机在执行java程序的过程中,会把它所管理的内存划分成若干个不同的数据区域(每当运行一个java程序都会启动一个虚拟机)。...堆是java垃圾收集器管理的主要区域(很多时候会称为GC堆,不叫垃圾堆),垃圾收集器实现了对象的自动销毁。...对象的内存布局 对象在堆中的布局分为三个区域:对象头,实例数据,对齐填充。...总结 了解java内存区域是对java的深入学习,以前只知道有堆和栈的区分,现在我们了解到了具体的堆栈的作用。内存是怎么划分的,对象是怎么存储的,方法和属性的存放区别。
写在前面 (常见面试题) 基本问题 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针两种方式...二 运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。 JDK 1.8 和之前的版本略有不同,下面会介绍到。...2.4 堆 Java 虚拟机所管理的内存中最大的一块,Java 堆是所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里分配内存。...最大堆内存可通过-Xmx参数配置,若没有特别配置,将会使用默认值,详见:Default Java 8 max heap size) ...... 2.5 方法区 方法区与 Java 堆一样,是各个线程共享的内存区域...,也不是虚拟机规范中定义的内存区域,但是这部分内存也被频繁地使用。
概述:这篇将从概念上介绍Java虚拟机内存的各个区域,讲解这些区域的作用,服务对象以及其中可能产生的问题。...Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途以及创建和销毁时间,称之为运行时数据区域。...程序计数器可能出现的异常:此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutofMemory区域的地方,一般遇到OOM问题,不会是这里。...ok,我们继续吧,下面要说的就是最最最最重要的了,Java堆,Java堆属于线程共享的区域,所有的对象实例和数组都要在堆上进行分配,Java堆在虚拟机启动时创建,此内存的唯一目的就是存放对象实例,Java...由于直接内存不属于Java虚拟机运行时数据区的一部分,也不是虚拟机规范中定义的内存区域,JDK1.4中新加入了NIO类,引入了一种基于通道与缓冲区的I/O方式,它可以使用Native函数库直接分配对外内存
[JVM] Java 内存区域与内存溢出异常 @TOC 手机用户请 横屏获取最佳阅读体验, REFERENCES中是本文参考的链接,如需要链接和更多资源,可以关注其他博客发布地址。...虚拟机内存的各个区域,讲解这些区域的作用、服务对象以及其中可能产生的问题 运行时数据区域 运行时数据区域主要有: 方法区 Method Area 堆 Java Heap 虚拟机栈 本地方法栈 程序计数器...此内存区域是Java虚拟机规范中唯一一个没有规定任何 OutOfMemoryError情况的区域。 Java 虚拟机栈 虚拟机栈描述的是Java方法执行的内存模型。和程序计数器一样,也是 线程私有的。...该区域和虚拟机栈抛出的异常情况一样。 Java 堆 Java 堆是Java虚拟机所管理的内存中最大的一块。被所有线程共享的一块区域,几乎所有的对象实例都在这里分配内存。...直接内存 直接内存(Direct Memory)并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域。
Java内存区域与内存溢出异常 运行时数据区 方法区(Method Area) 虚拟机栈(VM Stack) 本地方法栈(Native Method Stack) 堆(Heap) 程序计数器(PC) ?...(存储局部变量表[基本数据类型、对象引用]) 方法的调用和执行对应栈帧再虚拟机栈中入栈和出栈的过程 这个内存区域内规定的两类异常状况: StackOverflowError(栈深度溢出) 我的理解:...本地方法栈(类似VM Stack) Java堆 重点: 线程共享 存放对象实例(包括数组) 垃圾收集器管理的区域(分代收集理论) 分配缓冲区(Thread Local Allocation Buffer...,TLAB 提升对象分配时的效率) 不要求物理上连续的内存空间 可扩展(通过参数-Xmx和-Xms设定) 这个内存区域可能产生的异常状况: OutofMenoryError **产生原因:**Java堆中没有内存完成实例分配...,在类加载后将这些数据存放到运行时常量池 直接内存(不了解) 总结 掌握java内存区域布局,以及每一块的作用,知道每个内存区域时干什么的
运行时数据区域 JVM在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,都有着各自的用途以及创建和销毁时间。包括以下几个如图所示的运行时数据区域: ?...关于异常 此内存区域是唯一一个在JVM规范中没有规定任何OutOfMemoryError情况的区域。...常有人把Java内存区分为堆内存(Heap)和栈内存(Stack),此分法比较粗糙,其流行只能说明大多数程序员最关注的,与对象内存分配关系最密切的内存区域是这两块。...4、Java堆 (Java Heap) 对于大多数应用来说,Java堆是Java虚拟机所管理的内存中最大的一块区域,在虚拟机启动时创建。...参考资料 《Java虚拟机原理图解》 1.1、class文件基本组织结构 7、直接内存(Direct Memory) 直接内存并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域,
一、概述 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干不同的数据区域,这些区域都有各自的用途以及创建和销毁的时间。...Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如下图所示: ? 下面就每一个区域进行阐述。 二、运行时数据区域 程序计数器 程序计数器,可以看做是当前线程所执行的字节码的行号指示器。...此内存区域是唯一一个没有规定任何OutOfMemoryError情况的区域 。 Java虚拟机栈 Java虚拟机栈也是线程私有的 ,它的生命周期与线程相同。...Java堆 Java堆是所有线程共享的一块内存区域,在虚拟机启动时创建,此内存区域的唯一目的就是存放对象实例 。 Java堆是垃圾收集器管理的主要区域。...相对而言,垃圾收集行为在这个区域比较少出现,但并非数据进了方法区就永久的存在了,这个区域的内存回收目标主要是针对常量池的回收和对类型的卸载, 当方法区无法满足内存分配需要时,将抛出OutOfMemoryError
Java内存区域 了解Java GC机制,必须先清楚在JVM中内存区域的划分。在Java运行时的数据区里,由JVM管理的内存区域分为下图几个模块: ?...4,堆区(Heap):堆区是理解Java GC机制最重要的区域,没有之一。...在JVM所管理的内存中,堆区是最大的一块,堆区也是Java GC机制所管理的主要内存区域,堆区由所有线程共享,在虚拟机启动时创建。...由于直接内存收到本机器内存的限制,所以也可能出现OutOfMemoryError的异常。 Java对象的访问方式 一般来说,一个Java的引用访问涉及到3个内存区域:JVM栈,堆,方法区。 ...年轻代上的内存分配是这样的,年轻代可以分为3个区域:Eden区(伊甸园,亚当和夏娃偷吃禁果生娃娃的地方,用来表示内存首次分配的区域,再 贴切不过)和两个存活区(Survivor 0 、Survivor
Java虚拟机内存区域 Java程序在JVM虚拟机中运行,当我们一个类被加载到虚拟机中时,JVM会给该类分配具体的内存空间/内存地址,而这被分配的区域就是Java虚拟机运行时内存区域。...在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程: 首先是我们的编写的Java源代码文件---xxx.java,该文件会被Java编译器编译成字节码文件---xxx.class,然后Java...在后续的执行过程中,Java虚拟机会用一部分内存区域来存储程序运行期间所需要用到的数据和相关信息,通常我们称这部分内存区域叫做Runtime Data Area---运行时数据区,也就是我们常说的Java...根据《Java虚拟机规范(Java SE 7版本)》的规定,Java虚拟机所管理的内存包括如下几个Java运行时候数据区域: ?...Java虚拟机堆 在Java虚拟机中,Java虚拟机堆是各个线程中共享的内存区域,也是我们Java程序中新建的对象数数组锁分配内存的区域。
java内存区域是java虚拟机在执行java程序的时候会把它所管理的内存进行划分不同的数据区域。...但是java内存模型是为了屏蔽各种硬件和操作系统的内存访问的差异,已实现java程序在不同的操作系统中都能达到一致的访问效果 Java内存区域 1....直接内存(非Java虚拟机中运行时动态区域,但是也会引起OOM) ?...直接内存并不属于JVM动态运行时区域,我们在使用NIO的时候基于通道与缓冲区的方式(buffer)的I/O的方式,他可以使用native函数库直接分配堆外内存 ,然后通过存储在Java堆种的dirctyByteBuffer...Java内存模型和Java运行时动态内存模型类比的话,那么主内存就是其Java堆中的那些对象实例,而工作内存区域就是Java虚拟机栈中的局部变量表还有refrence所指向的数据,还有方法参数等。
前言 Java 内存区域, 也叫运行时数据区域、内存区域、JVM内存模型,和 Java 虚拟机(JVM)的运行时区域相关,是指 JVM运行时将数据分区域存储,强调对内存空间的划分。...堆 堆(Heap)是Java虚拟机所管理的最大的一块内存区域,是被所有线程共享的,Java堆唯一的目的就是存放对象实例,几乎所有的对象实例都在堆上分配内存,但是随着JIT编译器的发展和逃逸分析技术的逐渐成熟...其是所有线程共享的内存区域。 在Java 虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做 Non-Heap(非堆),与 Java 堆区分开来。...Java内存区域大致就这些了,下面我们再补充几个比较让人迷惑的概念 字符串常量池 字符串属于引用数据类型,但是可以说字符串是Java中使用频繁的一种数据类型。...直接内存(Direct Memory)并不是Java虚拟机运行时数据区的一部分,也不是 Java 虚拟机规范中定义的内存区域。
运行时数据区 ◆ ◆ ◆ ◆ Java虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间。...有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户进程的启动和结束而建立销毁。具体区域如下图: ? 程序计数器 ◆ ◆ ◆ ◆ 内存空间小,线程私有。...此内存区域是唯一一个在 Java 虚拟机规范中没有规定任何 OutOfMemoryError 情况的区域。 Java虚拟机栈 ◆ ◆ ◆ ◆ 线程私有,生命周期和线程一致。...Java堆 ◆ ◆ ◆ ◆ 对于绝大多数应用来说,这块区域是 JVM 所管理的内存中最大的一块。线程共享,主要是存放对象实例和数组。内部会划分出多个线程私有的分配缓冲区。...直接内存 ◆ ◆ ◆ ◆ 非虚拟机运行时数据区的部分,也不是Java虚拟机规范中定义的内存区域。
领取专属 10元无门槛券
手把手带您无忧上云