Javet icon indicating copy to clipboard operation
Javet copied to clipboard

在关闭JavetEnginePool的时候,警告还有对象没有被回收

Open hanChao-IsBigPenisBoy opened this issue 10 months ago • 3 comments

  1. 在我手动对V8Runtime进行close或者 对 JavetEnginePool进行close的时候,控制台会警告我还有对象没被回收,我使用的v8Runtime.getGlobalObject().set('key', new Value()) 添加的对象, 当我使用断点进去警告的地方,我发现除了我手动添加的对象,还有一些不知道哪里来的对象,也没有被回收,就很奇怪,我在想有没有一个JavetEnginePool或者是v8Runtime提供的一个方法,可以直接销毁我手动添加的对象。
  2. 还有一个问题,我发现JavetEnginePool是通过new出来的,当我没有关闭pool的时候,当我在使用enginePool.getEngine()获取一个新的engine的后,执行相同的代码,居然给我报错说是 定义的变量名称已经存在,我感觉这个应该不太合理,既然我都重新获取了engine,按理说应该进行上文隔离才对。所以我写的这种方式是错误的吗

Image

hanChao-IsBigPenisBoy avatar Feb 13 '25 08:02 hanChao-IsBigPenisBoy

I guess you misunderstood how a thread pool works.

caoccao avatar Feb 13 '25 16:02 caoccao

I guess you misunderstood how a thread pool works.

好的,那我明白了,并且我也把pool加入了销毁的方法中, 但是:我想问一下,我手动设置v8Runtime.getGlobalObject().set("key","value"); 我已经在js代码执行完毕后,主动销毁了手动设置的object,但是控制台还是提示有12个object未被销毁,我在想是否有一个方法,在js代码执行完毕后,直接全部销毁所有的object,作为测试,我添加了很多操作,并且我在js中加入System.gc() 但是效果不是很明显,求指导

hanChao-IsBigPenisBoy avatar Feb 14 '25 02:02 hanChao-IsBigPenisBoy

Please review the docs, best practices and unit test.

caoccao avatar Feb 14 '25 07:02 caoccao