Windows'ta Maven 2 altında Java yığın alanını ayarlama


91

Bu mesajı projemin oluşturulması sırasında alıyorum

java.lang.OutOfMemoryError: Java yığın alanı

Yığın alanını nasıl artırabilirim, 8 Gb veya RAM'im var, maven'in bu kadar çok tüketmesi imkansız, bunu http://vikashazrati.wordpress.com/2007/07/26/quicktip-how-to-increase-the buldum -java-heap-memory-for-maven-2-on-linux / Linux'ta nasıl yapılır, ancak Windows 7 kullanıyorum. Windows altında java yığın alanını nasıl değiştirebilirim?


Windows'un 64bit sürümünde olduğunuzu varsayıyorum? Değilse, yığın boyutu olarak 1.5G'den fazlasını belirtmeyeceksiniz, diğer 0.5G pencereleri doğrudan kullanmanıza izin verecek JVM tarafından gerekli olacaktır. Pencereleri kernal mod kodu için yalnızca 1G ve kullanıcı modu kodu için 3G kullanacak şekilde alma seçeneği vardır, ancak sun JVM bunu kullanmanıza izin vermez.
vickirk

@vickirk Windows'un 64bit sürümündeyim
Gandalf StormCrow

1
Ayrıca JVM'nin 64 bit sürümünü mü kullanıyorsunuz? Bu JDK indirme sayfasında açılır listesinde, Windows x64 olarak sıralanabilir edeceğiz: java.sun.com/javase/downloads/widget/jdk6.jsp
Powerlord

Yanıtlar:


117

Ayarlanacak ortam değişkeni MAVEN_OPTS, örneğin MAVEN_OPTS=-Xmx1024m. maxmemEğer çatala derleyici eklenti ayarladığınızda pom yapılandırma geçerlidir javacyeni JVM içine. Aksi takdirde eklenti, Maven ile aynı VM içinde ve dolayısıyla komut satırında MAVEN_OPTS.

Windows 7 altında MAVEN_OPTS ayarlamak için:

  1. Bilgisayarım'a sağ tıklayın ve Özellikler'i seçin (klavye kısayolu Windows+ tuşuna basın Pause/Break)
  2. Gelişmiş Sistem Özellikleri'ni görüntülemek için Sistem Özellikleri'nin sol gezinmesinde bulunan Gelişmiş Sistem Ayarları bağlantısını tıklayın.
  3. Git Gelişmiş sekmesi ve tıklayın Ortam Değişkenleri altında bulunan düğmeye Gelişmiş Sistem Özellikleri yapılandırma penceresinde
  4. Bir oluşturma Yeni kullanıcı değişkeni, set Değişken adını MAVEN_OPTS ve set Değişken değeri için -Xmx1024m(veya daha fazla)

Yeni bir komut penceresi açın ve çalıştırın mvn.


1
Bunun yapımın hızı üzerinde herhangi bir etkisi var mı? Daha fazla bellek ayırarak maven yapımı güçlendirecek herhangi bir ipucu var mı?
Mahendran

45

Kesin ateş (veya güvenli olmayan) JUnit testi çalıştırması sırasında yığın alanınız tükeniyorsa, MAVEN_OPTS'yi değiştirmek size yardımcı olmayabilir. Ben bulana kadar hiçbir şans ile MAVEN_OPTS farklı yapılandırmalar çalışıyor tuttu bu yazı sorunu düzeltildi.

Temel olarak JUnit'ler kendi ortamlarına çatallanır ve MAVEN_OPTS'deki ayarları yok sayarlar. JUnit'ler için daha fazla bellek eklemek için pom'unuzda kesin ateş yapılandırmanız gerekir.

Umarım bu başka birine biraz zaman kazandırabilir!


