java中的内存泄漏?

java中的内存泄漏?,java,Java,下面的代码抛出一个java:out-of-memory异常。我也看到这个问题在这里被回答了很多次。看到前面的解决方案,我也尝试了 java-XMX1024MyourClass 我一直在增加10.24亿美元。我增加到10240M,但仍然抛出了相同的异常,另外我的系统挂起了几分钟。这个问题还有别的解决办法吗 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java

下面的代码抛出一个java:out-of-memory异常。我也看到这个问题在这里被回答了很多次。看到前面的解决方案,我也尝试了

java-XMX1024MyourClass

我一直在增加10.24亿美元。我增加到10240M,但仍然抛出了相同的异常,另外我的系统挂起了几分钟。这个问题还有别的解决办法吗

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.Array;
import java.sql.SQLException;
import java.util.Collection;


 class PostgreSQLJDBC 
 {
    public static void main( String args[] ) throws SQLException {
    Connection c = null;
    Statement stmt = null;
    Statement stmt1 = null;  
    int way=1367184;
    int nodecount=7045400;
    int count=0;
    int idarr[]=new int[1367184];
    Long node[][]=new Long[1367184][];
    Long child[][]=new Long[7045400][2000];
    int nodearray[]=new int[7045400];
    int i=0;
    try 
    {
       Class.forName("org.postgresql.Driver");
       c = DriverManager
          .getConnection("jdbc:postgresql://localhost:5432/pr",
          "postgres", "password");
       c.setAutoCommit(true);
       stmt = c.createStatement();
       stmt1 = c.createStatement();
       ResultSet rs = stmt.executeQuery( "SELECT * FROM planet_osm_ways;" );
       ResultSet rs1 = stmt1.executeQuery( "SELECT * FROM 
                                           planet_osm_nodes;");
       while ( rs.next() )
       {
          idarr[i] = rs.getInt("id");
          Array array=rs.getArray("nodes");
          node[i]=(Long[])array.getArray();
          i++;
       }
       i=0;
       /*while(rs1.next())
       {
          nodearray[i]=rs1.getInt("id");
          i++;
       }*/
       rs.close();
       stmt.close();
       c.close();
     } 
    catch ( Exception e ) 
    {
      System.err.println( e.getClass().getName()+": "+ e.getMessage() );
      System.exit(0);
    }

 }
}


有人能帮忙吗?

整数是4个字节;引用是4个字节

将分配的所有内存相乘,然后将字节相加。这是一个简单的计算

如果你的应用程序必须拥有所有的数据,而你只有有限的RAM,那么你就不能无视物理。你必须重新考虑你在做什么

这是一个糟糕的代码,原因很多

将该数据封装到对象中并使用列表。只将您需要的内容带回服务器


打印该catch块中的堆栈跟踪。按照自己的方式,您获得的信息越来越少。

new Long[7045400][2000]
有很多内存…您很可能只是内存不足:sortsTrue没有泄漏,我同意,但我的应用程序需要这么大的数组大小占用大量内存。精确地说是112GB