niedziela, 31 lipca 2011

Błędy w JVM 7, zaleca się wstrzymanie przed migracją

Nad maszyną wirtualną javy zebrały się czarne chmury (a może raczej obłoczki). Jak się okazuje 7 wersja maszyny wirtualnej Javy (chodzi o wersję HotSpot Server wydanej zaledwie kilka dni temu) zawiera trzy niepokojące błędy, które zostały odkryte przez programistów związanych z fundacją Apache (pracującymi nad projektami Apache Solr oraz Apache Lucene).


Błędy (70701347044738 7068051) mogą doprowadzić do awarii maszyny wirtualnej lub złych obliczeń.

Pierwszy błąd dotyczy błędnej optymalizacji pętli wykonywanej przez kompilator. Optymalizacja (włączona domyślnie) może być wyłączona przez podanie argumentu:

-XX:-UseLoopPredicate

Błąd nr. dwa dotyczy optymalizacji rozwijania pętli która spowodować może zwrócenie błędnych wyników.
W pewnych rzadkich sytuacjach, gdy kompilator wykona OSR (podmiany na stosie) dla zagnieżdżonej pętli może dojść do duplikacji która zamieni wyniki obliczeń. Aby uporać się z tym błędem trzeba dodać argument:

-XX:LoopUnrollLimit=1

Ostatni błąd również dotyczy optymalizacji pętli i dostał się do JVM wraz z nową funkcją optymalizatora.

Ludzie z Organizacji Apache radzą by do czasu naprawienia w/w błędów nie migrować do nowej wersji JVM. Oracle zapowiedziało usunięcie błędów w najbliższej łacie serwisowej.



Źródła:
  1. http://lucene.apache.org/#28+July+2011+-+WARNING%3A+Index+corruption+and+crashes+in+Apache+Lucene+Core+%2F+Apache+Solr+with+Java+7
  2. http://blog.eisele.net/2011/07/dont-use-java-7-are-you-kidding-me.html
  3. http://www.infoworld.com/t/java-programming/apache-and-oracle-warn-serious-java-7-compiler-bugs-168516

1 komentarz:

  1. Tylko w serwerowej, core dumpa zauważysz. Został jeden. Nikt w prodzie nie będzie .0 używał.

    OdpowiedzUsuń