Jak se vyhnout frustraci s Java eventy?

Kit

Re:Jak se vyhnout frustraci s Java eventy?
« Odpověď #150 kdy: 07. 02. 2016, 13:24:05 »
..., vy tady totiž nejste schopní říct "ok, není to zrovna moc dodělané", to se netýká jen Javy, ale i věcí okolo Linuxu.

Když se něco vytkne Microsoftu, tak to prohlásí za standard a spravovat to nebude.

Nedodělky jsou všude, kam se podíváš. Žádná firma nedodává finálně vyladěný SW, protože to prostě nejde. Ber to tak jak to je, jinak se z toho zblázníš.


perceptron

Re:Jak se vyhnout frustraci s Java eventy?
« Odpověď #151 kdy: 07. 02. 2016, 16:38:25 »
Citace
Tohle by dneska neudělalo ani úplné ucho, co se zrovna učí dělat webové stránky. Mohl bych pokračovat, vnucování Ask Toolbaru, kdejaká instalace sw od Oraclu je provázena chybovými hláškami
takze "java sux lebo tech guide ma zle css."

Citace
historie jejich produktu JDeveloper je rovněž dosti rozporuplná
wtf

Zelenac

Re:Jak se vyhnout frustraci s Java eventy?
« Odpověď #152 kdy: 07. 02. 2016, 20:05:00 »
Mám dotaz, určitě se zde najde někdo kdo bere sportovně naše spory a odpoví. Mějme klasickou implementaci vzoru observer, kde událost vyvolávám takto:

Kód: [Vybrat]
private void fireSpadlaHruska() {
  for(StromObserver observer : observers) {
    handler.spadlaHruska();
  }
}

private void fireSpadloJabko() {
  for(StromObserver observer : observers) {
    handler.spadloJabko();
  }
}
}

Tak by mě zajímalo, jestli je kompilátor pro Javu taková šikulka, že se za běhu aplikace nemusí jakoby spouštět zcela prázdná metoda SpadloJabko() u nějakého observera, který na ní nijak nereaguje. Nebo se snad stane za běhu to, že skutečně dojde k sérii příkazů ve snaze spustit metodu, ve které nic není? (např observer Pepa chce vědět jen o pádu jabka a nezajímají ho hrušky. Třeba debugger by si do té metody vlezl.

tisnik

Re:Jak se vyhnout frustraci s Java eventy?
« Odpověď #153 kdy: 07. 02. 2016, 20:44:39 »
Mám dotaz, určitě se zde najde někdo kdo bere sportovně naše spory a odpoví. Mějme klasickou implementaci vzoru observer, kde událost vyvolávám takto:

Kód: [Vybrat]
private void fireSpadlaHruska() {
  for(StromObserver observer : observers) {
    handler.spadlaHruska();
  }
}

private void fireSpadloJabko() {
  for(StromObserver observer : observers) {
    handler.spadloJabko();
  }
}
}

Tak by mě zajímalo, jestli je kompilátor pro Javu taková šikulka, že se za běhu aplikace nemusí jakoby spouštět zcela prázdná metoda SpadloJabko() u nějakého observera, který na ní nijak nereaguje. Nebo se snad stane za běhu to, že skutečně dojde k sérii příkazů ve snaze spustit metodu, ve které nic není? (např observer Pepa chce vědět jen o pádu jabka a nezajímají ho hrušky. Třeba debugger by si do té metody vlezl.

Krátká odpověď:

1) překladač do bajtkódu to nedělá, protože vlastně (skoro) každá metoda je virtuální, takže použije invokevirtual a dopředu neví, jak  to dopadne (můžeš tam v runtime podstrčit třeba jiný class soubor atd.)

2) JIT překladač to dělá, pokud po X bězích (v závislosti na nastavení JVM) zjistí, že to skutečně nemá cenu, volat kód jen s RET. Lze zjistit přes -XX:+PrintCompilation

Osobně bych to asi neřešil, ten overhead je malý a JIT to opraví až po nějaké době.

Zdenek Henek nereg

Re:Jak se vyhnout frustraci s Java eventy?
« Odpověď #154 kdy: 07. 02. 2016, 20:47:14 »
Mám dotaz, určitě se zde najde někdo kdo bere sportovně naše spory a odpoví. Mějme klasickou implementaci vzoru observer, kde událost vyvolávám takto:

Kód: [Vybrat]
private void fireSpadlaHruska() {
  for(StromObserver observer : observers) {
    handler.spadlaHruska();
  }
}