Düzenleme: Bir gün bağlantının kopması durumunda Keith Chapman'ın blogundan çözüm kopyalanıyor :

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <forkMode>pertest</forkMode> 
    <argLine>-Xms256m -Xmx512m</argLine>
    <testFailureIgnore>false</testFailureIgnore> 
    <skip>false</skip> 
    <includes> 
      <include>**/*IntegrationTestSuite.java</include>
    </includes>
  </configuration>
</plugin>

Güncelleme (31.05.2017): @johnstosh'a bunu işaret ettiği için teşekkürler - surefire, bu cevabı oraya koyduğumdan beri biraz gelişti. İşte onların belgelerine bir bağlantı ve güncellenmiş bir kod örneği (arg satırı, bu soru için hala önemli bir kısımdır):

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20</version>
    <configuration>
        <forkCount>3</forkCount>
        <reuseForks>true</reuseForks>
        <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
        <systemPropertyVariables>
            <databaseSchema>MY_TEST_SCHEMA_${surefire.forkNumber}</databaseSchema>
        </systemPropertyVariables>
        <workingDirectory>FORK_DIRECTORY_${surefire.forkNumber}</workingDirectory>
    </configuration>
  </plugin>

Zamanımın bir kısmını kurtardı! Teşekkürler! Maalesef yalnızca bir kez yükseltebilirim! :)
javanna

Bu, gerçek maven tarzında diğerleri arasındaki en yararlı cevaptır. Teşekkürler!
Andremoniy

Bu sorunun gerçek cevabı
Jonathan Landrum

1
Surefire'daki belgelere bakın. surefire 2.14'ten önceki sürümler, çatallamayı yapılandırmak için forkMode parametresini kullandı. Bu parametre geriye dönük uyumluluk için hala desteklense de, kullanıcıların yapılandırmalarını geçirmeleri ve bunun yerine forkCount ve reuseForks kullanmaları şiddetle tavsiye edilir.
johnstosh

21

EXPORT yerine SET dışında aynı komut olmalıdır

  • set MAVEN_OPTS = -Xmx512m ona 512Mb yığın verir
  • MAVEN_OPTS = -Xmx2048m olarak ayarla 2Gb yığın verir

Bunun aynı komut olması gerektiğine katılıyorum, ancak bu onu doğru ifade etmiyor, işte nedeniC:\my_project>MAVEN_OPTS=-Xmx512m 'MAVEN_OPTS' is not recognized as an internal or external command, operable program or batch file.
Gandalf StormCrow

glowcoder biraz yanlış. Değişkenleri DIŞA AKTARMANIZ gerekmez, ancak bunlara bir değer atamak için ayarlamanız gerekir.
JeremyP

Her derleme için aynı değerleri kullanmak istiyorsanız, MAVEN_OPTS'yi bir Windows ortam değişkeni olarak da ayarlayabilirsiniz.
digitaljoel

@Gandalf setin önüne koymalısın @ Jeremy evet, bu yüzden export yerine set kullan diyor
corsiKa

9

Mac'te: JAVA_OPTSve MAVEN_OPTSyerine _JAVA_OPTIONS kullanın. Bu çalışıyor!


bu aynı zamanda pencerelerde de çalışır. Tutulma sırasında maven çalıştırma yapılandırmasına bunu bir ortam değişkeni olarak ekleyin, m2e'den çalıştırılan testler artık PermGen hatası vermiyor
fedeb

3

MAVEN_OPTS değişkenini şanssız bir şekilde kullanmaya çalıştıktan sonra benim için çalışan bu siteye rastladım . Yani tek yapmam gereken varsayılan VM seçeneklerine -Xms128m -Xmx1024m eklemekti ve işe yaradı.

Eclipse'de bunları değiştirmek için, Pencere -> Tercihler -> Java -> Yüklü JRE'ler seçeneğine gidin. İşaretli JRE / JDK'yi seçin ve düzenle'yi tıklayın.


0

Windows'ta:

Çevresel bir değişken ekleyin (hem sistemde hem de kullanıcı değişkenlerinde, bazı tuhaf problemlerim var, değişkeni çeşitli yerlerden alıyor, bu yüzden ikisine de ekliyorum).

MAVEN_OPTS olarak adlandırın.

Değer şöyle olacaktır: -Xms1024m -Xmx3000m -XX:MaxPermSize=1024m -XX:+CMSClassUnloadingEnabled

Sayılar farklı olabilir, onları mem boyutunuza göre yapın.

Bu sorunu yaşadım ve bu sorunu çözdü, başka bir şey yok!


0

İşe yaradı - Eclipse'de değiştirmek için Pencere -> Tercihler -> Java -> Yüklü JRE'lere gidin. İşaretli JRE / JDK'yi seçin ve düzenle'yi tıklayın.

Varsayılan VM Bağımsız Değişkenleri = -Xms128m -Xmx1024m


-7

Aşağıdakileri yapmak için 2 seçenek arıyorsunuz java:

  • -Xmx maksimum yığın boyutu
  • -Xms başlangıç ​​yığın boyutu

Bunları, javaçalıştırılabilir dosyanın komut satırı çağrısına şu şekilde yerleştirin:

java -Xms512M -Xmx1024M my.package.MainClass

Çalışma süresi sırasında öbeğin yeniden boyutlandırılmasını önlediği için (bu, yanıt vermesi gereken uygulamalarda zaman alabilir), uygulamaya bağlı olarak başlangıç ​​ve maksimum yığın boyutlarının aynı olmasını isteyebileceğinizi unutmayın. Yığını yeniden boyutlandırmak, çok sayıda nesneyi hareket ettirmeyi ve defter tutmayı yeniden yapmayı gerektirebilir.

Günlük projeler için, yeterince iyi olduğunu düşündüğünüz şeyleri yapın. Yardım profili.


1
ebelisle'in belirttiği gibi, bu seçenek hiç çalışmayacaktır, çünkü siz Maven'i kullanarak, en azından bunun "-D" ile bir Maven seçeneği olduğunu belirtmeniz gerekir, ancak yine de bahsettiğimiz şey bir java komutu değildir
frandevel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.