问题标签 [flyweight-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
59 浏览

java - 如何减少java中的RAM使用?

报表数据库类

ReportImpl 类:

类中的方法,调用方法,从ReportDatabase类getTestReports()

对于上述类,我需要减少 RAM 使用量,规则是,我需要使用 ReportDatabase.getTestReports(),并且我不能修改 ReportDatabase 类中的任何内容(仅限)。如果我打印出 RAM 消耗,大约是 450MB。我尝试创建一个 ReportFactory 类以应用享元模式,但我认为实例化 ReportDatabase 类以直接使用 getTestReports 需要大约 400MB RAM 消耗,因为:

有 20 个报告,每个报告有 6 个双数组。每个数组有 500000 个双精度数。如果我们计算内存,java中的double数是8个字节。总内存将是

8⋅500000⋅6⋅20/(1024⋅1024)≈450MB

我应该如何减少上述类的 RAM 使用量?我可以得到任何提示吗?

0 投票
0 回答
99 浏览

java - 减少 Java 中的 RAM 使用量

上面的类是我不能修改任何东西的类。

目标是减少 RAM 使用量,我检查 RAM 使用量。

如果我在 getTestReports 中删除 .clone(),RAM 使用量会从 800~MB 减少到 400~MB,但实际上我无法删除它,因为它的业务规则。

当我在其他类中调用 getTestReports 时,它直接需要 800~MB 的 RAM 消耗。

所以,我想问的是,无论如何要在其类之外的 getTestReports() 方法中删除 .clone(),例如 ReportImpl 类,它实现了 Report 接口并包含变量,例如 double[] legalData 和 getter 方法?

0 投票
0 回答
52 浏览

java - 有没有办法缓存享元模式以减少内存使用?

A类:

B类:

我无法更改 B 类中的任何内容,但我可以修改 A 类并添加额外的类。

我已经实现了享元模式,但它通常会阻止内存使用量增长,而不是实际上减少 RAM 使用量。

我知道巨大的 RAM 使用来自 getRandomData() 方法,它为每个 double[] 数组创建 double[500000] 随机元素,但 B 类中的所有内容都需要保留。

如果我删除 clone(),它会直接将 RAM 使用量从 800~MB 减少到 400~MB,但我也无法更改这个。我问了解决这个问题的学生,他们通常使用 .clone(),有人告诉我为享元模式缓存 .clone(),但是没有办法 declone() 克隆的数组不是吗?

那么有人可以告诉我如何在 FlyweightFactory 类中缓存克隆吗?我花了几个小时来解决这个问题,但我仍然在为这个问题而苦苦挣扎......

0 投票
2 回答
41 浏览

java - 享元的适当数据结构

我正在尝试在生成云的程序中应用享元模式。我有一个代表云的内在状态的类。云类型由其属性定义:

我想创建一个 CloudType 工厂,它将这些特征作为参数并返回 CloudType 的相应实例(如果存在),否则预先创建并存储它。

问题:

我对使用哪个容器以及架构本身有疑问。可以使用 HashSet,但搜索复杂性与 CloudType 中的属性数量成正比,这似乎不正确。在我在线阅读的示例中,作者使用 HashMap,其键是 CloudType 的名称:这违背了 IMO 的目的,因为在这种情况下可能有无限数量的云类型。

0 投票
1 回答
418 浏览

design-patterns - GoF Flyweight 设计模式有哪些缺点

我了解享元设计模式的好处,但我不确定它的确切缺点。例如,我知道它可能是破坏封装,但这就是我目前所能想到的,flyweight 设计模式有哪些可能的缺点,关于这件事的文档很少。

0 投票
0 回答
49 浏览

java - java中享元模式中内存缓存的概念

最近学习了享元模式,其中一个概念就是内存缓存。但是,在阅读了一些文章之后,我仍然不明白。

在本教程中,它使用地图作为一个简单的缓存,但为什么地图有这种属性呢?有没有清晰简单的解释? https://www.baeldung.com/java-flyweight

我参考了java文档:https ://docs.oracle.com/cd/B14099_19/web.1012/b14012/objcache.htm

教程中的插图是不完整的,所以我写了关于它的代码。

这是我的主要方法

0 投票
1 回答
40 浏览

asp.net-core - 这个简单的网络核心 Api 中的享元模式使用更多的内存 ram

我正在尝试在一个简单的 .net 核心 Api 中应用 Flyweight 方法模式,以查看与不使用该模式相比节省了多少内存。

我有两种方法,第一个创建 5000 个对象而不使用该模式,另一个创建 5000 个对象使用该模式。在他们每个人创建对象之后,他们都会调用一个方法,该方法返回 App 使用的当前内存。

我像使用 Parts 列表的类一样使用该模式,如果存在则返回一个 part 对象。

获取 App 使用的当前内存的方法是使用 Process 的这种方式(在 Utilities 类中):

在我的 Startup 中,我像 Singleton 一样注入 MemoryService。在控制器中,我使用 3 种方法来调用函数:

问题是:当我在导航器中调用没有模式(/weatherforecast/GenerateMemory) 的控制器中的方法时,返回(current)+2mb,但是当我调用 具有模式(/weatherforecast/GenerateLiftMemory) 的方法时,返回(当前)+3mb

为什么具有模式享元的方法比没有模式的方法返回更多使用的 MB(增长)?

带有测试代码的存储库。Gitlab存储库内存api

0 投票
2 回答
84 浏览

java - 如何设计享元模式?

现在我正在研究 Flyweight 设计模式。我试图通过谷歌找到一些例子,这就是我发现的。

这是界面形状。

这两个类实现了 Shape 接口。

通过这个 Factory 类,Oval 或 Line 类是由类型制成的。我理解,但我有一个问题。我了解到静态字段或函数只能在静态类中使用。 但是,在这个例子中,静态 Hashmap 和函数是在非静态类 ShapeFactory 中声明的。我在 google 中找到了其他示例,但每个示例都与此类似。我试图做我自己的享元模型,但它不起作用。任何人都可以解释一下吗?