- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个数据生成器,它生成的数据供许多不同的消费者使用(我们称它们为 Cs)。每个 C 都有自己感兴趣的数据集。数据生产者对 C 有弱引用,因此可以通知它们进行更新。
每个 C 也由许多独立的组件使用,因此没有一个组件可以判断何时不再需要 C,因此我们必须将其留给 JVM 来确定 C 何时可以进行 GC。
此处的目标是在 C 过时时收到通知,因此数据生产者可以关闭仅对未使用的 C 感兴趣的数据。
正如我之前提到的,数据生产者总是对 C 有弱引用,所以当 C 被 GC 时很容易做到这一点。但是,我注意到 Cs 通常会在 VM 中停留很长时间,然后才会最终进行 GC 处理,而在这期间,数据生成器正在生成大量本应需要的数据。
我有什么办法可以强制 GC 未使用的 C 吗?我希望是,但我希望不会,所以作为后续问题,有人对我如何(重新)设计它以使其更好/更有效地工作有好的建议吗?
谢谢!!
下面的一些答案提出了很多要点 - 特别是强制 C 用户订阅和取消订阅的建议。这很难,因为:
C 只是接口(interface) I(没有此订阅要求)的一种可能实现,这是用户真正使用的。 C 实现是在运行时注入(inject)的,所以我们不能强制用户遵守 C 特定的要求。 (哎哟?)
最佳答案
使用 C 的组件可以在感兴趣和不再感兴趣时发出通知。
当至少有一个感兴趣的组件时,开启订阅。 (这里没有出现之前的情况),当最后一个组件取消订阅时,关闭数据。
Set<C> components = ...
public void subscribesTo(C component) {
if (components.isEmpty())
enableSubscription();
components.add(component);
}
public void unsubscribeFrom(C component) {
components.remove(component);
if (components.isEmpty())
disableSubscription();
}
关于java - 另一个强制 Java 垃圾收集问题(*我认为*是一个合理的用例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5039349/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!