gpt4 book ai didi

Java:实例方法何时加载到内存中?

转载 作者:行者123 更新时间:2023-12-02 11:31:20 25 4
gpt4 key购买 nike

我想知道我是否有以下类(class)。

class Example {

public static void method1() {}

public void method2() {}

public void method3() {}
}

只有一个方法是静态的,它应该是运行时首先加载到内存中的方法。但是实例方法呢?创建此类的实例时,它们是否会加载到内存中?或者它们在类最初加载时就已经加载了。

我试图理解的是,通过为每个功能使用单独的方法来将所有功能放在同一个类中是否是更好的方法,或者为每个功能创建一个单独的类,并且只使用各自的方法是否更好?它的类(Class)。

因此,在后一种情况下,它会对内存有所帮助,因为我只会创建需要使用的类的实例,并且只有那么多方法会加载到内存中。否则,在前一种情况下,我在同一个类中有 100 个方法,但我只需要使用其中的 2 个方法,这将浪费内存,因为所有 100 个方法都已加载。

有什么建议吗?

最佳答案

实际上,类变量和类成员函数/方法的内存分配是不同的。当一个类被实例化时,它的类变量在内存中创建,称为数据段,方法代码在代码段中创建。如果我们创建特定类的十个对象,Java 虚拟机将创建十个不同的代码段,但只会为所有对象创建一个代码段。仅当代码中至少有一个对该类对象的引用时,Java 虚拟机才会创建一个代码段,否则不会。

代码段仅捕获最少的内存。它只存储从代码创建的汇编指令。因此您无需担心。对于对象,程序员也无需担心 Java 中的内存管理,因为 Java 中有垃圾收集器。

现在在我的评论部分回答您的问题:-

But will the methods themselves be stored somewhere in heap etc. ? So a class having 100 methods or 2 methods will behave the same memory wise?

正如我所说,你的方法的代码将被你的java虚拟机转换为汇编指令,并将存储在内存中每个方法的指令指针中。现在不一定有很多方法,这取决于代码行数、递归、循环和条件等。是的,如果 100 个具有上述所有代码大小的方法,那么它将比两个方法占用更多的内存。

关于Java:实例方法何时加载到内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49283323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com