“ เกิดข้อผิดพลาดระหว่างการเริ่มต้น VM; ไม่สามารถจองพื้นที่เพียงพอสำหรับฮีปวัตถุ” โดยใช้ -Xmx3G


94

ก่อนอื่นฉันมีกล่องที่มีแรม 8GB ดังนั้นฉันสงสัยว่าหน่วยความจำทั้งหมดเป็นปัญหา แอปพลิเคชั่นนี้ทำงานได้ดีบนเครื่องที่มี 6GB หรือน้อยกว่า

ฉันพยายามจองพื้นที่ 3GB โดยใช้ -Xmx3G ภายใต้ "VM Arguments" ใน Run Configurations in Eclipse

ทุกครั้งที่ฉันพยายามจองมากกว่า 1500mb ฉันได้รับข้อผิดพลาดนี้:“ เกิดข้อผิดพลาดระหว่างการเริ่มต้น VM; ไม่สามารถจองพื้นที่เพียงพอสำหรับฮีปวัตถุ” โดยใช้ -Xmx3G

เกิดขึ้นที่นี่คืออะไร?


2
คุณมี java เวอร์ชันใด คุณใช้ระบบปฏิบัติการอะไร
Adam Rofer

นี่คือ Win7 และฉันติดตั้ง Java 3 เวอร์ชันที่แตกต่างกัน หนึ่งในนั้นคือ JRE 32 บิตที่ Eclipse ใช้อยู่
user1212731

3
อย่าลืมทำเครื่องหมายคำตอบว่าถูกต้อง
xdhmoore

เพียงแค่เปลี่ยนการตั้งค่าใน gridle.property ด้วย sutaible space ของคุณ
Bhushan

คำตอบ:


64

เป็นไปได้ไหมที่คุณใช้ jvm 32 บิตบนเครื่องนั้น?


8
ขออภัยสำหรับคำถามโง่ ๆ แต่ฉันจะตรวจสอบได้อย่างไร และฉันจะใช้ 64-bit ได้อย่างไร?
user1212731

3
อันที่จริงฉันเพิ่งลอง java -d64 -version ในบรรทัดคำสั่งและมาพร้อมกับเซิร์ฟเวอร์ VM 64 บิต
user1212731

6
เห็นได้ชัดว่า Eclipse ใช้ JRE เวอร์ชัน 32 บิตที่ฉันติดตั้งไว้ก่อนหน้านี้แม้ว่า 64 บิตจะเป็นการติดตั้งล่าสุดก็ตาม ฉันเปลี่ยนการตั้งค่าในการตั้งค่า -> ติดตั้ง JREs เพื่อแก้ปัญหานี้ ขอบคุณมากสำหรับคำตอบของคุณ!
user1212731

3
ไม่ว่าในกรณีใด 32 บิตไม่ควรเพียงพอที่จะอยู่ที่ 4GB หรือไม่?
โธมัส

7
ควรจะเป็น แต่สิ่งนี้ช่วยแก้ปัญหาของฉันได้ ไม่มีการโหวตเพิ่มคะแนนสำหรับคำตอบนี้เนื่องจากไม่มีคำอธิบาย ลิงค์นี้อธิบายว่า jvm 32 บิตไม่สามารถใช้พื้นที่ฮีปสูงสุด 1GB ได้อย่างไร
Steven

58

วิธีแก้ไขมีดังนี้ ไปที่ Start->Control Panel->System->Advanced(tab)->Environment Variables->System

Variables->New:
Variable name: _JAVA_OPTIONS   
Variable value: -Xmx512M

Variable name: Path  
Variable value: ;C:\Program Files\Java\jre6\bin;F:\JDK\bin;  

การเปลี่ยนแปลงนี้ของคุณเส้นทางที่เหมาะสม


4
เพียงแค่หมายเหตุสำหรับคนอื่น ๆ คุณเพิ่มตัวแปร SYSTEM ไม่ใช่ตัวแปร USER ฉันพบปัญหานี้ใน Eclipse และไม่ต้องรีบูตเครื่องหลังจากทำการเปลี่ยนแปลงข้างต้น ... ฉันต้องรีสตาร์ท Eclipse เท่านั้น ขอบคุณ!
Captain_jim1

สำหรับคนที่อยากรู้อยากเห็นแฟล็ก -Xmx ใน _JAVA_OPTIONS ระบุขนาดฮีป JVM สูงสุดที่อนุญาต สิ่งนี้ป้องกันไม่ให้ JVM ร้องขอพื้นที่ที่ไม่สมเหตุสมผล (โดยเฉพาะอย่างยิ่งไม่สามารถปันส่วนต่อเนื่องกันสำหรับเครื่อง 32 บิต ... )
varun

