当前位置: 首页 > 知识库问答 >
问题:

如何销毁Java脚本引擎实例?

程飞星
2023-03-14

我正在使用Java8。我不是java专家(自从10年前上大学以来就没有研究过java)

我创建了一个ScriptEngine的实例(Nashorn,如果有必要的话)。我用它来评估几个javascript文件

这个脚本在自己的小javascript世界里运行得非常愉快。我喜欢。

我还运行了一个文件系统监视服务,以防我的一些java脚本被修改。当它们被修改时,我创建一个新的ScriptEngine,并使用新的ScriptEngine对象评估新版本的javascript文件

我的问题是,一旦我创建了新的脚本引擎,我就不能“杀死”旧的脚本引擎。旧脚本一直在无限期地运行。

我真的想释放旧scriptEngine对象所使用的资源。我希望它停止做它正在做的事情(因为如果它们都尝试做相同的事情,它可能会与新实例冲突)。

所以如何完全消除旧的脚本引擎,包括它内部产生的任何线程?

共有1个答案

郎星汉
2023-03-14

好的,线程泄漏的老问题。你有线程的句柄吗?是否有东西继承了线程?好的,然后是这样的:

private void stopThread(Thread thread) {
    final Thread moribund = thread;
    if (moribund != null) {
        thread = null;
        moribund.interrupt();
    }
}

也许会有帮助。

 类似资料:
  • 我有一个并发运行代码,每次运行都需要在文件中记录一些内容。每个执行-新的故事与唯一的文件。 事先谢谢你,安德烈!

  • 问题内容: 我在接受以下采访时遇到了这个问题: 如何在Java中销毁对象? 答案应该是e? 如果e不在那里怎么办?然后 ?显然,c不是答案。a和b将为整个应用程序执行gc(问题需要一个对象)。我认为这是d,因为finalize()刚好在gc之前被调用(但是是否有必要在finalize gc之后被调用?)还是我错了?您必须在那里回答这个问题吗? 问题答案: 答案E是正确答案。如果E不存在,您将很快用

  • 问题内容: 据我所知(很少),给出了两种方法: 然后: 其他更好的方法?我在这里劈头发吗? 问题答案: 您正在寻找。 但是要考虑到 您不能显式销毁对象。 它会保留在那里,但是如果您取消设置对象,并且脚本将PHP推入内存限制,则不需要的对象将被垃圾回收。我会选择(而不是将其设置为null),因为它似乎具有更好的性能(未经测试,但已记录在PHP官方手册的注释中)。 也就是说,请记住,PHP总是在页面被

  • 问题内容: 字符串是不可变的。当我声明: 两个对象都指向同一位置。那么,如何从字符串池中销毁该“ abc”引用呢? 我的用例是,我正在开发内存更少的硬件应用程序,为此,我需要从字符串池中清除引用以节省内存。 问题答案: 不,通常您不能手动“从Java中的字符串池中破坏引用”。 我想为什么要定位它的主要原因是为了避免内存不足错误。在Java中,有6天时间,所有被嵌入的字符串都存储在PermGen中,

  • 一个非常小的script脚本引擎,可以同时在j2me / j2se / c++ platform上面运行 它的目标是使用这个脚本引擎便于开发一个更加灵活的j2me 游戏这个脚本有点像BASIC这东西不错,是一个开源的脚本引擎,大家可以学习里面的思想里面其中带了一个例子,是3子棋。感觉挺不错的。这东西在SF也挺活跃的。

  • 我必须把一个项目从Java8转移到Java17。 我可以解决大多数问题,但它包含一种方法,我使用ScriptEngineManager来计算一个数学术语。 在Java8中,它可以根据需要工作,但在Java17中始终为空。 根据谷歌的说法,Java17不再支持JavaScript引擎。 由于项目限制,我不允许使用第三方库。 在Java17中有没有合适的方法来处理这个问题?