第一章:JAVA内存区域介绍
对于JVM内存的分类,我们常常会划分两种:栈内存(Stack)和堆内存(Heap),栈中保存的是各种基本的数据类型(boolean、bytes、char、short、int、flioat、long、double等),而new出来的对象实例都会保存在heap堆内存中,之所以会这么划分是由于在编码过程中往往只会涉及到这两部分。根据JVM规范里虚拟机结构的描述,jvm运行时数据区划分为以下几部分:程序计数器(PC register)、虚拟机栈(JVM statck)、本地方法栈(Native method Stack)、堆(Heap)、方法区(Method Area)
(图1)
程序计数器(Program Counter Register)
此区域是很小的一块内存空间,记录下一条需要执行的字节码指令。JVM多线程的通过线程轮流切换来分配处理器的执行时间,所以在任何时刻,单个处理器只会执行一个指令,所以每个线程都会有自己独立的程序计数器,各个线程之间的计数互不影响,独立存储。所以此类区域是线程私有的内存,此区域不会出现任何的OutOfMemory异常。
栈(Stack)
每个方法被执行的时候会创建一个栈帧(Stack Frame),每个栈帧包括局部变量表、操作数栈,存储的是此次调用过程中的参数、临时变量以及中间结果;一个方法调用至完成的过程,对应着一个栈帧从入栈到出栈的过程,此区域也是线程私有的内存。局部变量表中存放的是8种基本数据类型以及对象引用reference类型。
本地方法栈(Native Method Stack)
作用于栈基本类似,只是是为jvm调用的native方法服务,存储每个native
方法调用的状态。
堆(Heap)
Java堆是存放对象实例的区域,被所有的线程共享,也是内存最大的一块。几乎所有的对象实例都会在堆上分配内存,所以此处也是垃圾回收(GC)的主要区域。现在的垃圾收集器大都采用的是分代收集算法,所以堆还可以细分为:年轻代(Young Generation)和年老代(Old Generration),年轻代又可细分为三个区域
:一个Eden区,两个Suivivor区(From Survivor 、To Suivivor)。
(图2)
方法区(Method Area)
方法区也是所有线程共享的一块内存区域,存储加载的类信息、静态变量、常量等信息,JVM中一般用持久代来存放方法区,可通过-XX:PermSize和-XX:MaxPermSize来指定最小值和最大值。
- 大小: 63.2 KB
- 大小: 23.9 KB
分享到:
相关推荐
java之jvm学习笔记五(实践写自己的类装载器)
一份JVM学习的笔记,含查看JVM运行时信息\JVM垃圾收集信息\JVM锁信息等
JVM 学习笔记(Java虚拟机)
Java 虚拟机学习笔记: Java 内存区域, 垃圾收集, 内存分配与回收策略, JVM 调优, 文件结构, 类加载机制, Java 程序 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,...
java之jvm学习笔记十一(访问控制器)-源码
性能测试,线程的 dump 看到线程的 死锁,等待 运行状态
JVM学习笔记.docx
从JVM内存模型、常用JVM参数、垃圾回收算法和垃圾回收器等几个角度学习JVM
java之jvm学习笔记八(实践对jar包的代码签名)
jVM学习笔记.ppt
java之jvm学习笔记九(策略文件)
JVM调优与JAVA内存管理总结.docx
主要是JVM内存分配及简单的JVM性能调优
java获得jvm内存大小
一.java内存结构 2 二 垃圾收集算法: 3 三 JVM参数 4 四 JVM的垃圾回收集器 7 五 常用参数设置 7
JVM学习笔记(缓慢更新).md
java之jvm学习笔记十而(访问控制器的栈校验机制)
jvm瓶颈定位 java jvm 学习
Java-JVM内存规范(详细完整思维导图),包含物理内存与虚拟内存、内核空间与用户空间、java中需要使用的内存组件、jvm内存结构、jvm内存回收策略、JVM参数等...