gpt4 book ai didi

java - Java 中的私有(private)内部类是否有性能开销?

转载 作者:搜寻专家 更新时间:2023-10-30 20:59:50 25 4
gpt4 key购买 nike

当我的内部类具有私有(private)方法或字段时,编译器必须创建合成的包保护访问器方法以允许外部类访问这些私有(private)元素(反之亦然)。

为避免这种情况,我通常将所有字段、方法和构造函数设为包保护而不是私有(private)。

但是类本身的可见性如何呢?是否有开销

 private static class A {
A(){}
}

对比

 static class A {
A(){}
}

请注意,构造函数在这两种情况下都受包保护,或者将类设为私有(private)会改变这种情况吗?

最佳答案

你试过编译它并比较字节码吗?这是我的结果。对于:

public class Example {
public static void main(String[] args) {
System.out.println("Hello world!");
}
private static class A {
A(){}
}
}

上面的代码产生了以下 *.class 文件:

-rw-r--r--    1 michaelsafyan  staff   238 Feb 10 00:11 Example$A.class
-rw-r--r-- 1 michaelsafyan staff 474 Feb 10 00:11 Example.class

现在,如果我移动类文件,删除 private 修饰符,然后重新编译,我得到:

 -rw-r--r--    1 michaelsafyan  staff   238 Feb 10 00:15 Example$A.class
-rw-r--r-- 1 michaelsafyan staff 474 Feb 10 00:15 Example.class

如果您查看 VM Spec on class files ,您会看到有一个常量大小的位字段用于指定访问修饰符,因此生成的文件大小相同也就不足为奇了。

简而言之,您的访问修饰符不会影响生成的字节码的大小(它也不应该对性能有任何影响)。您应该使用最有意义的访问修饰符。

我还应该补充一点,如果将内部类从被声明为 static 更改为不被声明为 static,会有细微的差别,因为它意味着一个额外的字段引用外部类。与声明内部类 static 相比,这将占用更多的内存,但是为此优化你会很疯狂(在有意义的地方使用 static你需要它是非静态的,让它成为非静态的,但不要为了在这里或那里保存一个内存指针而使你的设计复杂化。

关于java - Java 中的私有(private)内部类是否有性能开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4953597/

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