关于java内存分析的探讨

这些天一直都想找个机会把Java内存方面的知识整理整理,毕竟任何知识都涉及到这方面。Java内存分析是java学习的一大重点。

下面我们进入正式话题讨论:

我们知道Java内存大致分为三块:如下图

我们先大致了解下java各分区的数据存放内容:

栈区:主要为方法服务,存在许许多多的方法栈帧,在方法栈帧里开辟局部变量开辟空间,基本类型按基本数据类型数据大小开辟空间,而引用类型则开辟四个字节大小。

堆区:主要存放创建的对象数据。

方法区:主要存放加载的类,静态变量,静态初始化块,常量,以及程序运行的代码。

下面我们来分析一段程序,一遍帮助我们更好学习java内存:

首先jvm从主方法进入 先加载Mydog类到方法区然后将Animal类加载到方法区,并为静态变量myAnimal在方法区开辟空间并默认初始化。

然后在堆区创建Dog类型对象:1首先为父类属性开辟空间并默认初始化,然后调用父类构造方法进行初始化。

             2再为子类新增属性开辟空间再调用子类构造方法

             3再为子类继承父类的方法和子类新增方法开辟空间。至此Dog类型对象创建完毕。

然后将myAnimal引用指向新创建出来的Dog类型对象(也称之为向上转型)。

之后myAnimal引用调用子类Dog继承父类的方法setWeight()。

最后调用子类Dog继承父类的方法getWeight(),并将其打印出来。

Ps:这里值得注意的是向上转型后即myAnimal=new Dog();

1.         myAnimal引用访问不了父类私有属性(和方法)。

2.         myAnimal引用访问不了子类新增属性(和方法),可以访问继承的属性和方法。

 

转载于:https://www.cnblogs.com/kimoyoyo21/p/4703976.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值