APP下载

基于简单实例的java内存解析

2018-12-18

新教育时代电子杂志(教师版) 2018年36期
关键词:常量数据类型指向

(长沙学院计算机工程与应用数学学院 长沙 410075)

Java程序中的内存分为两大部分:一部分叫做栈(Stack)内存,另一部分叫堆(heap)内存。栈内存用来存放基本数据类型和引用数据,基本数据类型如int,short,byte,f l oat等;引用数据类型如类,接口,注解等。堆内存用来存放类中的实例化对象即用new关键字创建的对象,如 new animal(),这个数据就存放堆内存里。通过一个简单实例对两部分内存做详细分析。[1]

一、简单实例

二、实例内存分配解析

上述实例中,定义了两个基本数据类型的变量age与name;一个一般方法;在主函数内创建了两个对象。内存分配解析如下:

栈内存用来存放基本数据类型的变量及对象的引用地址,在实例中的基本数据类型为int age、String name; 对象的引用为 Student stu1、Student stu2.而堆内存用来存放new出来的对象即存放上例中的new Student(8,”张三”)与new Student(12,”李四”),如图中所示。另外,通常在堆内存又细分出一块内存空间叫常量池,用来存放不常改变的量,如static修饰的量,f i nal修饰的量,字符串常量及方法,显然,常量池里所存放的内容具有所有实例共享的特征。实例内存分配如图1所示。[2]

图1 JAVA程序内存划分图

三、内存运行机制

在讲内存运行机制之前,我们首先必须了解JVM即Java虚拟机,Java程序是在JVM上运行的,它是连接操作系统与Java程序之间的纽带,Java程序有个特点“一次编译,到处运行”,这正是JVM所起的作用,体现了Java的平台无关性,可见,JVM在Java程序运行中起着至关重要的作用,程序的内存分配都是在JVM中进行。现结合上述简单实例将Java的内存运行机制讲述如下:

计算机把class student整个程序信息调入计算机内存,一旦运行程序时,JVM开始对class student整个信息进行内存分配;

1.程序运行时,JVM自动寻找main方法,执行第一句代码,创建两个student类的对象,在栈中分配一块内存,存放两个指向堆内存的对象指针215346和140345。

2.JVM读到下面两条语句时,

检测到age,name是局部变量,因此会把age,name放在栈中,把对象指针指向堆内存的内容即把相应的“8,张三”与“12,李四”赋给age与name.[3]

3.当上面两条语句执行完了,JVM立即释放变量ageg与name;但stu1与stu2还在堆中,并没有释放掉,因为可能还有其他变量指向这两个变量。

4.JVM继续读取语句stu1.listening();这时从常量池中调用listening()方法给stu1对象来完成操作,JVM完成对象stu1对listening()方法的算法计算。由于listening()方法是存放于常量池中供所有类对象共享的,因此,JVM运行完语句stu1.listening()后,listening方法依旧在常量池中。

以上就是Java中内存机制运行的介绍。

结语

栈内存的数据和堆内存的数据不是同步释放的。方法结束时,栈中的局部变量立即释放,但是堆中对象不一定释放。因为可能有其他变量也指向了这个对象,直到栈中没有变量指向堆中的对象时,它才释放,并且还不是马上释放,要等垃圾回收扫描时才可以被释放。

猜你喜欢

常量数据类型指向
科学照亮世界
——卡文迪什测定万有引力常量
科学备考新指向——不等式选讲篇
如何理解数据结构中的抽象数据类型
一次函数的学习引导
把准方向盘 握紧指向灯 走好创新路
VHDL中常用的数据对象
基于SeisBase模型的地震勘探成果数据管理系统设计
线上众筹产品的特征分析与研究
相似度计算及其在数据挖掘中的应用
解决常量与变量问题的四种策略