Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 取消注册M3模型_Memory_Rascal - Fatal编程技术网

Memory 取消注册M3模型

Memory 取消注册M3模型,memory,rascal,Memory,Rascal,从注册表中注销M3模型的当前首选方式是什么 在我的项目中,我正在使用Rascal分析大约100个大型java程序,我的JVM正在慢慢耗尽内存。我在注册表的旧版本中找到了unregisterProject方法,并尝试使用此代码,但我认为它工作不正常 public void unregisterProject(loc project, M3 model) { rel[str scheme, loc name, loc src] perScheme = {<name.sch

从注册表中注销M3模型的当前首选方式是什么

在我的项目中,我正在使用Rascal分析大约100个大型java程序,我的JVM正在慢慢耗尽内存。我在注册表的旧版本中找到了unregisterProject方法,并尝试使用此代码,但我认为它工作不正常

public void unregisterProject(loc project, M3 model) {
    rel[str scheme, loc name, loc src] perScheme 
      = {<name.scheme, name, src> | <name, src> <- model.declarations};

    for (str scheme <- perScheme<scheme>) {
           unregisterLocations(scheme, project.authority);
    }
}
public void注销项目(loc项目,M3型号){
rel[str方案、loc名称、loc src]方案

={|此代码可能工作得更好。它首先收集所有已注册的方案和权限对(并删除重复项),然后调用unregisterLocations函数调用剩余的唯一对

public void unregisterProject(loc project, M3 model) {
    schemesAndAuthorities 
      = {<name.scheme, name.authority> | <name, src> <- model.declarations};

    for (<scheme, authority> <- schemesAndAuthorities) {
           unregisterLocations(scheme, authority);
    }
}
public void注销项目(loc项目,M3型号){
方案和权限

= {|嗨Felix;你认为有缺陷吗?如果有,你观察到了什么?什么时候?如果有,也许你可以在这里提交一个问题,并附上你的发现:这将非常感谢。旧代码确实看起来有缺陷。我将尝试编写一个更好的版本。我的代码不应该有任何副作用,因为所有存储的数据都应该被垃圾清理掉收集。有没有更简单的方法来查看内存使用情况(除了查看Eclipse的堆状态之外)?我使用Eclipse的内存分析器提取了一些堆转储,但找不到明显的罪魁祸首。我的下一个建议是使用堆转储;但模型注册是“内存泄漏”可以说,是设计上的,我认为你的解决方案是正确的。谢谢,我会尝试一下。我已经用几个项目进行了两次测试,新方法似乎效果更好(如果旧方法有效的话)。但是,这是两个测试,如果没有确切的内存使用情况,可能很难确定有效性。谢谢!这很难看到。在eclipse中,您可以打开“显示堆状态”在preferences(首选项)屏幕中,这应该会给出一些指示。是的,我使用了堆状态来衡量内存使用情况。我一直在运行我的程序,注销代码正常工作。我仍然看到每个处理过的项目的内存都在增加,但我不确定这是否是由于注册问题。我确信可以通过编写一些单元测试!如果可以将其添加到标准库中,那就太好了,因为Registry类在注释中引用了unregisterProject方法。这就是我发现这一点的原因。