
VM堆栈(VM堆栈)
虚拟机堆栈为JVM提供执行Java方法的服务. 执行每个方法时,将创建一个堆栈框架来存储信息,例如局部变量表,操作数堆栈,动态链接,方法出口等. 从调用到执行结束的每个方法都对应于堆栈的过程从虚拟机堆栈到堆栈的帧.
以下数据存储在虚拟机堆栈的本地变量表中:
基本类型数据(布尔,字节,字符,short,int,float,long,double)
对象引用(引用类型)
returnAddress类型(指向字节码指令的地址)
应注意,局部变量表所需的存储空间已在编译期间确定,并且大小不会更改.

虚拟机堆栈也是线程专用的,每个线程将调度一个线程.
JVM规定了虚拟机堆栈的两个例外:
StackOverflowError: 线程请求的堆栈深度大于虚拟机允许的深度.
OutOfMemoryError: 如果虚拟机堆栈可以动态扩展,并且在扩展期间无法应用足够的内存.
本机方法堆栈(本机方法堆栈)
本机方法堆栈类似于虚拟机堆栈. 主要区别在于本机方法堆栈为本机方法提供服务.
本机方法: 用非Java语言实现的Java中Native关键字声明的方法是指本机库提供的第三方语言方法.

本地方法堆栈也是线程专用的,每个线程将调度一个.
堆(堆)
堆是所有线程共享的内存区域. 它是在JVM启动时创建的. 通常,它是JVM中最大的块,并且是由垃圾收集器(GC)管理的主要区域.
堆中存储的主要数据是:
对象
数组
只要堆在逻辑上是连续的,堆就可以在物理上不连续,因此它是可扩展的内存区域.

当堆内存大小不足以创建对象或数组的内存大小,并且无法再对其进行扩展时,将引发OutOfMemoryError异常.
方法区域(方法区域)
方法区域也是所有线程共享的内存区域.
存储在方法区域中的主要数据是:
JVM已加载的类信息
常量(从jdk1.7开始,常量池在运行时移动到堆中)
静态变量

数据,例如由即时编译器编译的代码
该区域很少出现垃圾收集器(GC),主要的内存恢复目标是恢复常量池和卸载类型.
当方法区域不能满足内存分配要求时,将引发OutOfMemoryError.
运行时常量池
常量池是方法区域的一部分,用于存储在编译过程中生成的各种文字和符号引用. 可以在编译时和运行时将常量放入池中(字符串intern()). 内存受限制,当无法创建应用程序时,将引发OutOfMemoryError.
从jdk1.7开始,运行时常量池已移至堆.
直接内存(直接内存)
直接内存不是JVM运行时的内存数据区域,也不是JVM规范中定义的内存.
直接内存占用物理内存的大小. 分配JVM内存时需要注意包括直接内存,否则动态扩展内存时可能会发生OutOfMemoryError.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-307079-1.html
让这帮家伙丢丢丑
专家说
在伊拉克却说你没有和交朋友得自由