《Head First Java》20200923读书笔记

P235-P237

《Head First Java》20200923读书笔记

第9章 构造器与垃圾收集器

对象有生有死。
编写Java程序,就必须创建对象,早晚要将它们释放掉,不然就会出现内存不足的问题。
这一章会讨论对象如何创建,存在于何处以及如何让保存和抛弃更有效率。
这代表我们会述及堆、栈、范围、构造器、超级构造器、空引用等。

栈与堆:生存空间

在Java中,程序员会在乎内存中的两种区域:对象的生存空间堆(heap)方法调用及变量的生存空间(stack)
当Java虚拟机启动时,它会从底层的操作系统取得一块内存,并以此区域来执行Java程序。
至于有多少内存,并以及你是否能够调整它都要看Java虚拟机与平台的版本而定。
我们知道所有的对象都存活于可垃圾回收的堆上,但我们还没看过变量的生存空间。
而变量存在于哪一个空间要看它是哪一种变量而定。
这里说的“哪一种”不是它的类型,而是实例变量或局部变量。
后者这种区域变量又被称为栈变量,该名称已经说明了它所存在的区域。
在这里插入图片描述
实例变量
实例变量是被声明在类,而不是方法里面。
它们代表每个独立对象的“字段”(每个实例都能有不同的值)。实例变量存在于所属的对象中。

public class Duck {
	int size;//每个Duck对象都会有独立的size
}

局部变量
局部变量和方法的参数都是被声明在方法中。
它们是暂时的,且生命周期只限于方法被放在栈上的这段期间(也就是方法调用至执行完毕为止)。

public void foo(int x){
	int i = x + 3;//参数x和变量i、b都是局部变量
	boolean b = true;
}

方法会被堆在一起

当你调用一个方法时,该方法会放在调用栈的栈顶。
实际被堆上栈的是堆栈块,它带有方法的状态,包括执行到哪一行程序以及所有的局部变量的值。
栈顶上的方法是目前正在执行的方法(先假设只有一个)。
方法会一直待在这里直到执行完毕,如果foo()方法调用bar()方法,则bar()方法会放在foo()方法的上面。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值