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

Java:实例方法何时加载到内存中?,java,memory,static,instance,Java,Memory,Static,Instance,我想知道我是否有以下课程 class Example { public static void method1() {} public void method2() {} public void method3() {} } 只有1个方法是静态的,它应该是运行时第一个加载到内存中的方法。但是实例方法呢?当创建此类的实例时,它们是否加载到内存中?或者在类最初加载时它们已经加载了 我试图理解的是,通过为每个功能创建单独的方法,将所有功能都放在同一个类中是更好的方法,还是最好为每个功能创建一个

我想知道我是否有以下课程

class Example {

public static void method1() {}

public void method2() {}

public void method3() {}
}
只有1个方法是静态的,它应该是运行时第一个加载到内存中的方法。但是实例方法呢?当创建此类的实例时,它们是否加载到内存中?或者在类最初加载时它们已经加载了

我试图理解的是,通过为每个功能创建单独的方法,将所有功能都放在同一个类中是更好的方法,还是最好为每个功能创建一个单独的类,并且在其类中只包含相应的方法

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


有什么建议吗?

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

代码段仅捕获最小内存。它只存储由代码创建的汇编指令。因此你不必担心。对于对象,程序员也不需要担心Java中的内存管理,因为Java中有一个垃圾收集器

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

但是这些方法本身会存储在堆中的某个地方吗?那么一个有100个方法或2个方法的类在内存方面表现相同


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

嗨,Abhijit,谢谢你的回复。我能理解你在说什么。我知道方法中的变量只会在调用该方法时消耗内存。但是这些方法本身会存储在堆中的某个地方吗?所以一个类有100个方法或2个方法,在内存消耗方面表现相同?@Manpret,请看我修改后的答案。