Java: 实例方法什么时候加载到内存中?
Java: When are instance methods loaded in memory?
我想知道如果我有以下class.
class Example {
public static void method1() {}
public void method2() {}
public void method3() {}
}
只有一个方法是静态的,它应该是运行时首先加载到内存中的方法。但是实例方法呢?创建此 class 的实例时,它们是否已加载到内存中?或者当 class 最初加载时它们是否已经加载。
我想了解的是,通过为每个功能设置单独的方法,将所有功能集中在同一个 class 中是否是一种更好的方法,还是创建一个单独的 class 更好? ] 对于每个功能,其 class 中只有相应的方法。
所以它在后面的情况下有助于记忆,因为我只会创建我需要使用的 class 的实例,并且只有那么多的方法会加载到内存中。否则,在前一种情况下,我在同一个 class 中有 100 个方法,但我只需要使用其中的 2 个方法,这将浪费内存,因为所有 100 个方法都已加载。
有什么建议吗?
实际上 class 变量和 class 成员 functions/methods 的内存分配是不同的。当一个 class 被实例化时,它的 class 变量被创建在内存中,它被调用为 data segment
并且方法代码被创建在 code segment
中。如果我们创建一个特定的十个对象 class java 虚拟机将创建十个不同的 code segments
但只会为所有对象创建一个 code segment
。 Java 虚拟机只有在代码中至少有一个对 class 对象的引用时才会创建 code segment
,否则它不会。
代码段只捕获了最少的内存。它只存储从代码创建的汇编指令。因此,您无需担心。对于对象,程序员也无需担心管理 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 个相同大小的代码的方法与上述所有方法相比,它将比两个方法占用更多的内存。
我想知道如果我有以下class.
class Example {
public static void method1() {}
public void method2() {}
public void method3() {}
}
只有一个方法是静态的,它应该是运行时首先加载到内存中的方法。但是实例方法呢?创建此 class 的实例时,它们是否已加载到内存中?或者当 class 最初加载时它们是否已经加载。
我想了解的是,通过为每个功能设置单独的方法,将所有功能集中在同一个 class 中是否是一种更好的方法,还是创建一个单独的 class 更好? ] 对于每个功能,其 class 中只有相应的方法。
所以它在后面的情况下有助于记忆,因为我只会创建我需要使用的 class 的实例,并且只有那么多的方法会加载到内存中。否则,在前一种情况下,我在同一个 class 中有 100 个方法,但我只需要使用其中的 2 个方法,这将浪费内存,因为所有 100 个方法都已加载。
有什么建议吗?
实际上 class 变量和 class 成员 functions/methods 的内存分配是不同的。当一个 class 被实例化时,它的 class 变量被创建在内存中,它被调用为 data segment
并且方法代码被创建在 code segment
中。如果我们创建一个特定的十个对象 class java 虚拟机将创建十个不同的 code segments
但只会为所有对象创建一个 code segment
。 Java 虚拟机只有在代码中至少有一个对 class 对象的引用时才会创建 code segment
,否则它不会。
代码段只捕获了最少的内存。它只存储从代码创建的汇编指令。因此,您无需担心。对于对象,程序员也无需担心管理 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 个相同大小的代码的方法与上述所有方法相比,它将比两个方法占用更多的内存。