Java jvm对静态变量的需求及其开销
根据关于静态成员的概念,当对其类进行第一次调用时,会将静态成员创建/加载到内存中。它们在该类的所有实例中都很常见。意味着它们不会被重新创建或重新初始化等。此外,它们只能通过类名访问。不需要为该类创建对象来访问它们 现在我的问题是,Java jvm对静态变量的需求及其开销,java,interface,jvm,static-members,Java,Interface,Jvm,Static Members,根据关于静态成员的概念,当对其类进行第一次调用时,会将静态成员创建/加载到内存中。它们在该类的所有实例中都很常见。意味着它们不会被重新创建或重新初始化等。此外,它们只能通过类名访问。不需要为该类创建对象来访问它们 现在我的问题是, 静态成员是否在 内存,直到应用程序启动 跑步即使所有的实例 那个班的学生都是由 垃圾收集器 对于一个大项目,8-10个团队 他们在一起工作,他们不在乎 关于其他团队的编码。 它们可以创建静态成员作为 根据他们的需要。如果所有成员 都缓存在内存中,不是吗 在JVM上创建
过早优化是编程中所有邪恶(或至少大部分邪恶)的根源。
——Donald Knuthth这是以假乱真的例子。在我的整个职业生涯中,我总是遇到由于非静态成员被泄漏而导致的内存泄漏。虽然问题中提到的这些问题可能是正确的,但它们很难成为JVM负载的原因。继续说下去,我的猜测是,当一切都说了算,你会希望你在代码可读性、可重用性和可重用性方面投入更多的时间和精力,高内聚和低耦合比担心变量占用的细节更重要。如果你担心你的大项目会因为代码中出现太多的静态变量而陷入麻烦,试着鼓励单元测试。静态变量使单元测试变得困难,所以除非真的需要,否则开发人员希望在没有静态变量的情况下设计代码。+1对于这个非常好的建议。嘿,欧内斯特,你是一个牧场主吗?只是好奇你是不是那个。。。。我喜欢你在那里的帖子,你也曾多次帮助过我。重要的是:1)在应用程序的生命周期内不会发生,但只有当企业应用程序停止并重新部署到应用程序服务器上时才会发生。@Adeel Ansari:是的,就是我。我也认出了你的名字。很高兴在这里见到你@欧内斯特:很高兴听到你也认出了我的名字。顺便说一句,2个月内跑完10公里,哇!继续…@articlestack:我不知道如何温和地说,所以:我是对的,他是错的:)Java中唯一的类实际上不仅仅是由类名定义的,而是由[class,classloader]对定义的。同一类文件可以加载到多个类加载器中。因此,“独生子女”实际上可以存在多次。如果没有代码可以访问其中的一个副本,也就是说,如果没有线程堆栈包含对从该类加载器加载的类创建的任何对象的引用,那么这些副本中的一个可以被垃圾收集。在这种情况下,由于运行代码永远无法访问该单例实例,因此可以将其丢弃。1)接口还存储“最终静态公共”变量的数据,2)请将您的点(1)与@Ernest点(1)开销进行比较,而不是什么都没有。如果某件事没有产生好的结果,人们就会发明新的东西。它们不会停止,因为不存在alternative@articlestack:“开销与零相比”毫无意义。这些变量要么是必需的,要么不是。如果不需要它们,就不要创建它们。对于这个问题,我不知道你的第二句和第三句是什么意思。我认为纯抽象类可以作为接口的替代。(我知道它的缺点,就像一个类只能继承一个类,但可以实现多个接口。)@articlestack当然这是一个替代方案,但开销是相同的。