`

1. 内存区域

    博客分类:
  • jvm
 
阅读更多
JVM内存区域划分:方法区、虚拟机栈、本地方法栈、堆、程序计数器

Java堆(java Heap):(when)堆是被所有线程共享的一块区域,由虚拟机启动时创建。(what)用来存放对象实例和数组;(where)Java堆可以处在不连续的内存空间中,只要在逻辑上连续即可,堆的大小可以自动扩展也可以使用虚拟机参数限制 -Xmx 最大-Xms 最小,当对象在堆上无法申请到可用内存时会抛出 OutOfMememoryError。

Java 栈( 虚拟机栈 ):栈是线程私有的区域,生命周期和线程的生命周期一致。虚拟机栈描述的是java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存放局部变量表、操作数栈、动态连接、方法出口等信息,每个方法从调用到执行完成的过程中,就对应这一个栈帧在虚拟机栈中入栈到出栈的过程。
局部变量表存储了编译期间可知的基本数据类型(boolean byte char short int float long double)和对象引用(对象起始位置的指针)。
栈的深度:可理解为调用此方法内部继续调用其他方法或本方法的层数,当线程请求栈的深度大于虚拟机所允许的深度,将抛出StackOverFlowError,在使用Hibernate的时候Json序列化可能出现这个异常。
栈的大小:和堆一样栈的大小是可扩展的,但是也允许固定大小的虚拟机栈,使用-Xss 设置栈大小。


方法区:和堆一样是被所有线程共享的区域,存储 类信息、常量、静态变量、及时变异的代码数据。方法区无法满足内存分配需求时抛出OutOfMememoryError。运行时常量池:是方法区的一部分,Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池用于存放编译期间生成的各种字面两和符号引用,这部分内容将在类加载后进入方法区的运行时常量池进行存放。


程序计数器:程序计数器是线程私有的,可看作当前线程执行的字节码的行号指示器。

本地方法栈:和虚拟机栈作用是类似的,区别是虚拟机栈为虚拟机栈执行Java方法也就是字节码服务,而本地方法栈为虚拟机使用的Native方法服务,同样也会抛出 stackOverFlowError和OutOfMememoryError。

附:直接内存:
并不是JVM运行时数据区的一部分,也不是java 虚拟机规范中定义的内存区域,但是这部分内存也频繁被使用,而且也可能导致OOM,例如NIO中 Channel和Buffer使用Native分配堆外内存,然后通过存储在Java堆中的DirectByteBuffer对象作为这块内存的引用进行操作,这样能在一些场景中提高显著的性能,因为避免了在Java堆和Native反复复制内存,所以DirectMemeory并不受java堆大小的限制,但是既然是内存肯定还是受到本机总内存限制 即 RAM减去heap大小不满足条件大小时候抛出OutOfMememoryError。
分享到:
评论

相关推荐

    java内存区域和内存溢出.xmind

    java内存区域和内存溢出.xmind

    Delphi 修改内存保护属性.rar

    Delphi 修改内存保护属性,包括修改以下信息:基地址、分配地址、区域大孝所分配保护属性、访问的保护属性、内存状态、内存类型等。核心源代码如下:  VirtualQuery(Arrayptr, MemInfo, SizeOf...

    红黑树在Linux虚拟内存区域管理中的应用 (1).pdf

    红黑树在Linux虚拟内存区域管理中的应用 (1).pdf

    r.s.t内存检测软件

    0-7(1 )区域如果出现乱码,代表这根DDR内存条的第1颗粒已经损坏 ⑵. 8-F(2 )区域如果出现乱码,代表这根DDR内存条的第2颗粒已经损坏 ⑶. 0-7(3 )区域如果出现乱码,代表这根DDR内存条的第3颗粒已经损坏 ⑷. 8-F(4 )...

    c_c++中内存区域划分大总结

    3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放 4.另外还有一个专门放常量的地方...

    一、JVM内存区域1

    JVM 内存区域JVM 内存区域JVM 运行时内存划分程序计数器Java虚拟机栈本地方法栈方法区运行时常量池直接内存HotSpot 虚拟机对象揭秘对象的创建对象

    Windows下动态内存分配方式

    "动态内存"包含以下两个方面的内容: 1.内存。...这里的"动态"指的是进程虚拟内存空间中的动态内存区域。在一个进程的虚拟内存空间中,只有动态内存可以在运行是被应用程序自由的分配/使用/释放。

    通用内存修改器+注入器源码

    通用内存修改器+注入器源码 .版本 2 .支持库 iext .程序集 窗口程序集1 .程序集变量 停止搜索, 逻辑型 .程序集变量 搜索结果, 整数型, , "0" .程序集变量 列表框_十六进制, 逻辑型 .子程序 _窗口1_鼠标左键被按下...

    java核心知识点整理.pdf

    JVM 内存区域 ..................................................................................................................................... 21 2.2.1. 程序计数器(线程私有) ........................

    笔记,1、虚拟机的前世今生和java内存区域1

    笔记,1、虚拟机的前世今生和java内存区域1

    JVM内存区域划分.docx

    当 CPU 需要 执行指令时,需要从程序计数器中得到当前需要执行的指令所在存储单元的地址,然后根 据得到的地址获取到指令,在得到指令之后,程序计数器便自动加 1 或者根据转移指针得 到下一条指令的地址,如此循环...

    笔记,1、虚拟机的前世今生,深入理解JVM内存区域1

    笔记,1、虚拟机的前世今生,深入理解JVM内存区域1

    精通WindowsAPI.pdf

    第1章 Windows应用程序开发入门..........................................................................................16 1.1 第一个实例程序...............................................................

    JAVA核心知识点整理(有效)

    2.2. JVM 内存区域 ..................................................................................................................................... 21 2.2.1. 程序计数器(线程私有) ....................

    pro648#tips#栈 Stack1

    1. 数据结构栈 2. 代码调用栈 3. 内存区域栈

    OSS-SDK.pdf

    1 SDK ⽂档简介.........................................................................1 2 Java......................................................................................2 2.1 前⾔............

    JAVA核心知识点整理_美团十年.rar

    2.2. JVM 内存区域 ..................................................................................................................................... 21 2.2.1. 程序计数器 ( 线程私有 ) .................

    ifix4.0入门

    1. 一般安装信息............................................................................................................................................................  设置总览 ....................

    内存管理深入剖析内存管理深入剖析内存管理深入剖析

    第4章 PC上的不同内存区域 内存的发展 内存的前640K 保留的内存区 保留内存区 第一个兆字节: 总结 第5章 应用程序如何使用内存 DOS如何装入程序 COMMAND.COM文件做什么 正规程序所使用的内存 文件和缓冲器 DOS设备...

    【JVM和性能优化】1.Java内存区域

    文章目录了解的必要性JVM历史JVM数据区域私有区共有区内存区域版本变化1.61.71.8元空间栈跟堆Java中的对象都是在堆中分配吗逃逸分析标量替换栈上分配同步消除JVM对象对象创建过程对象内存布局对象访问方式通过句柄...

Global site tag (gtag.js) - Google Analytics