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

标签 java javafx memory memory-management

我想知道使用有或没有引用的类的具体好处,一直到计算机科学级别,即它在内存中占用多少空间。 考虑给定的情况: 您有一个按钮对象,它使用一个类来指定它的大小、颜色、基本外观、样式等。 此类有一个返回方法,该方法需要一个按钮对象并将返回一个按钮对象。 此类将被命名为: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 对象每个对象只会使用“一次”,并且永远不会再次引用,因此不需要创建带有引用的对象,除非它具有内存优势。

最佳答案

您的两个场景实际上在不止一个方面有所不同。他们不仅使用 ButtonSpec 不同,场景 1 创建了 2 个 Button,而场景 2 不创建任何 Button(它确实使不过,使用事先创建的一个)。

I am wondering if the use of memory will increase with scenario 1, because of the continuous creation of new ButtonSpecs objects that will only be used once with no reference, than with scenario 2 where one object is created with reference.

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

在场景 1 中,创建了 2 个 ButtonSpecs,而在场景 2 中,仅创建了 1 个,因此场景 1 会使用更多的内存。

请注意,节省的内存量是否真的有益是另一回事,应该使用分析器来确定。编写代码时,您还应该考虑其他因素,例如风格、可读性和可维护性(不仅仅是内存!)。

关于java - 指定使用引用初始化类和不使用引用初始化类之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59436207/

相关文章:

Java如何访问位于我的项目上方目录中的文件

没有扩展 Application 类的 JavaFX

c - 我怎样才能最小化这个程序的代码大小?

java - 这会导致内存泄漏吗

java - 将 PCM 录制的数据写入 .wav 文件(java android)

java - aparapi getGlobalId 如何工作?

java - 如何更改长字符串中的 1 个单词?

通过按钮编辑时,JavaFX TableView 的行为很奇怪

linux - `--oom-kill-disable` 对 Docker 容器有什么作用?

java - java为了什么目的有一个float原始类型?