- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要使用 Scala 实现一个 DSL(域特定语言),这个 DSL 将在 Scala 解释器(scala.tools.nsc.interpreter)中解释。问题是解释器使用的内存不断增加,直到抛出 outOfMemory 异常。每次我要执行一行 DSL 时,我都无法重新初始化解释器,因为解释器需要一段时间才能加载。我不能只调用reset(),因为我需要跟踪解释器执行环境中的一些数据。
即使我执行以下操作,也会发生内存泄漏:
while (true)
{
interpreter.interpret("println(4 + 5)")
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at ch.epfl.lamp.util.ByteArray.<init>(ByteArray.java:24)
at ch.epfl.lamp.fjbg.JCode.<init>(JCode.java:47)
at ch.epfl.lamp.fjbg.JExtendedCode.<init>(JExtendedCode.java:113)
at ch.epfl.lamp.fjbg.FJBGContext.JCode(FJBGContext.java:122)
at ch.epfl.lamp.fjbg.JMethod.<init>(JMethod.java:52)
at ch.epfl.lamp.fjbg.FJBGContext.JMethod(FJBGContext.java:87)
at ch.epfl.lamp.fjbg.JClass.addNewMethod(JClass.java:246)
at scala.tools.nsc.backend.jvm.GenJVM$BytecodeGenerator.genMethod(GenJVM.scala:755)
at scala.tools.nsc.backend.jvm.GenJVM$BytecodeGenerator$$anonfun$genClass$7.apply(GenJVM.scala:307)
at scala.tools.nsc.backend.jvm.GenJVM$BytecodeGenerator$$anonfun$genClass$7.apply(GenJVM.scala:307)
at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
at scala.collection.immutable.List.foreach(List.scala:45)
at scala.tools.nsc.backend.jvm.GenJVM$BytecodeGenerator.genClass(GenJVM.scala:307)
at scala.tools.nsc.backend.jvm.GenJVM$JvmPhase$$anonfun$run$4.apply(GenJVM.scala:86)
at scala.tools.nsc.backend.jvm.GenJVM$JvmPhase$$anonfun$run$4.apply(GenJVM.scala:86)
at scala.collection.mutable.HashMap$$anon$2$$anonfun$foreach$3.apply(HashMap.scala:102)
at scala.collection.mutable.HashMap$$anon$2$$anonfun$foreach$3.apply(HashMap.scala:102)
at scala.collection.Iterator$class.foreach(Iterator.scala:660)
at scala.collection.mutable.HashTable$$anon$1.foreach(HashTable.scala:157)
at scala.collection.mutable.HashTable$class.foreachEntry(HashTable.scala:190)
at scala.collection.mutable.HashMap.foreachEntry(HashMap.scala:43)
at scala.collection.mutable.HashMap$$anon$2.foreach(HashMap.scala:102)
at scala.tools.nsc.backend.jvm.GenJVM$JvmPhase.run(GenJVM.scala:86)
at scala.tools.nsc.Global$Run.compileSources(Global.scala:953)
at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.compileAndSaveRun(IMain.scala:756)
at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.compile(IMain.scala:731)
at scala.tools.nsc.interpreter.IMain$Request.compile(IMain.scala:873)
at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:576)
at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:543)
at com.ericsson.ims_dsl.IMS_Interpreter$$anonfun$e$1.apply(IMS_Interpreter.scala:50)
at com.ericsson.ims_dsl.IMS_Interpreter$$anonfun$e$1.apply(IMS_Interpreter.scala:50)
at scala.tools.nsc.interpreter.IMain.beQuietDuring(IMain.scala:200)
最佳答案
每次调用interpret
方法,请求被存储。因此,如果您尝试无限次调用此方法,您应该会遇到麻烦。所以这不是一个真正的错误。
您可以通过增加 JVM 最大堆大小来增加崩溃前可能的迭代次数......您可能需要计算可能的调用次数以检查它是否符合您的目标。
关于scala.tools.nsc.interpreter 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7586188/
解释用于评估 haskell 表达式吗?如果可以,我该如何使用它? Language.Haskell.Interpreter> :t interpret interpret :: (Data.Type
解释用于评估 haskell 表达式吗?如果可以,我该如何使用它? Language.Haskell.Interpreter> :t interpret interpret :: (Data.Type
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我今天正在帮助某人从我们作为 txt 文件读入的 pdf 文件中正则表达式一些信息。不幸的是,tm 包 readPDF 功能当时无法正常工作,尽管通过一些修改我们能够让它正常工作。当我们正则表达式从
我们以 Python 为例。如果我没记错的话,当你用它编程时,计算机首先将代码“翻译”成 C。然后再从 C 到汇编。汇编是用机器代码编写的。 (这只是我对此的一个模糊想法,所以如果我错了,请纠正我)但
这个问题在这里已经有了答案: 9年前关闭。 Possible Duplicate: Bootstrapping a language 为以目标语言编写的给定语言(例如 PyPy)配备解释器的重要性是什
这个问题在这里已经有了答案: 12年前关闭。 Possible Duplicate: What’s with the love of dynamic Languages 我已经阅读了this ,但我不
我有一个AST(抽象语法树),现在我想通过给它2个或多个数字来测试我的编译器,并期望输出带有数学运算结果的计算器(例如计算器)。 我的问题是,构建解释器的最佳方法是什么? AST节点的访问是递归的,因
这个问题在这里已经有了答案: What is the exact definition of a Metacircular Interpreter? (4 个回答) 3年前关闭。 同人可以向我解释一下
我正在研究我自己的玩具编程语言。现在我正在解释来自 AST 的源语言,我想知道编译为字节码然后解释它可以为我提供什么优势。 目前我想到了三件事: 数百次遍历语法树可能比在数组中运行指令慢,特别是如果数
我正在试验一个 3 加速度计分线板。 X 轴和 Y 轴很容易控制,但 Z 轴有点神秘。我试图找到一种方法来解释我的代码中的数据,以在设备在空中抬起时增加输出,并在降低时减少输出。这可能吗?如果是这样,
我是一个刚从其他IDE转到Pycharm的新用户。 我有一个关于交互式python解释器的问题,这是我运行脚本后可以键入变量以检查变量的“窗口”。 Pyscripter有一个叫做“Python解释器”
我记得遇到过一个网站,我可以在其中输入一些代码,它会编译并运行它(或出错),显示任何控制台输出。它接受各种解释型和非解释型语言——我特别记得我可以使用 C(也许也可以使用 Python...我不完全确
我问这个问题是因为我对解释器开发还比较陌生,我想在重新发明轮子之前了解一些基本概念。 我想到了存储在数组中的所有变量的值,该数组构成当前作用域,在进入函数时,数组将被交换,并将原始数组放入某种堆栈中。
我正在考虑在基于 Actor 的语言的解释器中使用类似 CPS 的东西。 函数参数在变体数组中传递,延续在同一个数组中返回,所以一个简单的函数 def add (x,y) => x + y 所以来自读
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
有没有办法改变对象在 Python 解释器中的显示方式?例如: >>> test = myobject(2) >>> test 'I am 2' 或 >>> test = myobject(2) >>
REPL 和解释器之间有什么技术区别吗? 最佳答案 交互式解释器使用 REPL。解释器不需要有一个。例如,您可以在非交互模式下(在文件上)运行 Python,并且它不会使用 read-eval-pri
在我看来,如果您使用解释性语言编写软件,那么销售软件一定很困难,因为购买它的任何人都可以毫不费力地对其进行编辑/更改/转售。 你如何解决这个问题?我有几个 PHP 应用程序,我不愿意出售给人们,因为他
我正在学习有关抽象解释的类(class),但是我还没有看到有关该理论如何映射到实际代码的任何示例。 我正在寻找简短的代码示例,在这些示例中,我最好不必使用整个编译器。分析不一定有用,我只想看一个示例,
我是一名优秀的程序员,十分优秀!