以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 Semantic Web(语义Web)/描述逻辑/本体 』  (http://bbs.xml.org.cn/list.asp?boardid=2)
----  protege 3.1运行时内存的问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=2&rootid=&id=26184)


--  作者:shrimpLucky
--  发布时间:1/6/2006 10:10:00 AM

--  protege 3.1运行时内存的问题
使用protege 3.1.1+OWL-S Editor插件,将已有的WSDL文件引入,以生成OWL文件,可是对一个operation进行importWSDL时,花费好长时间,有半个小时,再处理第二个operation时,系统往往提示严重错误,OutOfMemory,请问最少要多大内存啊?
谁也碰到过类似问题么?

PS: P4 2.6+256M (集成显卡)
    windows2K pro
谢谢


--  作者:admin
--  发布时间:1/6/2006 9:34:00 PM

--  
256可能少了点
至少512
推荐1G内存
另外,Java本来就不快,所以不完全是内存的原因
--  作者:iamwym
--  发布时间:1/7/2006 7:16:00 AM

--  
玩这个东西,2g内存都不嫌多,不过admin说得没错,应该不是内存不够大的问题,多数是死循环了。
--  作者:shrimpLucky
--  发布时间:1/16/2006 10:57:00 AM

--  
哪那么多内存加啊?
任务没有完成,都不敢和老板要啊
--  作者:jpz6311whu
--  发布时间:1/16/2006 6:59:00 PM

--  
"系统往往提示严重错误,OutOfMemory"
你说的这个错误是Windows报错,还是java虚拟机报错,还是protege报错???
针对不同的情况应该有相应的解决方法。
我们实验室机器配置也比较低,大部分是256MB,但是勉强还能用,大概是用protege的owl插件处理10M左右的owl文件,实例个数13000左右。
OWL-S Editor倒是没有用过。。。。
--  作者:xirufeng
--  发布时间:1/16/2006 8:06:00 PM

--  
根据我的OWL文件所建立的树,大概有200多个接点
每次显示树的时候,奇慢无比,是OWL的问题,还是其他的问题?好象调用JENA类的时候会很慢,唉……
我用protete的时候,直接生成OWL文件,还用什么插件才更有效么?这个问题不太清楚。
--  作者:iamwym
--  发布时间:1/16/2006 8:12:00 PM

--  
java的问题,不过一般内存不够大多是什么地方出了问题,不过无论如何512是肯定要的
--  作者:jpz6311whu
--  发布时间:1/16/2006 9:35:00 PM

--  
以下是引用xirufeng在2006-1-16 20:06:00的发言:
根据我的OWL文件所建立的树,大概有200多个接点
每次显示树的时候,奇慢无比,是OWL的问题,还是其他的问题?好象调用JENA类的时候会很慢,唉……
我用protete的时候,直接生成OWL文件,还用什么插件才更有效么?这个问题不太清楚。


你说的这个树,是protege里面的树,还是你自己写的程序生成的树?
--  作者:xirufeng
--  发布时间:1/16/2006 10:38:00 PM

--  
是我从owl文件中把信息抽取出来生成的树。
为什么程序那么慢啊

以下是引用jpz6311whu在2006-1-16 21:35:00的发言:
[quote]以下是引用xirufeng在2006-1-16 20:06:00的发言:
根据我的OWL文件所建立的树,大概有200多个接点
  每次显示树的时候,奇慢无比,是OWL的问题,还是其他的问题?好象调用JENA类的时候会很慢,唉……
  我用protete的时候,直接生成OWL文件,还用什么插件才更有效么?这个问题不太清楚。
[/quote]
你说的这个树,是protege里面的树,还是你自己写的程序生成的树?


--  作者:iamwym
--  发布时间:1/16/2006 11:34:00 PM

--  
也有可能你的算法效率比较低……
--  作者:xirufeng
--  发布时间:1/17/2006 10:09:00 AM

--  
这两段程序的效率有天壤之别:
程序一:
for (Iterator i=seller.listSubClasses();i.hasNext();)
    {
      OntClass c = (OntClass) i.next();
      for(int j=coll.size()-1;j>=0;j--)
      {
       nodeParentName=c.getSuperClass().getLocalName();
       String iNodeInfo=((TreeInfo)coll.get(j)).getNodeName();
       int iNodeId=((TreeInfo)coll.get(j)).getNodeId();
       if(!nodeParentName.equals(iNodeInfo))
         continue;
       if(nodeParentName.equals(iNodeInfo))
       info.setParentId(iNodeId);
       if(info.getParentId()!=-1)
         break;
      }
      coll.add(info);
      childId++;
}

