我对Java静态方法内存分配有疑问。我有三个班,比如,
class a {
public static void a() {}
}
class b {
public static void a() {}
}
class c {
public static void a() {}
}
这里所有三个类都有一个带有相同签名的静态方法a()。 我的疑问是,如何在这里创造记忆?我的意思是只为堆中的方法a()或三个内存空间创建一个内存?
考虑上面三个类是tapestry页面。如果用户进入A类,将创建/分配静态方法内存,然后我重定向到B类,这里我也有相同的静态方法。 我的疑问是,这里将为B类静态方法创建或不创建内存。
答案 0 :(得分:4)
编译器没有"去重复"方法,如果这是你的问题。运行时也没有(如果有的话,内联方法调用的性能优化就完全相反)。
如果您有共同的代码,则由您来重构可重复使用的部分,并且重新使用它们。
答案 1 :(得分:1)
这里所有三个类都有一个带有相同签名的静态方法a()。我的疑问是,如何在这里创造记忆?
如果您调用这些方法,可以将它们加载到Perm Gen或Metaspace中。
我的意思是只为堆中的方法a()或三个内存空间创建一个内存?
堆上没有使用空间。如果使用所有三种方法,则每种方法都将加载到内存中。
这里将为B类静态方法创建或不创建内存。
将使用更多内存,但它只有几个字节,只有一次。除非你的方法很庞大,否则这不会产生太大的影响。