Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.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
java.lang.OutOfMemoryError:java堆空间哪些对象获得所有内存?_Java_Xslt - Fatal编程技术网

java.lang.OutOfMemoryError:java堆空间哪些对象获得所有内存?

java.lang.OutOfMemoryError:java堆空间哪些对象获得所有内存?,java,xslt,Java,Xslt,我写了一些在内存方面似乎爆炸性的代码 我不明白为什么,因为大多数对象都是在补充方法中创建的,我希望在方法结束后空间是空闲的。?!?(还是没有?) 我对记忆消耗这个话题还不太熟悉。我不知道该怎么做才能改善它 通过添加标志-Xmx8192来配置JVM没有帮助。它只让我处理了3个以上的包。(最初使用-Xmx标志I处理的27个包达到30个) 我是否可以以某种方式延迟它,以便让GC有时间释放空间? 或者这不会有帮助吗 以下是我迄今为止编写的代码: public class mainToTest{

我写了一些在内存方面似乎爆炸性的代码

我不明白为什么,因为大多数对象都是在补充方法中创建的,我希望在方法结束后空间是空闲的。?!?(还是没有?)

我对记忆消耗这个话题还不太熟悉。我不知道该怎么做才能改善它

通过添加标志-Xmx8192来配置JVM没有帮助。它只让我处理了3个以上的包。(最初使用-Xmx标志I处理的27个包达到30个)

我是否可以以某种方式延迟它,以便让GC有时间释放空间? 或者这不会有帮助吗

以下是我迄今为止编写的代码:

    public class mainToTest{

        public static void main(String [] args)throws IOException{        String str;       
          String home = "C:/Users/Eirini/Desktop/OP/";      
          String s = "13092017-1800";       
          File Descriptor;          
          final Charset ENCODING = StandardCharsets.UTF_8;      
          Path path = Paths.get(home+"output.xml");         
          List <String> LOP= new ArrayList();
          LOP.clear();      

          List<String> lines;
          int i,j;

          File [] a =(new File(home+s)).listFiles();          
          System.out.println("Packages found...");      
          for (i=0; i<a.length; i++){           
            System.out.print("For package " + i);             
            Descriptor=findDescriptor(a[i]);             
            XSL.transformation(Descriptor,new File
            (home+"extractprocedureid.xslt"));

            lines  = Files.readAllLines(path, ENCODING);             
            str=lines.get(1);           
            if (LOP.isEmpty()){
            LOP.add(str);}          
            for(j=0; j<LOP.size(); j++){
            if(!(str.equals(LOP.get(j)))){
                   LOP.add(str);}           
            }
          }         
          System.out.println("");       
          System.out.println("Finished Procedures found:");         
          for (i=0; i<LOP.size();i++){          
             System.out.println(LOP.get(i)); }


    }


        public static File findDescriptor(File pckg){       
           String s;        
           int i,k;         
           int j=0;
           File[] ind=pckg.listFiles();         
           System.out.println(" all Items and descriptor listed");

           k=ind.length;

           for (i=0;i<k;i++){           
               System.out.println("File " +i);          
               if (ind[i].getName().endsWith("_immc.xml")){
                  j=i;
                  i=200;
                  System.out.println("Descriptor found !!!!");                 }            
               else{
                 System.out.println(" not a descriptor. Moving to the next");}      }       

            return ind[j];              

        } 
}
错误通常发生在XSL.transformation之后(第二段代码)


谢谢

看起来问题在于线路:

   for(j=0; j<LOP.size(); j++){
       if(!(str.equals(LOP.get(j)))){
          LOP.add(str);}           
       }

for(j=0;jJust profile它。顺便说一下
-Xmx8192
只提供8kb的内存,请尝试
-Xmx8192m
。(但我假设它只是一个输入错误。)这些转换文件的输出有多大?对于您转换的每个文件,您都在读取文本行并附加到
LOP
ArrayList。因此,您将在内存中保留所有这些转换文件的输出。请尝试不要附加到
LOP
以查看事情是否保持不变,或者调用
LOP.clear()
在每个文件之后查看是否停止抛出OOM错误,然后从那里进行调整。是的,我的确切命令是java-Xmx2048m-Xms512m main测试转换后的文件是2-5行。xicore你说的评测是什么意思?
   for(j=0; j<LOP.size(); j++){
       if(!(str.equals(LOP.get(j)))){
          LOP.add(str);}           
       }