java - 有没有一种可靠的方法在java中使用堆?

标签 java oop shared-memory solid-principles

所以我读到静态变量和方法破坏了 open close principle .

假设您有一个类,其中有一个带有“大量数据”(10mb)的变量,该变量是最终的并在所有实例之间共享,例如游戏中敌人的 Sprite 图,比如说僵尸。

如果我没有使用SOLID我会将变量设置为私有(private)静态,因此它只在内存中存储一​​次。拥有 100 个僵尸,使用 10MB 的内存,存储在堆上的 Sprite 图上所花费的内存远小于 1GB 的内存,如果每个实例 1 个的话。

问题 - 有没有一种可靠的方法可以使用堆来存储 Sprite 图的一份副本,这样它就不会占用太多内存?

最佳答案

您的问题是您无法了解在类中内置的所有实例之间共享的 Sprite 图。

然后您需要将其移至其他地方。在另一个类中有一个 Sprite map 工厂方法,该方法知道应该始终返回相同的引用。 (单例)

随着您获得更多经验,您会发现很多编码都是为了推迟关于在给定位置实际应使用什么值的决策,通常是因为您直到运行时才知道。这通常会导致相当粗糙的代码,以便将内部移动部件与决定要做什么的外部世界连接起来。

根据我的经验,迄今为止最简洁的方法是将其从您自己的代码中移出并使用依赖项注入(inject)框架。 Java 有几个;我发现 Dagger 2 在编译时确定配置的方法非常令人耳目一新。

关于java - 有没有一种可靠的方法在java中使用堆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60999308/

相关文章:

java - Android 共享首选项不起作用

java - 如何在 Eclipse 中包含 Java 源代码?

python - 以实例作为第一个参数的未绑定(bind)方法得到了字符串,但需要其他东西

c++ - 何时删除复制构造函数和赋值运算符?

macos - Initdb for PostgreSql 给出 shmget 错误

Java8 : HashMap<X, Y> 到 HashMap<X, Z> 使用 Stream/Map-Reduce/Collector

java - 通过方法在不同类之间调用变量

oop - Head First 设计模式 - 使用 Starbuzz 的装饰器模式

c - 我的 Wayland 共享内存代码发现了一个段错误

c - 在shm_open()之后使用fallocate()会导致在shm_unlink()之后内存没有被释放