问题标签 [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.
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 使用量?我可以得到任何提示吗?
java - 减少 Java 中的 RAM 使用量
上面的类是我不能修改任何东西的类。
目标是减少 RAM 使用量,我检查 RAM 使用量。
如果我在 getTestReports 中删除 .clone(),RAM 使用量会从 800~MB 减少到 400~MB,但实际上我无法删除它,因为它的业务规则。
当我在其他类中调用 getTestReports 时,它直接需要 800~MB 的 RAM 消耗。
所以,我想问的是,无论如何要在其类之外的 getTestReports() 方法中删除 .clone(),例如 ReportImpl 类,它实现了 Report 接口并包含变量,例如 double[] legalData 和 getter 方法?
java - 有没有办法缓存享元模式以减少内存使用?
A类:
B类:
我无法更改 B 类中的任何内容,但我可以修改 A 类并添加额外的类。
我已经实现了享元模式,但它通常会阻止内存使用量增长,而不是实际上减少 RAM 使用量。
我知道巨大的 RAM 使用来自 getRandomData() 方法,它为每个 double[] 数组创建 double[500000] 随机元素,但 B 类中的所有内容都需要保留。
如果我删除 clone(),它会直接将 RAM 使用量从 800~MB 减少到 400~MB,但我也无法更改这个。我问了解决这个问题的学生,他们通常使用 .clone(),有人告诉我为享元模式缓存 .clone(),但是没有办法 declone() 克隆的数组不是吗?
那么有人可以告诉我如何在 FlyweightFactory 类中缓存克隆吗?我花了几个小时来解决这个问题,但我仍然在为这个问题而苦苦挣扎......
java - 享元的适当数据结构
我正在尝试在生成云的程序中应用享元模式。我有一个代表云的内在状态的类。云类型由其属性定义:
我想创建一个 CloudType 工厂,它将这些特征作为参数并返回 CloudType 的相应实例(如果存在),否则预先创建并存储它。
问题:
我对使用哪个容器以及架构本身有疑问。可以使用 HashSet,但搜索复杂性与 CloudType 中的属性数量成正比,这似乎不正确。在我在线阅读的示例中,作者使用 HashMap,其键是 CloudType 的名称:这违背了 IMO 的目的,因为在这种情况下可能有无限数量的云类型。
design-patterns - GoF Flyweight 设计模式有哪些缺点
我了解享元设计模式的好处,但我不确定它的确切缺点。例如,我知道它可能是破坏封装,但这就是我目前所能想到的,flyweight 设计模式有哪些可能的缺点,关于这件事的文档很少。
java - java中享元模式中内存缓存的概念
最近学习了享元模式,其中一个概念就是内存缓存。但是,在阅读了一些文章之后,我仍然不明白。
在本教程中,它使用地图作为一个简单的缓存,但为什么地图有这种属性呢?有没有清晰简单的解释? https://www.baeldung.com/java-flyweight
我参考了java文档:https ://docs.oracle.com/cd/B14099_19/web.1012/b14012/objcache.htm
教程中的插图是不完整的,所以我写了关于它的代码。
这是我的主要方法
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
java - 如何设计享元模式?
现在我正在研究 Flyweight 设计模式。我试图通过谷歌找到一些例子,这就是我发现的。
这是界面形状。
这两个类实现了 Shape 接口。
通过这个 Factory 类,Oval 或 Line 类是由类型制成的。我理解,但我有一个问题。我了解到静态字段或函数只能在静态类中使用。 但是,在这个例子中,静态 Hashmap 和函数是在非静态类 ShapeFactory 中声明的。我在 google 中找到了其他示例,但每个示例都与此类似。我试图做我自己的享元模型,但它不起作用。任何人都可以解释一下吗?