private void fireSpadloJabko() {
  for(StromObserver observer : observers) {
    handler.spadloJabko();
  }
}
}

Tak by mě zajímalo, jestli je kompilátor pro Javu taková šikulka, že se za běhu aplikace nemusí jakoby spouštět zcela prázdná metoda SpadloJabko() u nějakého observera, který na ní nijak nereaguje. Nebo se snad stane za běhu to, že skutečně dojde k sérii příkazů ve snaze spustit metodu, ve které nic není? (např observer Pepa chce vědět jen o pádu jabka a nezajímají ho hrušky. Třeba debugger by si do té metody vlezl.

Mozna uz by bylo nacase, abyste zacal javu studovat a ne jen nadavat a ptat se na kazdou kravinu ve forech.

Java i JVM je open source tady jsou zdrojaky http://openjdk.java.net/  Porad tvrdite jak je .net a jazyk c lepsi, tak predpokladam, ze v C umite aspon cist zdrojove kody.
Tvrdite jak je Java spatna (mel byste rozlysovat Java a JVM), tak predpokladam, ze znate do detailu runtime .NET, popripade jine platformy, nebo jste si dokonce vlastni prekladac napsal.

Na zaklade tohoto bystem mel byt schopen si odpovedi najit sam ve zdrojovych kodech JVM a pochopit co je to JIT a jak funguje, pokud jste se s tim na jinych platformach nesetkal, misto lacineho placani, ze je Java pomala.





jenom_ja

Re:Jak se vyhnout frustraci s Java eventy?
« Odpověď #155 kdy: 08. 02. 2016, 00:12:23 »
Java i JVM je open source tady jsou zdrojaky http://openjdk.java.net/
To je jen jedna implementace Javy a JVM. Ja pouzival IBM JDK a bezelo to pocitove o mnoho svizneji nez Sun Java; JRockit dle nekoho taky vyhraval. A OpenJDK bylo daleko za Sun implementaci.

Nevim, jak je to ted, ale byt vami, vyzkousel bych vice implementaci.

Re:Jak se vyhnout frustraci s Java eventy?
« Odpověď #156 kdy: 08. 02. 2016, 09:03:28 »
A OpenJDK bylo daleko za Sun implementaci.
OpenJDK vzniklo zveřejněním těch částí Sun implementace, které bylo možné z hlediska licencí zveřejnit. Takže obecně bych o rozdílech v rychlosti pochyboval, když je to to samé.

Re:Jak se vyhnout frustraci s Java eventy?
« Odpověď #157 kdy: 08. 02. 2016, 09:08:18 »
Tak by mě zajímalo, jestli je kompilátor pro Javu taková šikulka
Java jako jazyk je prakticky assembler pro byte kód. Kompilátor pro Javu tedy záměrně prakticky nic neoptimalizuje. Optimalizuje až JVM, protože má pro optimalizaci mnohem více informací, než kompilátor.

Zdenek Henek nereg

Re:Jak se vyhnout frustraci s Java eventy?
« Odpověď #158 kdy: 08. 02. 2016, 09:56:21 »
A OpenJDK bylo daleko za Sun implementaci.
OpenJDK vzniklo zveřejněním těch částí Sun implementace, které bylo možné z hlediska licencí zveřejnit. Takže obecně bych o rozdílech v rychlosti pochyboval, když je to to samé.

Presne tak. Licence je GPL with classpath exception. Oracle JDK vychazi z OpenJDK, takze musi dodrzovat tuto licenci.

JRockit se postupne merguje do jdk (https://blogs.oracle.com/henrik/entry/oracles_jvm_strategy) a jeji placene casti zacinaji byt placene pluginy do Oracle JDK. Napriklad Flight Recorder http://docs.oracle.com/cd/E15289_01/doc.40/e15070/introduction.htm http://www.oracle.com/technetwork/java/javaseproducts/mission-control/java-mission-control-1998576.html

IBM nevim, myslel jsem si, ze zije uz jen mainframe verze, ale podle nabidky na stazeni tam je verze i pro linux. Pouzivate IBM javu v produkci na Intel strojich? Nemam dostatek informaci a C4BS veli zustan u Oracle/OpenJDK, vsak IBM se taky prida a bude to delat jako Oracle
Podle wikipedie uz tam dokonce jsou minimalne vyuzivaji knihovny a maji svoje jvm :) https://en.wikipedia.org/wiki/OpenJDK#Collaboration_with_IBM.2C_Apple.2C_and_SAP

Zapomel jste na Azul. To je asi jedina alternativa o ktere bych uvazoval v pripade, ze mi z jakehokoliv duvodu Oracle/OpenJDK nestaci. Pouzivate nekdo?

Ad openJDK,
jsem strasne moc rad za to ze existuje. Oracle java ma jeden velky problem v renderovani obrazku se zapnutym antialiasingem. Ductus implementace je optimalizovana pro renderovani jednoho obrazku a ne pro paralelni renderovani. V pripade, ze chci renderovat vic nez jeden, tak je to velmi ale velmi pomale. Tato cast nemohla byt uvolnena z licencnich duvodu. Vznikl projek https://github.com/bourgesl/marlin-renderer/wiki/How-to-use , ktery je(byl?) pomalejsi, ale v pripade 10 requestu uz byl nasobne rychlejsi. To se nam zrovna v GIS systemech hodi vic. Diskuze o rychlosti je opravdu velmi relativni :).

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Jak se vyhnout frustraci s Java eventy?
« Odpověď #159 kdy: 08. 02. 2016, 11:13:13 »
Tak by mě zajímalo, jestli je kompilátor pro Javu taková šikulka
Java jako jazyk je prakticky assembler pro byte kód. Kompilátor pro Javu tedy záměrně prakticky nic neoptimalizuje. Optimalizuje až JVM, protože má pro optimalizaci mnohem více informací, než kompilátor.
Ale zase má na ně mnohem méně času.

Re:Jak se vyhnout frustraci s Java eventy?
« Odpověď #160 kdy: 08. 02. 2016, 11:34:35 »
Ale zase má na ně mnohem méně času.
Myslím, že ty týdny, kdy běží aplikace na serveru (což je dnes nejtypičtější použití Javy), jsou dost času…

andy

Re:Jak se vyhnout frustraci s Java eventy?
« Odpověď #161 kdy: 08. 02. 2016, 12:02:39 »
No tak ja som si robil nejake testy a starsi server jvm sa bez tiered compilation pri niektorych sluzbach a celkovom pocte requestov k tym super mega optimalizaciam snad ani nedostal. A kto uz len robi preheating na celu apku? Netvrdim, ze to je problem, skor je to taka vec co sa mi nepaci a jeden z dovodov, preco sa zaujimam o golang (druhy je, ze golang sa ovela viac hodi na male projekty, nie je to pamatozrut).

Zdenek Henek nereg

Re:Jak se vyhnout frustraci s Java eventy?
« Odpověď #162 kdy: 08. 02. 2016, 12:26:07 »
No tak ja som si robil nejake testy a starsi server jvm sa bez tiered compilation pri niektorych sluzbach a celkovom pocte requestov k tym super mega optimalizaciam snad ani nedostal. A kto uz len robi preheating na celu apku? Netvrdim, ze to je problem, skor je to taka vec co sa mi nepaci a jeden z dovodov, preco sa zaujimam o golang (druhy je, ze golang sa ovela viac hodi na male projekty, nie je to pamatozrut).

https://www.azul.com/products/zing/readynow-technology-for-zing/   jeste jsem nepotkal nikoho, kdo by si koupil jvmko od Azulu.

Zdenek Henek nereg

Re:Jak se vyhnout frustraci s Java eventy?
« Odpověď #163 kdy: 08. 02. 2016, 12:29:14 »
Ale zase má na ně mnohem méně času.
Myslím, že ty týdny, kdy běží aplikace na serveru (což je dnes nejtypičtější použití Javy), jsou dost času…

Toto byla pravda, dokud jsme nenasadili cluster. Plan je o vikendu a off peak nechat bezet jen dva stroje.
Takze toto zacne byt casem trochu problem.
https://www.azul.com/products/zing/readynow-technology-for-zing/
to muze spravit, ale na to zatim nedostanu penize a taky mi vadi, ze s tim delaji tolik tajnosti a nemuzu si jejich jvm osahat v dev fazi.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Jak se vyhnout frustraci s Java eventy?
« Odpověď #164 kdy: 08. 02. 2016, 13:09:48 »
No tak ja som si robil nejake testy a starsi server jvm sa bez tiered compilation pri niektorych sluzbach a celkovom pocte requestov k tym super mega optimalizaciam snad ani nedostal. A kto uz len robi preheating na celu apku? Netvrdim, ze to je problem, skor je to taka vec co sa mi nepaci a jeden z dovodov, preco sa zaujimam o golang (druhy je, ze golang sa ovela viac hodi na male projekty, nie je to pamatozrut).
Jo, Go je lepší volba, má mnohem lepší optimalizace a žádný dynamický runtime.