41

นี่ไม่ใช่ปัญหาเฉพาะ Eclipse เป็นปัญหาทั่วไปของ Java-on-Windows เป็นเพราะวิธีที่ JVM จัดสรรหน่วยความจำบน Windows มันยืนยันในการจัดสรรหน่วยความจำที่ต่อเนื่องกันซึ่งบ่อยครั้งที่ Windows ไม่สามารถจัดหาได้แม้ว่าจะมีหน่วยความจำแยกกันเพียงพอที่จะตอบสนองคำขอการจัดสรรก็ตาม มียูทิลิตี้ที่จะพยายามช่วย Windows "Defrag" หน่วยความจำซึ่งตามทฤษฎีแล้วจะช่วยสถานการณ์นี้ได้ แต่ฉันไม่ได้ลองใช้อย่างจริงจังจึงไม่สามารถพูดถึงประสิทธิภาพของมันได้ สิ่งหนึ่งที่ฉันเคยได้ยินมาบางครั้งอาจช่วยได้คือการรีบูต Windows และก่อนที่จะเริ่มแอปอื่น ๆ ให้เปิดแอป Java ที่ต้องการหน่วยความจำขนาดใหญ่ หากคุณโชคดี Windows ยังไม่มีพื้นที่หน่วยความจำแยกส่วนและ Java จะได้รับบล็อกที่ต่อเนื่องกันตามที่ขอ

ที่ไหนสักแห่งใน interwebs มีคำอธิบายและการวิเคราะห์ทางเทคนิคเพิ่มเติมเกี่ยวกับปัญหานี้ แต่ฉันไม่มีข้อมูลอ้างอิงใด ๆ ที่เป็นประโยชน์

ฉันพบสิ่งนี้ซึ่งดูมีประโยชน์: https://stackoverflow.com/a/497757/639520


2
ในกรณีของฉันคำตอบของคุณดูเหมือนจะใช้ได้ ฉันไม่ได้รีสตาร์ท windows แต่ฉันลองปิดแอพอื่น ๆ ใน windows ของฉันแล้วเรียกใช้ java และมันก็สามารถเริ่มต้น VM ได้
sttaq

22

ก่อนอื่น JRE ของ 32 บิตไม่สามารถใช้ ram ได้มากกว่า ~ 1.5Gb ดังนั้นหากคุณต้องการมากกว่านี้ให้ใช้ JRE 64 บิต

ประการที่สองเมื่อ JVM ใหม่เริ่มต้นจะรวมคุณสมบัติ -Xmx ของ JVM ทั้งหมดที่กำลังทำงานอยู่และตรวจสอบว่ามีหน่วยความจำเหลือเพียงพอในระบบที่จะรันที่ -Xmx ของตัวเองหรือไม่หากไม่เพียงพอข้อผิดพลาดจะเกิดขึ้น


15

ฉันใช้ Liferay กับเซิร์ฟเวอร์ Tomcat จาก eclipse IDE ฉันติดอยู่กับข้อผิดพลาดเดียวกันนี้เมื่อคลิกที่เซิร์ฟเวอร์เริ่มต้น ดับเบิลคลิกที่เซิร์ฟเวอร์จาก eclipse จะเปิดหน้าภาพรวมเซิร์ฟเวอร์ อัปเดตอาร์กิวเมนต์หน่วยความจำจาก -Xmx1024m -XX: MaxPermSize = 256m ถึง -Xmx512m -XX: MaxPermSize = 256m จากนั้นมันก็ทำงานให้ฉัน



9

ตรวจสอบให้แน่ใจว่า Eclipse กำลังรัน JVM เดียวกันกับที่คุณคิดว่ากำลังทำงานอยู่ หากคุณใช้ java ในเว็บเบราว์เซอร์ของคุณคุณอาจมีเวอร์ชัน 32 บิตลอยอยู่ด้วยซึ่งอาจมีความสำคัญกว่าหากมีการติดตั้งหรืออัปเดตเมื่อเร็ว ๆ นี้

เพื่อความแน่ใจจริงๆขอแนะนำให้เพิ่มสองบรรทัดนี้ในeclipse.iniไฟล์ของคุณที่ด้านบน:

-vm 
C:/Java/jdk1.6.0_27/bin

... ในเครื่องของฉันC:/Java/jdk1.6.0_27/binที่มี JVM ที่ฉันรู้ว่าเป็น 64 บิตอยู่ที่ไหน อย่าลืมมีbinโฟลเดอร์อยู่ที่นั่น

