Java [1242]

Zapisz się
Dodaj kartkę Dodaj bana
Powód wlepienia kartki
Wybierz wątek docelowy z listy lub wpisz jego ID
  • zblakany

    Cześć,
    Czy ktoś z was kompilował jave do natywnej binarki? Jeśli tak to jakich narzędzi używaliście i jakie są potencjalne zagrożenia takiego rozwiązania.

    Pozdrawiam,
    Michał
  • sleeper

    Cześć,
    a mogę spytać jakie mogło by być zastosowanie takiego rozwiązania ? Po co unikać idealnego środowiska uruchomieniowego jakim jest JVM i pozbawiać się jego zalet (garbage collector, ochrona wątków, kompilacja JIT i zarządzalność) ?

    Odpowiadając na Twoje pytanie, to nigdy nic takiego nie robilem, natomiast wiem, że można tak Linux'a skompilować, żeby uruchamiał pliki .class jak zwykłe elf'y czy a.out'y. Ale do tego chyba i tak jest konieczna jakaś wirtualna maszyna.

    pozdr.
    Wojtek (SCJP od piątku :P)
  • Lipson Earl Grey

    Excelsior Jet http://www.excelsior-usa.com/jet.ht...

    Ale jesli liczysz na wzrost wydajnosci to mozesz sie zdziwic, prawdopodobnie odnotujesz wzrost o jakies 10% ale mozliwe też ze spadek, glowny zysk jest taki ze JRE nie kompiluje przy starcie wiec szybciej sie urchomi pewnie, ale reszta bez wiekszej różnicy, kompilator zawrty w maszynie wirtualnej jest naprawde wydajny, sprawdz sam.

    Jesli chodzi ci o wydajnosc to bardzo mozliwe ze wystarczy uruchamianie javy w wersji serwerowej "-server" z lini komend jako parametr, potrzebne jest do tego aby uzywac maszynki z JDK a nie samego JRE, bo wypisze na Windowsie ze nie moze znaleźć odpowiedniego dlla, w Linuxie pewnie powie to samo o so, zobacz ze w katalogu jre/bin masz dwa podkatalogi server i client,a w przypadku samego JRE (bez javac itd.) masz tylko client, mozesz przekopiowac katalog server albo w Linuxie pewnie symlink załatwi sprawe.

    Maszynka w wersji server moze naprawde przyśpieszyc, w microbenchmarkach mozesz czasem zanotowac nawet 20 krotne przyspieszenie.

    Excelsior Jet to fajna zabawka ale w wersji darmowej do sciagniecia twoje "exeki" beda dzialaly chyba tylko przez 30 dni.

    Nie ma sensu na dłuższa mete korzystanie z takiego rozwiazania, dodatkowe gmatwanie a zysk wydajnosci żaden.

    Jesli chodzi ci o odpalanie Javy poprzez exek to wystarczy maly programik korzystajacy z Invocation API - mozliwosc wystartowania maszyny Javy z poziomu C/C++, odsyłam do doumentacji odnośnie JNI.
  • YouCan'tGoWrongWithStretchyPants

    Wygrzebałem ten artykuł z zakładek.. jest poparty pomiarami.

    http://www-106.ibm.com/developerwor...

    Piotr pisał o prędkości aplikacji bez GUI, jeśli natomiast GUI jest problemem, spróbuj użyć JVM 1.5.
  • Anonim

    hmmm... nie jestem specem od Javy ale dla mnie to czysta perwersja... wzrost (?) wydajności wątpliwy, a mogą się pojawić problemy charakterystyczne dla 'natywnych' aplikacji czyli wyciekanie pamięci, memory-violation, etc. Zasadniczo tracisz IMHO wszystkie zalety jakie daje Java i pewnie nic nie zyskujesz w zamian. Ale mogę się mylić :-))

  • YouCan'tGoWrongWithStretchyPants

    A ja chyba rozumiem motywację tych ludzi.. jak porównuję prędkość z jaką uruchamiają się natywne aplikacje na moim maku i aplikacje java, pierwsza myśl, jaka mnie naszła to "może jeśli skompiluje je natywnie, będzie szybciej?". to jednak nie jest dobra droga.

    fakt faktem - natywne programy chodzą mi jak burza, pomimo, że system był zainstalowany kawał czasu temu. programy w javie są w tym porównaniu jakby flegmatyczne, choć dotyczy to głównie momentu startu oraz gui.
  • Anonim

    cos w tym jest...

    ale ja znam Jave i .NET glownie od strony rozproszonych aplikacji serwerowych, gdzie faktyczna wydajnosc nie jest az tak istotna jak np. stabilnosc, bezpieczenstwo (takze wykonywania kodu) i skalowalnosc. pod tym wzgledem Java i .NET raczej maja przewage nad aplikacjami natywnymi.
  • Lipson Earl Grey

    jesli chodzi o problemy natywnych aplikacji to nie dotyczy to JETa, z tego co pamietam on przy instalacji najpierw kompiluje rt.jar ktore znajdzie, innymi slowy przemienie całą jave łącznie z klasami i mechanizmami pozajezykowymi (garbage collector itd) na natywne. Ale na dłuższa mete JET nie ma raczej sensu, choc faktycznie uruchamianie jest znacznie szybsze niz w przypadku standardowej javy.

    Jesli hodzi o GUI to faktycznie - 1.5, w J2SE5.0 nawet BufferedImage sa akcelerowane, wiec mozna ich uzywac bez problemu, nie martwiac sie o wydajnosc, w poprzednich wersjah JRE trzeba było kombinowac z VolatileImage(mozna modyfikować) i Toolkit'owymi powstalymi z getImage(read only), no i w tym drugim przypadku obowiazkowy MediaTracker :)