在主类(构造函数)内部创建的对象属性是如何被java垃圾收集器销毁的

问题描述 投票:0回答:1
final public class CRMS{
    private ArrayList<Car>cars;
    private ArrayList<Renter>renters;
    private ArrayList<Transaction>transactions;
    private int carid;
    private int renterid;
    public CRMS() {
        cars = new ArrayList<Car>();
        renters = new ArrayList<Renter>();
        transactions = new ArrayList<Transaction>();
        carid=1;
        renterid=1;
    }
public class main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("Hello World by the GOAT programmar");
        CRMS crms = new CRMS();

基本上,我对当 CRMS crms 被垃圾收集器销毁时,汽车数组和租户数组将如何被销毁感到困惑。假设主代码中没有其他内容

我预计属性对象数组/列表会在 crms 对象销毁时被销毁。 然而我的助教告诉我,事情并不是这样的。 PS 有人还可以告诉我这种在构造函数内部创建对象列表的方式是组合还是聚合吗?

java oop aggregation composition
1个回答
0
投票

就您而言,当

CRMS crms = new CRMS();
被处决。它在堆中创建一个内存,并且从堆栈中引用该内存。

从概念上讲,您可以在下面想到内存布局。 HOW MEMORY IS LAYOUT

一旦

main()
方法执行完毕。从堆栈到堆的引用被删除。

从概念上讲,你可以这样想:

Post execution

垃圾收集器会定期出现并清除堆栈中没有引用的所有内容。

更多垃圾收集器的内部结构可以参考: https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

© www.soinside.com 2019 - 2024. All rights reserved.