小编Ste*_*son的帖子

删除后,ConcurrentLinkedQueue $ Node仍保留在堆中

我有一个多线程应用程序编写和读取ConcurrentLinkedQueue,它在概念上用于支持列表/表中的条目.我最初为此使用了ConcurrentHashMap,效果很好.需要跟踪订单条目的新要求,因此可以在最早的第一个订单中删除它们,具体取决于某些条件.ConcurrentLinkedQueue似乎是一个不错的选择,功能上它运作良好.

可配置数量的条目保存在内存中,当达到限制时提供新条目时,将以最早的第一顺序搜索队列以查找可以删除的队列.系统不会删除某些条目并等待客户端交互.

似乎正在发生的事情是我在队列的前面有一个条目,比如100K条目之前.队列似乎具有有限数量的已配置条目(size()== 100),但在分析时,我发现内存中有~100K ConcurrentLinkedQueue $ Node对象.这似乎是设计上的,只是浏览了ConcurrentLinkedQueue的源代码,一个删除只是删除了对存储对象的引用,但留下链接列表进行迭代.

最后我的问题是:是否有一种"更好"的懒惰方式来处理这种性质的集合?我喜欢ConcurrentLinkedQueue的速度,我无法承受在这种情况下似乎可能出现的无界泄漏.如果没有,似乎我必须创建第二个结构来跟踪订单,并可能有相同的问题,加上同步问题.

java heap concurrency java.util.concurrent

9
推荐指数
1
解决办法
4066
查看次数

如何使用RowStatus?

我正在从MIB编写SNMP管理器和模拟SNMP代理(以测试管理器).我有一个类似于下面的表,管理员应该能够添加/删除行.使用RowStatus执行此操作的习惯方法是什么?RowStatus是第一个设置的吗?PDU中可以包含其他OID吗?

我最初的用例是启动时表是空的.所以,如果我发送这样的SET PDU:

createStuffEntry.1.1.1 = 1
createStuffEntry.2.1.1 = 1
createStuffEntry.3.1.1 = 99
createStuffEntry.4.1.1 = "Dustbunnies"
createStuffEntry.5.1.1 = 5
Run Code Online (Sandbox Code Playgroud)

这应该适用于下面的定义吗?如果省略cRowStatus会发生什么?

createStuffTable OBJECT-TYPE
    SYNTAX  SEQUENCE OF CreateStuffEntry
    ACCESS  not-accessible
    STATUS  mandatory
    DESCRIPTION
            "A table for creating stuff."
    ::= { parentGroup 1 }

createStuffEntry OBJECT-TYPE
    SYNTAX  CreateStuffEntry
    ACCESS  not-accessible
    STATUS  mandatory
    DESCRIPTION
            "An entry for building a stuff to create."
    INDEX   { cPlanID,  cID }
    ::= { createStuffTable 1 }

CreateStuffEntry ::=
    SEQUENCE {
        cPlanID
            INTEGER,
        cID
            INTEGER,
        cTemplateID
            INTEGER,
        cStuffName
            DisplayString,
        cRowStatus …
Run Code Online (Sandbox Code Playgroud)

snmp mib

5
推荐指数
1
解决办法
1万
查看次数

如何用更惯用的东西替换这个循环?

我一直在努力完成"勇敢和真实的Clojure",我只花了一个小时盯着这个循环试图将它变成一个简化或其他"更漂亮"的循环.我正试图在循环中尝试击中目标数字并提前返回时被绊倒.这里的想法是随机生成一个数字(基于大小)并返回该数字的正文部分.从概念上讲,我正在考虑将列表分成两部分并返回"断点".我还可以设想在它上面进行映射并添加"大小索引"然后进行过滤.我觉得我错过了一些简单的东西(我一直在努力减少).

(defn hit
  "Expects a sequence of maps which have a :name and :size"
  [body-parts]
  (let [body-part-size-sum (reduce + 0 (map :size body-parts))
       target (inc (rand body-part-size-sum))]
    (loop [[part & rest] body-parts
           accumulated-size (:size part)]
      (if (> accumulated-size target)
         part
        (recur rest (+ accumulated-size (:size part)))))))
Run Code Online (Sandbox Code Playgroud)

functional-programming idiomatic clojure

2
推荐指数
1
解决办法
433
查看次数