【问题标题】:Java Error occurred during initialization of VM Could not reserve enough space for object heap虚拟机初始化期间发生 Java 错误无法为对象堆保留足够的空间
【发布时间】:2017-08-19 14:14:38
【问题描述】:

这是我的代码:

import java.util.LinkedList;
import java.util.Scanner;
import java.util.InputMismatchException;
import java.util.*;




class Customer {
       public String lastName;
       public String firstName;
       public Customer() {
       }
       public Customer(String last, String first) {
          this.lastName = last;
          this.firstName = first;
       }
       public String toString() {
          return firstName + " " + lastName;
       }
    }
    class HourlyCustomer extends Customer {
       public double hourlyRate;
       public HourlyCustomer(String last, String first) {
          super(last, first);
       }
    }

class GenQueue<E> {
   private LinkedList<E> list = new LinkedList<E>();
   public void enqueue(E item) {
      list.addLast(item);
   }
   public E dequeue() {
      return list.poll();
   }
   public boolean hasItems() {
      return !list.isEmpty();
   }
   public boolean isEmpty()
   {
      return list == null;
   }
   public E removeFirst(){
       return list.removeFirst();
   }
   public E getFirst(){
       return list.getFirst();
   }
   public int size() {
      return list.size();
   }

   public void addItems(GenQueue<? extends E> q) {
      while (q.hasItems()) list.addLast(q.dequeue());
   }
}





public class something {

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String input1;
        String input2;
        int choice = 1000;



        GenQueue<Customer> empList;
        empList = new GenQueue<Customer>();
        GenQueue<HourlyCustomer> hList;
        hList = new GenQueue<HourlyCustomer>(); 

        do{
            System.out.println("================");
            System.out.println("Queue Operations Menu");
            System.out.println("================");
            System.out.println("1,Enquene");
            System.out.println("2,Dequeue");
            System.out.println("0, Quit\n");
            System.out.println("Enter Choice:");
            try{

                choice = sc.nextInt();



                switch(choice){
                case 1:

                    do{


                    System.out.println("\nPlease enter last name:  ");
                    input1 = sc.next();
                    System.out.println("\nPlease enter first name:  ");
                    input2 = sc.next();
                    hList.enqueue(new HourlyCustomer(input1, input2));
                    empList.addItems(hList);

                    System.out.println("\n"+(input2 + " " +  input1) + " is successful queued");

                    System.out.println("\nDo you still want to enqueue?<1> or do you want to view all in queue?<0> or \nBack to main menu for dequeueing?<menu>: ");
                    choice = sc.nextInt();

                    }while (choice != 0);



                     System.out.println("\nThe customers' names are: \n");

                     while (empList.hasItems()) {
                     Customer emp = empList.dequeue();
                     System.out.println(emp.firstName + " " + emp.lastName + "\n" );
                     int choose=100;
                     System.out.println("\nGo back to main?<1=Yes/0=No>: \n");
                     choose = sc.nextInt();

                     if(choose == 1){
                         continue;
                     }
                     else
                     {
                         break;
                     }


                  }
                    break;

                case 2:


                    if (empList.isEmpty()) {
                        System.out.println("The queue is empty!");
                    }
                    else{
                    System.out.println("\nDequeued customer: "  +empList.getFirst());
                    empList.removeFirst();

                    System.out.println("\nNext customer in queue: "  +empList.getFirst()+"\n");

                    }
                    break;





                default:
                        System.out.println("Invalid choice");
                }

            }
            catch(InputMismatchException e){
                System.out.println("Please enter 1-5, 0 to quit");
                sc.nextLine();
            }
        }while(choice != 0);
    }
}

当我在 case 1 中添加 if-else 语句时出现了这个问题,如果用户输入 1,我希望它返回到 main。我该如何解决这个问题?这个 if-else 语句是否有替代方法,这样它就不会导致错误?第一天使用java,新手,我需要一些帮助。

VM 初始化期间发生错误无法保留足够 对象堆空间

【问题讨论】:

    标签: java virtual-machine large-object-heap


    【解决方案1】:

    这个问题是由于JVM不能预留足够的内存空间,这意味着你的OS没有足够的内存来启动JVM,此内存由JAVA_OPTSvmargs参数设置。

    你可以尝试减少-Xmx-Xms指定的内存。

    更多信息:Xms, Xmx

    What are the Xms and Xmx parameters when starting JVMs?

    【讨论】:

      猜你喜欢
      • 2013-01-05
      • 1970-01-01
      • 2019-02-24
      • 2021-06-07
      • 1970-01-01
      • 2012-03-07
      • 1970-01-01
      • 2013-06-22
      • 2016-04-27
      相关资源
      最近更新 更多