clojure 应用程序使用 eval 泄漏内存

2024-02-11

我的 clojure 应用程序评估单独定义的代码.edn文件在运行时,即如果.edn文件更改后,所包含的函数定义将重新加载到原子中,该原子不断用于计算。

如果不受限制的话,应用程序似乎会在一段时间后填满 JVM 的元空间(无限制)。堆空间使用情况正常。

我使用“YourKit”分析器来追踪泄漏。似乎大多数分配,包括分析器显示“无法从垃圾收集器根访问”的分配,都来自eval call:

(defn eval-edn [e params_ dynparams_]
  (let [input e
        pairs (seq input)]
    (binding [*ns* (find-ns 'myapp.core)
              moods (:moods input)
              last-moods @state/moods-atom
              effects (:effects input)
              last-effects @state/effects-atom
              params params_
              dynparams dynparams_
              param-stats @state/coreparam-stats]
      (eval input))))

Where params and dynparams是动态变量。

The .edn文件看起来像这样:

{:moods {:happiness 
          (* (:happiness:factor dynparams)
             (* 0.5 (Math/sin (* (/ (- (:weather:temperature params 0) 10) 30) 
                                 Math/PI))))
; ...
}}

具体来说,内存快照将显示数千个类型的对象myapp.core$evalN.invoke(), where N每个新调用都会增加一些索引。

我读过eval应该尽可能避免,但我不知道如何在没有它的情况下在运行时在 JAR 可执行文件中重新加载代码。

我怎样才能确定所有的内存使用eval是否正确清理?


你不应该使用eval。它不适用于您的用例。使用tools.reader反而。

https://github.com/clojure/tools.reader https://github.com/clojure/tools.reader

详细讨论在这里:

http://www.learningclojure.com/2013/02/clojures-reader-is-unsafe.html?m=1 http://www.learningclojure.com/2013/02/clojures-reader-is-unsafe.html?m=1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

clojure 应用程序使用 eval 泄漏内存 的相关文章

  • fn 和 fn* 有什么区别?

    在 Clojure 中 fn 和 fn 有什么区别 当我在语法中引用使用 宏创建的函数时 我看到 fn 例如 在 REPL 中 user gt inc fn p1 342 343 auto clojure core inc p1 342 3
  • 如何在 Clojure 中更新原子的向量元素?

    我有一个矢量原子 我想更新一个本身就是地图的条目 def vector atom atom swap vector atom conj id 1 name myname 我该如何只更新该成员 在可变的 Java 领域的思维方式中 我会做这样
  • 如何创建 Clojure 拉链

    我如何使用 Clojure Zipper 创建以下图表 vector zip A B C D E F 我努力了 vector zip A B C D E F 它返回 A B C D E F nil 这样对吗 是的这是对的 对您的代码的一些测
  • Chrome 中的 FileReader 内存泄漏

    我有一个具有文件上传功能的网页 上传以 5MB 块执行 我想在将每个块发送到服务器之前计算其哈希值 块表示为Blob https developer mozilla org en docs Web API Blob对象 为了计算哈希值 我将
  • 为什么“(def 元音?(set“aeiou”))”有效?

    我正在看优秀的 Clojure 教程here http ociweb com jnb jnbMar2009 html 在其中一个示例中 它具有如下所示的 Clojure 代码 def vowel set aeiou 这使得元音对于元音返回
  • 谷歌模拟全局模拟对象内存泄漏

    我正在使用 VS2005 和 C 使用 google mock 进行单元测试 我在单元测试中有一个全局自由函数 我使用以下代码来模拟自由函数 NiceMock
  • 在 Clojure 中递归反转序列

    我想在 Clojure 中反转序列而不使用reverse函数 并递归地执行此操作 这是我想出的 defn reverse recursively coll loop r rest coll acc conj first coll if co
  • 为什么内存泄漏很常见?

    是否是由于程序员对内存如何动态分配和释放的基本误解造成的 是因为自满吗 不 这是因为跟踪每个内存分配需要进行大量的计算 谁负责分配内存 谁负责释放它 确保您使用相同的 API 来分配和释放内存等 确保您捕获每个可能的程序流并在每种情况下进行
  • 如何给objc_exception_throw添加断点?

    这是布拉德 拉森对此的回答SO https stackoverflow com questions 1093999 stack trace or more info on unhandled exception in xcode iphon
  • 线程关闭期间 Win64 Delphi RTL 中的内存泄漏?

    很长一段时间以来 我注意到我的服务器应用程序的 Win64 版本存在内存泄漏问题 虽然 Win32 版本工作正常 内存占用相对稳定 但 64 位版本使用的内存却定期增加 可能 20Mb 天 没有任何明显的原因 不用说 FastMM4 没有报
  • numpy.ndarray 对象不被垃圾回收

    在尝试微调某些 C C 函数的 Python 绑定中的一些内存泄漏时 我发现了一些与 Numpy 数组的垃圾收集相关的奇怪行为 为了更好地解释这种行为 我创建了几个简化的案例 该代码是使用memory profiler 其输出紧随其后 当涉
  • 1 MB 或更多的 Java 字节数组占用 RAM 的两倍

    在 Windows 10 OpenJDK 11 0 4 x64 上运行以下代码会生成输出used 197 and expected usage 200 这意味着包含 100 万个元素的 200 个字节数组大约占用 200 个字节 200MB
  • C++ 构造函数抛出异常时销毁对象的成员变量

    这个问题是基于 Scott Meyers 在他的书 更有效的 C 中提供的一个例子 考虑下面的类 A class to represent the profile of a user in a dating site for animal
  • Clojure 宏:从地图创建本地变量 [重复]

    这个问题在这里已经有答案了 我有这个示例代码 我通过迭代映射的键值对来创建变量 defmacro block bindings body let mapcat fn k v if symbol k k symbol name k v bin
  • 是否有一个 clojure 函数可以“连接”两个地图列表?

    我正在寻找一个类似于sql中的join的连接函数 例如 这是两个地图列表 def a user id 1 name user 1 user id 2 name user 2 def b user id 2 email e 2 user id
  • Clojure Web 应用程序 - 我从哪里开始?

    最近我一直在研究 Clojure 我喜欢这门语言 我想看看我是否可以在其中制作一个小型网络应用程序 只是为了挑战自己 但是 我完全没有设置任何与 Java 相关的 Web 应用程序的经验 事实上 我对 Java 并没有太多的经验 我从哪说起
  • Clojure读行函数问题

    我试图在我的 Clojure 程序中获取控制台输入 但是当它到达程序的该部分时它给我这个错误 Exception in thread main java lang ClassCastException clojure lang LineNu
  • NodeJS 内存增长 - (系统)内存泄漏?

    我在我们的生活环境中遇到了奇怪的内存泄漏 其中 system 堆中的对象不断增长 堆转储 Here is a memory dump where the memory usage grew to 800MB 请注意 该内存保留在Genera
  • 如何跟踪数据库连接泄漏

    我们有一个应用程序似乎存在连接泄漏 SQL Server 表示已达到最大池大小 我独自一人在我的开发机器上 显然 只需导航应用程序 我就会触发此错误 SQL Server 活动监视器显示大量正在使用我的数据库的进程 我想查找哪些文件打开连接
  • DOMDocument PHP 内存泄漏

    在 MAC 上的 MAMP 下运行 PHP 5 3 6 内存使用量每调用 x 次 3 到 8 次 就会增加 直到脚本因内存耗尽而终止 我该如何解决 libxml use internal errors true while true dom

随机推荐

  • 如何在 Emacs 中检查 Python 代码的语法而不实际执行它?

    Python 的 IDLE 有 检查模块 Alt X 来检查语法 无需运行代码即可调用该语法 在 Emacs 中是否有等效的方法来执行此操作 而不是运行和执行代码 python m py compile script py
  • Java N/IO 中的行分隔符?

    使用以下命令写入 txt 文件时如何插入新行java nio file 以下代码生成一个只有一行的txt文件ABCDEF 而不是两条单独的线ABC and DEF public static void main String args th
  • Python Spark从数据框中提取字符

    我在 Spark 中有一个数据框 如下所示 ID Column 1 STRINGOFLETTERS 2 SOMEOTHERCHARACTERS 3 ANOTHERSTRING 4 EXAMPLEEXAMPLE 我想做的是从列中提取前 5 个
  • 通过虚拟盒提供的 ember-cli 违反了内容安全策略

    我有一个新鲜的ember cli v 0 1 2应用 我在虚拟框中提供 ember 并通过仅主机配置的网络适配器从主机访问网页 地址为192 168 56 102 当我跑步时ember serve从虚拟盒子中访问192 168 56 102
  • Grabwidget 即使放大也能获取完整视图

    我在用QPixmap QPixmap grabWidget QWidget widget int x 0 int y 0 int width 1 int height 1 抓住视口QPixmap object 在某些情况下 即使屏幕放大到一
  • 为什么如果类的成员是引用,则复制对象是非法的?

    我遇到一个测验 指出下面第 18 行中的代码格式不正确 因为 当需要复制的成员之一是引用时 使用隐式定义的赋值运算符是格式不正确的 我无法理解这一点 为什么无法复制引用 为什么16号线是合法的 第 16 行与第 18 行非常相似 复制构造函
  • Socket.io 中的身份验证

    我将尝试验证 socket io 上的连接 目前 用户首先通过 REST API 进行身份验证 然后 我向用户发送JsonWebToken与经过身份验证的用户的用户名 打开客户端和服务器之间的连接后 我的计划是暂时从已连接套接字列表中删除该
  • GEKKO:不响应约束也不求解 obj 函数

    以下是与这个问题相关的内容 使用 Gekko 的 MPC 和 ARX 模型 https stackoverflow com questions 63727310 mpc with arx model using gekko 63731362
  • WPF 中的多行组合框

    我试图找到 WPF 的多行用户可编辑组合框的示例 我们已经使用自定义模板尝试了各种方法 但无法使其工作 我们试图解决的具体问题是在下拉列表中显示地址列表 用户可以同时输入新地址 在组合框中输入内容没有问题 但多行却让我们丧命 如果我们想在
  • 如何绘制不在道路上的路线,MKMapView

    所以我一直在尝试使用 MKMapView 和叠加层来创建 不在道路上的道路 这可能听起来很奇怪 但我想做的是 在我的 iOS 应用程序中 我想绘制特定酒店提供的短途旅行路线 但是到目前为止我发现的所有帖子都集中在现有道路上 因为短途旅行会经
  • “外部 IP 地址”和“公共 IP 地址”这两个术语是同义词吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 外部IP地址与公共IP地址以及内部I
  • 使用 for in 循环使类可迭代?

    我有一个自定义类 class MyArrayClass 该类是一个自定义列表实现 我想做以下事情 var arr MyArrayClass MyArrayClass arr append first arr append second ar
  • 解释图像的`srcset`中的`w`

    据我了解 srcset用于根据以下内容确定要加载的图像dpi设备的 我在 Google Web Fundamentals 上看到了这个例子 它似乎使用了w单位连同vw单位恰好是视口宽度的 1 img src lighthouse 200 j
  • Eclipse IDE 中的 C++ 错误“nullptr 未在此范围内声明”

    我正在运行 Eclipse Helios 并且安装了 g 4 6 希望我没有错 g 4 6 实现了 C 11 功能 我创建了一个使用 nullptr 和 auto 关键字的 C 项目 构建出现以下错误 filename cpp 13 13
  • 如何在 Brackets 中设置 jslint ES6 指令?

    我收到此错误 需要一个标识符 但看到的是 const 我正在使用括号文本编辑器 我找到了这个答案 您需要指定 es6 指令 请参阅 JSLint 帮助 但我不知道如何在括号中指定 es6 指令 这是我的代码 const singleQuot
  • 如何在 Java 中启用客户端 TLS 会话重用 [重复]

    这个问题在这里已经有答案了 我有一个 Java 客户端 它可能会创建到同一服务器的多个会话 TLS 协议具有缓存会话密钥的功能 从而避免对每个连接进行昂贵的 PKI 处理 但我无法让它真正发挥作用 openssl s client reco
  • 如何在 C++ 中从 UTexture2D 读取数据

    我正在尝试从虚幻引擎 C 项目中填充的 UTexture2D 读取像素数据 在我在这里发布问题之前 我尝试使用此链接中描述的方法 https answers unrealengine com questions 25594 accessin
  • 为区域注册过滤器

    有没有办法为特定区域注册过滤器 例如下面的代码全局注册授权过滤器 强制进行身份验证 services AddMvc config gt var policy new AuthorizationPolicyBuilder RequireAut
  • URL 的锚点部分是否发送到 Web 服务器?

    比如说 有一个网址 http www example com hello 会不会 hello根据标准 是否将东西发送到网络服务器 现代浏览器如何运作 这个问题的答案与以下问题的答案类似检索 ASP NET URL 中的锚链接 https s
  • clojure 应用程序使用 eval 泄漏内存

    我的 clojure 应用程序评估单独定义的代码 edn文件在运行时 即如果 edn文件更改后 所包含的函数定义将重新加载到原子中 该原子不断用于计算 如果不受限制的话 应用程序似乎会在一段时间后填满 JVM 的元空间 无限制 堆空间使用情