jvm内存区域
首先给大家介绍一下jvm
JVM就是一个可运行java代码的假想计算机,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收、堆和一个存储方法域。它时运行在操作系统之上的。
首先,
jvm内存分为三部分,分别时线程私有、线程共享、直接内存,现在给大家分别介绍一下
线程私有:
它分为程序计数器(pc)、虚拟机栈(VM Stack)、本地方法栈。
程序计数器是指向虚拟机字节码指令的位置,唯一一个无oom的区域。
虚拟机栈和线程的生命周期相同,每调用一个方法就会创建一个栈帧。
栈帧主要存储{局部变量表、操作数栈、动态链接、方法出口},
在这出现的异常有两种一种是线程请求得分栈深度大于jvm所允许的深度
,另一种是若 jvm允许动态扩展,但无法申请到足够的内存(俗称OOM)
线程共享:
线程共享主要分为两部分,方法区和java堆
方法区主要是用于呗被存储被JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。运行时常量池是方法区的一部分。
java堆:创建的对象和数组都保存在java堆内存中,也是垃圾收集器进行垃圾收集的最重要的内存区域。从GC的角度还可以分为新生代(eden,from survivor,to Survivor)和老年代。 感兴趣的可以自己了解一下
直接内存
不受JVM GC 管理