Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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程序停止工作_Java_Jvm - Fatal编程技术网

Java程序停止工作

Java程序停止工作,java,jvm,Java,Jvm,我想知道为什么10mb是一个非常小的内存量,在我进一步讨论之前,我想弄清楚它是不够的内存。永久空间占该数量的55.08%。老一代占34.90%,伊甸园空间占12.72%。这相当于您允许的最大堆大小的102.7%,我猜在读取之后不久就会抛出OutOfMemoryError 我们不是编译器。你必须告诉我们错误是什么以及它的位置。将您的代码最小化到与之相关的程度也很好。是否尝试过对此进行调试?通过Eclipse或Netbeans中的代码,并使用JVisualVM监视JVM内存使用情况,以查看内存发生了

我想知道为什么10mb是一个非常小的内存量,在我进一步讨论之前,我想弄清楚它是不够的内存。永久空间占该数量的55.08%。老一代占34.90%,伊甸园空间占12.72%。这相当于您允许的最大堆大小的102.7%,我猜在读取之后不久就会抛出OutOfMemoryError


我们不是编译器。你必须告诉我们错误是什么以及它的位置。将您的代码最小化到与之相关的程度也很好。是否尝试过对此进行调试?通过Eclipse或Netbeans中的代码,并使用JVisualVM监视JVM内存使用情况,以查看内存发生了什么事情,这应该是相对直接的。感谢Floegipoky的回答。旧一代已满,JVM经常进行完整gc,jvm总是执行完全gc的原因是:preparedStatement没有关闭,所以不能执行gc,最后内存被用完了。
try {
            final Connection connection =
                    DriverManager.getConnection(url,username,password);



            final AtomicInteger start = new AtomicInteger(0);
            final AtomicInteger preFix = new AtomicInteger(201401);
            final int perCount = 1000;
            ScheduledExecutorService service = Executors.newScheduledThreadPool(3);
            service.scheduleWithFixedDelay(new Runnable() {
                @Override
                public void run() {

                    String sql = "select id,class,function,remark,add_time from ";
                    sql += "table_";
                    sql += preFix.get();
                    sql += " order by id limit ";
                    sql += start.get();
                    sql += ",";
                    sql += perCount;
                    ResultSet resultSet = null;
                    List<Email> emailList = new ArrayList<Email>();
                    try{
                        PreparedStatement preparedStatement = connection.prepareStatement(sql);
                        resultSet = preparedStatement.executeQuery();
                        while (resultSet.next()){
                            Email email = new Email();
                            long  id = resultSet.getLong("id");
                            email.setId(id + "");
                            String userEmail = resultSet.getString("class");
                            email.setUserEmail(userEmail);
                            String subject = resultSet.getString("function");
                            email.setSubject(subject);
                            String content = resultSet.getString("remark");
                            email.setContent(content);
                            long addTime = resultSet.getLong("add_time");
                            email.setAddDate(addTime);
                            emailList.add(email);
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                    }




//                    List<Email> emailList = emailDao.getEmailList(start.get(),perCount);

                    List<Order> studentList = new ArrayList<Order>();
                    if(null != emailList && emailList.size() > 0){
                        System.out.println("emailList size:" + emailList.size());
                        for(Email email:emailList){
                            if(email.getSend() == 1){
                                Order order = new Order();
                                order.setOrderId(Integer.valueOf(email.getId()));
                                String content = new String(email.getContent());
                                order.setOrderSign(content + "verygood");
                                studentList.add(order);
                            }
                        }
                        start.set(start.get() + perCount);
                    }else{//another table

                        int n = preFix.getAndIncrement();
                        System.out.println("useing table:" + n);
                        if(n == 201412){
                            preFix.set(201401);
                        }
                        start.set(0);
                    }

                    if(null != studentList){
                        studentList.clear();
                        studentList = null;
                    }
                }
            },0,200, TimeUnit.MILLISECONDS);

        } catch (SQLException e) {
            e.printStackTrace();
        }
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT

 0.00   0.00  12.72  34.90  55.08     36    0.117    36    0.666    0.783

 0.00   0.00  12.72  34.90  55.08     36    0.117    36    0.666    0.783

 0.00   0.00  12.72  34.90  55.08     36    0.117    36    0.666    0.783