指定使用和不使用引用初始化类之间的区别

问题描述 投票:0回答:1

我想知道使用类(带和不带引用)的特定好处,直到计算机科学级别占用内存多少空间。考虑给定的情况:您有一个Button对象,该对象使用一个类来指定其大小,颜色,基本外观,样式等。此类具有return方法,该方法需要一个按钮对象,并将返回一个按钮对象。该类的名称为:ButtonSpecs(下面对象内的方法)

public Button setButton(Button button)
{
        button.setPadding(new Insets(20));
        button.setOpacity(0.5);
        return button;
}

场景1:

Button but1 = new Button("Button1");
but1 = new ButtonSpecs().setButton(button);

Button but2 = new Button("Button1");
but2 = new ButtonSpecs().setButton(button);

方案2:

ButtonSpecs setspecs = new ButtonSpecs();
button1 = setspecs.setButton(button1);
button2 = setspecs.setButton(button1);

由于代码使用本身存在明显的区别,我想知道是否会随着场景1的使用而增加内存,因为不断创建新的ButtonSpecs对象,与场景2相比,该对象仅在没有引用的情况下只能使用一次。其中一个对象是通过引用创建的。

由于ButtonSpecs对象将仅对每个对象“一次”使用,并且永远不会再次被引用,因此除非具有内存优势,否则无需使用引用创建对象。

java javafx memory memory-management
1个回答
0
投票

您的两种情况实际上在多个方面有所不同。他们不仅使用ButtonSpec的方式不同,方案1创建了2个Button,而方案2没有创建任何Button(尽管确实使用了之前创建的一个)。

我想知道是否会随着场景1的使用而增加内存,因为连续创建新的ButtonSpecs对象将比不使用引用创建一个对象的场景2只能在没有引用的情况下使用一次。

方案1确实会使用更多的内存,但是主要原因不是它没有references。内存的使用主要来自创建的对象,而不是对这些对象的引用。这些对象通常比其引用“大”得多。

在方案1中,创建了2个ButtonSpecs,而在方案2中,只有1个,因此方案1将使用更多的内存。

请注意,此节省的内存量是否真的是beneficial是另一回事,应由探查器确定。在编写代码时,您还应该考虑其他因素,例如样式,可读性和可维护性(而不仅仅是内存!)。

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