从内存的角度分析Java程序在JVM中的运行

类与对象;类是从多个个体抽象出来的一个抽象的事物类别的总称,比如“学生”。正是“张三”
“李四”“王五”······这些个体组成了“学生”这个类,而”张三“等人就是从学生这个类
里面实例化出来的的一个对象。对象具有属性,如张三等人具有身高,体重,学号等属性,我
们还可以为属性赋值,如张三身高为1.75;但是类不具有属性,我们不能够这样说:学生的身高是1.75,这一说法是错误的。
属性是对象的属性,方法是对象的方法;属性和方法必须写在类里面。

Java中“类”的概念与C中结构体的概念相似,类名——构造类型名;属性——结构体成员变量;
类——新构造出的类型;由实例化出对象——结构体变量

JVM的内存分为不同的模块
1.方法区 加载类(class) 文件,我们所编译出的类需加载到方法区上
2.堆 内存大;存放所有实例化出来的对象
3.栈 用来运行类或者对象的方法 ;类似于弹夹,最先压进的子弹最后打出,先进后出,后进先出;

以下程序的运行过程为:

1.将Main。class加载到方法区
2.检测到有main方法,运行!在栈中添加Main,main(String[] args )方法,压到最底层
3.实例化出Nokia对象 怎么实例化?一看到Phon这个类,先找找有没有这个class文件,有!Phone.class,所以
能够实例化出来一个Nokia对象, 所以把Phone.class加载到方法区
4.将实例化出的Nokia这一对象存放到堆中,此对象含有的属性:brand color screensize
5.将内存中brand这一属性赋值为诺基亚
6.又要根据Phne这一对象去实例化出一个对象iphone,Phone之间已经加砸到了方法去,所以
在堆中再存入对象iphone,也具有brand color 等属性
7.将iPhone的brand属性赋值为“苹果”//注意:Nokia与iphone这两个对象独立存在且互不冲突,
拥有独立的内存空间

8.运行text方法,故该方法需进栈,注意Main,main(String[] args )这一方法仍未运行完毕,
不能出栈

9.iPhone。text运行完毕,出栈
10.调用nkia。telephone 进栈
11.出栈,出栈,回收内存

1

猜你喜欢

转载自www.cnblogs.com/-Struggle/p/9458428.html
今日推荐