java是否使用静态内存管理更好?
在一些关于静态的文章和教程中,比如this和this,据说使用静态有利于内存管理,因为静态变量在类加载时只在类区域获取一次内存
但我的朋友告诉我,静态方法保存在堆栈中,因为管理堆比管理堆栈更容易,垃圾收集器只在堆上工作,只要应用程序正在运行,堆栈就不会被清除,所以尽量少使用静态方法
注:
我在stackoverflow上读过同样的关于堆栈内存的问题,但我没有得到太多,因为它们在使用“PermGen space”和其他我不知道的单词时有多么复杂和专业
我希望有人简单地解释一下我的朋友advance是否正确
我知道这要视情况而定,想象一下,我可以使用静态或不使用静态方法进行设计。内存管理:哪种方法更好
# 1 楼答案
答案是:问这个问题意味着你把时间和精力花在了错误的地方
获得性能良好的Java应用程序的关键作用是:提出一个优雅的OOP设计,以直接的方式实现您的需求
您必须理解,通过即时编译器的工作,“Java性能魔法”几乎完全发生在运行时。JIT最擅长于那些我们认为是Java中“最佳实践”的常用模式
试图想出“让我们到处使用静态”这样的“特殊”想法,最终可能会导致性能下降——因为“特殊”代码会阻止JIT以最佳方式完成其工作
所以:分别信任JIT和GC。确保这些工具能够以“最佳”的方式工作,方法是。。。其他人都在做什么
不要让这种过早优化的想法破坏你的OOP设计。即使你的应用程序属于罕见的类别,需要密集的低级别优化,那么你只有一种方法:深入研究GC和JIT的工作方式
换句话说:这样的问题不是真正的问题。意思是:
然后——当你遇到一个“真正的”问题时:你必须分析你的应用程序以了解问题的根本原因。再次强调:你不允许这种不成熟的(未受过教育的)优化思想以消极的方式影响你的设计
正如评论所暗示的那样,我还不够清楚:当你有真正的记忆问题时,你绝对必须理解“烫发一代”这样的术语。因为你必须详细了解GC是如何工作的。严肃地说:相信这里的人告诉你,static关键字在创建“内存高效”的应用程序中没有任何重要作用