使用Static对内存管理是否更好?

Sha*_*Zar 1 java static memory-management heap-memory stack-memory

在大约像静态一些文章和教程这个这个,据说使用静态还是不错的内存管理,因为静态变量类地区的类加载的时间变内存只有一次。

但是我的朋友告诉我,静态方法保存在堆栈中,因为管理堆比堆栈容易,并且垃圾收集器仅在堆上起作用,并且只要应用程序正在运行,就不会清除堆栈,因此请尽量少使用静态方法。您可以。

注意:

我已经在stackoverflow中阅读了有关堆栈内存的相同问题,但是我没有得到太多,因为使用“ PermGen空间”和我不知道的其他词,它们有些复杂和专业。

我希望有人简单地解释我朋友的预付款是否正确?

我知道这取决于,想象一下我既可以使用静态方法也可以使用静态方法进行设计。谈论哪个内存管理更好的方法?

Gho*_*ica 5

答案是:问这个问题意味着您将时间和精力花在了错误的地方。

获得性能良好的Java应用程序的关键角色:提出一种优雅的OOP设计,该设计可以直接实现您的需求。

您必须了解,“ 即时性能” 编译器几乎在运行时完全发生了“ Java性能魔术” 。而且,JIT最适合我们认为Java中“最佳实践”的那些常用模式。

尝试提出“让整个地方都使用静态”之类的“特殊”想法,最终甚至可能导致性能下降-因为您的“特殊”代码会阻止JIT尽其所能。

因此:分别信任JIT和GC。并确保其他人正在做的事情使这些工具能够以“最佳”的方式工作!

不要让这种过早优化的想法破坏您的OOP设计。即使您的应用程序会陷入罕见的类别,需要密集的低级别的优化-那么就只有一个你的方法:研究GC的工作和JIT 的深度

换句话说:这样的问题不是真正的问题。含义:

  • 当然,您可以避免彻底的愚蠢错误,但是
  • 否则,除非您遇到真正的问题(例如,应用程序占用太多内存或客户抱怨您),否则不必担心内存或性能主题。

然后-当您遇到“实际”问题时:您必须分析应用程序以了解问题的根本原因。再次:您不允许这种过早的(未受过教育的)优化思想对您的设计产生负面影响。

正如评论所暗示的,我还不够清楚:当您遇到真正的内存问题时,那么您绝对必须理解诸如“烫发生成”之类的术语。因为那样,您必须详细了解GC的工作方式。认真地说:相信这里的人告诉您,static关键字在创建“内存有效”应用程序中没有任何重要作用。

  • 内存管理不是我主要关注的问题,但是我在思考,当我有权选择,不使用静态方法或没有问题或者内存使用它们更好时,我更喜欢哪一个? (2认同)