有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是否使用静态内存管理更好?

在一些关于静态的文章和教程中,比如thisthis,据说使用静态有利于内存管理,因为静态变量在类加载时只在类区域获取一次内存

但我的朋友告诉我,静态方法保存在堆栈中,因为管理堆比管理堆栈更容易,垃圾收集器只在堆上工作,只要应用程序正在运行,堆栈就不会被清除,所以尽量少使用静态方法

注:

我在stackoverflow上读过同样的关于堆栈内存的问题,但我没有得到太多,因为它们在使用“PermGen space”和其他我不知道的单词时有多么复杂和专业

我希望有人简单地解释一下我的朋友advance是否正确

我知道这要视情况而定,想象一下,我可以使用静态或不使用静态方法进行设计。内存管理:哪种方法更好


共 (1) 个答案

  1. # 1 楼答案

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

    获得性能良好的Java应用程序的关键作用是:提出一个优雅的OOP设计,以直接的方式实现您的需求

    您必须理解,通过即时编译器的工作,“Java性能魔法”几乎完全发生在运行时。JIT最擅长于那些我们认为是Java中“最佳实践”的常用模式

    试图想出“让我们到处使用静态”这样的“特殊”想法,最终可能会导致性能下降——因为“特殊”代码会阻止JIT以最佳方式完成其工作

    所以:分别信任JIT和GC。确保这些工具能够以“最佳”的方式工作,方法是。。。其他人都在做什么

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

    换句话说:这样的问题不是真正的问题。意思是:

    • 当然,你可以避免完全愚蠢的错误,但是
    • 除非你手头有一个真正的问题(例如,应用程序需要太多内存或客户向你抱怨),否则你不会担心内存或性能主题

    然后——当你遇到一个“真正的”问题时:你必须分析你的应用程序以了解问题的根本原因。再次强调:你不允许这种不成熟的(未受过教育的)优化思想以消极的方式影响你的设计

    正如评论所暗示的那样,我还不够清楚:当你有真正的记忆问题时,你绝对必须理解“烫发一代”这样的术语。因为你必须详细了解GC是如何工作的。严肃地说:相信这里的人告诉你,static关键字在创建“内存高效”的应用程序中没有任何重要作用