(เป็นโบนัสใน Windows 7 สิ่งนี้ยังช่วยให้คุณสามารถ "ตรึงแท็บ" ได้จริงซึ่งเป็นสาเหตุที่ฉันต้องทำสิ่งนี้เพื่อการใช้งานของฉันเอง)


อาร์กิวเมนต์ -vm ควรชี้ไปที่ไฟล์ปฏิบัติการของ Java ไม่ใช่แค่โฟลเดอร์ ดูwiki.eclipse.org/%C2%A0eclipse.ini#Specifying_the_JVM
E-Riz

1
ไม่ถูกต้อง. ดูข้อบกพร่อง Eclipse นี้: bugs.eclipse.org/bugs/show_bug.cgi?id=314805
Adam Rofer

นี่เป็นปัญหาจริงๆ! Eclipse ใช้ JRE เวอร์ชัน 32 บิตที่ฉันติดตั้งไว้ในบางจุด ขอบคุณมากสำหรับคำตอบและนำฉันไปในทิศทางที่ถูกต้อง! ฉันชื่นชมมันมาก
user1212731

@AdamRofer ข้อบกพร่องนั้นน่าสนใจ แต่โดยเฉพาะเกี่ยวกับ Windows 7 และเพื่อแก้ไขปัญหาเกี่ยวกับการตรึง Eclipse ไว้ที่ทาสก์บาร์ โดยทั่วไป eclipse.ini ควรชี้ไปที่ตัวเรียกใช้งานจาวาแม้ว่าตัวเรียกใช้งาน Equinox ดูเหมือนจะฉลาดในการที่จะมองหาจาวาที่เรียกใช้งานได้หาก -vm ชี้ไปที่โฟลเดอร์ (อย่างน้อยใน Windows)
E-Riz

@ E-Riz "ควร" เข้มงวดเกินไปสำหรับรสนิยมของฉัน :) หวังว่าพวกเขาจะแก้ไขข้อผิดพลาดโดยไม่ต้องเปลี่ยนอาร์กิวเมนต์ vm ในบางครั้ง ข้อมูลเพิ่มเติมที่จะนำไปปรับปรุงในeclipse.iniเพจของพวกเขา: wiki.eclipse.org/…
Adam Rofer

5

นี่คือปัญหาของขนาดฮีป แก้ไข.bat(ไฟล์แบตช์) ของคุณ มันอาจจะแสดงขนาด Heap 1024 เปลี่ยนเป็น 512 จากนั้นก็น่าจะใช้ได้


2

ฉันยังมีปัญหาเดียวกันในขณะที่ใช้ Eclipse ซึ่งเป็น 32 บิตและ JVM ที่ใช้เป็น 64 บิต เมื่อฉันกำหนดเส้นทาง Eclipse เป็น JVM 32 บิตมันก็ใช้งานได้


2

เพียงใส่#สัญลักษณ์ไว้ข้างหน้าorg.gradle.jvmargs=-Xmx1536mใน gradle.properties

 # org.gradle.jvmargs=-Xmx1536m

ไม่แน่ใจว่ามันทำงานอย่างไรในขณะที่ลองใช้ Kotlin-multipatform บน mac os! ยังไงก็ตามขอบคุณ!
Chintan Soni

1

ฉันรู้ว่าฉันมาช้าไปหน่อย แต่คำตอบของฉันมาที่นี่:

ฉันเพิ่งติดตั้ง Java Online Version จาก Oracle (ไม่ใช่ 64-Bit one ออฟไลน์)

หลังจากเพิ่มตัวแปร JAVA_HOME ENV แล้วมันก็ใช้งานได้!

หวังว่าฉันจะช่วยได้ :)


0

คุณอาจลองผิดลองถูก ฉันได้รับข้อผิดพลาดที่คล้ายกันพร้อมกับรองรับบันทึกข้อผิดพลาด:

Java HotSpot(TM) Client VM warning: ignoring option PermSize=32M; support was removed in 8.0
Java HotSpot(TM) Client VM warning: ignoring option MaxPermSize=128M; support was removed in 8.0

ในกรณีของฉันซอฟต์แวร์ยังไม่รองรับ java 8 (สคริปต์ใช้อาร์กิวเมนต์ JVM เก่า) แต่ฉันมี java 8 โดยค่าเริ่มต้น


0

สาเหตุหนึ่งของปัญหานี้คือไม่มีหน่วยความจำให้ Tomcat เริ่มทำงาน ลองลบซอฟต์แวร์ที่รันไม่ต้องการออกจาก windows แล้วรีสตาร์ท eclipse และ tomcat

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.