程序二:
for (Iterator i=seller.listSubClasses();i.hasNext();)
    {
      OntClass c = (OntClass) i.next();
      for(Iterator inner=c.listSubClasses(true);inner.hasNext();)
      {
        OntClass cinner=(OntClass)inner.next();
        nodeName=cinner.getLocalName();
        nodeinfo.put(nodeName,nodeParentName);
        info=new TreeInfo();
        info.setNodeId(childId);
        info.setParentId(parentId);
        info.setNodeName(nodeName);
        info.setUrl(nodeName);
        childId++;
        coll.add(info);
     }
      parentId++;
    }
我搞不清楚这是为什么。


--  作者:iamwym
--  发布时间:1/17/2006 8:56:00 PM

--  
如果我没有猜错,第二个程序比较慢吧
因为你每个循环都要定义一个ontclass的instance,这样是很贵的。
--  作者:jpz6311whu
--  发布时间:1/18/2006 7:26:00 PM

--  
以下是引用xirufeng在2006-1-17 10:09:00的发言:
这两段程序的效率有天壤之别:
程序一:
for (Iterator i=seller.listSubClasses();i.hasNext();)
     {
       OntClass c = (OntClass) i.next();
       for(int j=coll.size()-1;j>=0;j--)
       {
        nodeParentName=c.getSuperClass().getLocalName();
        String iNodeInfo=((TreeInfo)coll.get(j)).getNodeName();
        int iNodeId=((TreeInfo)coll.get(j)).getNodeId();
        if(!nodeParentName.equals(iNodeInfo))
          continue;
        if(nodeParentName.equals(iNodeInfo))
        info.setParentId(iNodeId);
        if(info.getParentId()!=-1)
          break;
       }
       coll.add(info);
       childId++;
}

程序二:
for (Iterator i=seller.listSubClasses();i.hasNext();)
     {
       OntClass c = (OntClass) i.next();
       for(Iterator inner=c.listSubClasses(true);inner.hasNext();)
       {
         OntClass cinner=(OntClass)inner.next();
         nodeName=cinner.getLocalName();
         nodeinfo.put(nodeName,nodeParentName);
         info=new TreeInfo();
         info.setNodeId(childId);
         info.setParentId(parentId);
         info.setNodeName(nodeName);
         info.setUrl(nodeName);
         childId++;
         coll.add(info);
      }
       parentId++;
     }
我搞不清楚这是为什么。



完整的程序贴出来看看,光看这个很难判断
--  作者:xirufeng
--  发布时间:1/19/2006 8:55:00 AM

--  
谢谢大家了,问题已经解决。
祝大家过个好年。
以下是引用jpz6311whu在2006-1-18 19:26:00的发言:
[quote]以下是引用xirufeng在2006-1-17 10:09:00的发言:
这两段程序的效率有天壤之别:
  程序一:
  for (Iterator i=seller.listSubClasses();i.hasNext();)
      {
        OntClass c = (OntClass) i.next();
        for(int j=coll.size()-1;j>=0;j--)
        {
         nodeParentName=c.getSuperClass().getLocalName();
         String iNodeInfo=((TreeInfo)coll.get(j)).getNodeName();
         int iNodeId=((TreeInfo)coll.get(j)).getNodeId();
         if(!nodeParentName.equals(iNodeInfo))
           continue;
         if(nodeParentName.equals(iNodeInfo))
         info.setParentId(iNodeId);
         if(info.getParentId()!=-1)
           break;
        }
        coll.add(info);
        childId++;
  }

  程序二:
  for (Iterator i=seller.listSubClasses();i.hasNext();)
      {
        OntClass c = (OntClass) i.next();
        for(Iterator inner=c.listSubClasses(true);inner.hasNext();)
        {
          OntClass cinner=(OntClass)inner.next();
          nodeName=cinner.getLocalName();
          nodeinfo.put(nodeName,nodeParentName);
          info=new TreeInfo();
          info.setNodeId(childId);
          info.setParentId(parentId);
          info.setNodeName(nodeName);
          info.setUrl(nodeName);
          childId++;
          coll.add(info);
       }
        parentId++;
      }
  我搞不清楚这是为什么。
[/quote]
完整的程序贴出来看看,光看这个很难判断



W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
140.625ms