Java内存分配全面浅析

 本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的学习Java。这类文章网上有不少,但大多比较零碎。本文从认知过程角度出发,将带给读者一个系统的介绍。数组

         进入正题前首先要知道的是Java程序运行在JVM(Java  Virtual Machine,Java虚拟机)上,能够把JVM理解成Java程序和操做系统之间的桥梁,JVM实现了Java的平台无关性,因而可知JVM的重要性。因此在学习Java内存分配原理的时候必定要牢记这一切都是在JVM中进行的,JVM是内存分配原理的基础与前提。学习

         简单通俗的讲,一个完整的Java程序运行过程会涉及如下内存区域:操作系统

 

         l  寄存器:JVM内部虚拟寄存器,存取速度很是快,程序不可控制。指针

         l  栈:保存局部变量的值,包括:1.用来保存基本数据类型的值;2.保存类的实例,即堆区对象的引用(指针)。也能够用来保存加载方法时的帧。对象

         l  堆:用来存放动态产生的数据,好比new出来的对象。注意建立出来的对象只包含属于各自的成员变量,并不包括成员方法。由于同一个类的对象拥有各自的成员变量,存储在各自的堆中,可是他们共享该类的方法,并非每建立一个对象就把成员方法复制一次。索引

         l  常量池:JVM为每一个已加载的类型维护一个常量池,常量池就是这个类型用到的常量的一个有序集合。包括直接常量(基本类型,String)和对其余类型、方法、字段的符号引用(1)。池中的数据和数组同样经过索引访问。因为常量池包含了一个类型全部的对其余类型、方法、字段的符号引用,因此常量池在Java的动态连接中起了核心做用。常量池存在于堆中内存

         l  代码段:用来存放从硬盘上读取的源程序代码。虚拟机

         l  数据段:用来存放static定义的静态成员。基础

 

下面是内存表示图:变量

相关文章
相关标签/搜索