- Mindenki Z Fold7-et akar
- Samsung Galaxy Watch8 - Classic - Ultra 2025
- Samsung Galaxy A55 - új év, régi stratégia
- Samsung Galaxy S23 Ultra - non plus ultra
- Samsung Galaxy A54 - türelemjáték
- Honor 200 Pro - mobilportré
- Samsung Galaxy S24 FE - később
- Szívós, szép és kitartó az új OnePlus óra
- Realme GT 5G - versenyképes
- Yettel topik
Hirdetés
Új hozzászólás Aktív témák
-
modder
aktív tag
Hali, nagyjából jó, amiről beszéltek, de kicsit össze vagytok zavarodva.
Azt mondjátok, hogy "ha változtatsz a kódon, a JIT csak azt fordítja újra". De ehhez előbb nyilván bytekódot kéne generálni, szóval ez a példa nem jó.
A jvm interpreterként működik: veszi a bytekódot, és sorról sorra megfeleltetni egy-egy gépi utasításnak vagy jvm-beli utasításnak. Ilyen a PHP is, a python is, az összes interpretált nyelv.
Amitől a JVM-et Hotspot-JVM-nek hívják az a JIT, ami az alábbi tulajdonságot aknázza ki:
Általában elmondható, hogy egy program a futása során az idő 90%-át a programrészek (függvények) 10-20%-ában tölti el.és ebből jön a JIT működése:
A JVM futtatja a kódot, statisztikákat készít róla futás közben (profiling). Megtalálja ezt a 10%-ot, ahol a program a futása során a legtöbb időt tölti, majd ezeket a kódokat direktbe lefordítja a célgép gépi kódjára, majd beszúr egy ugrást az eredeti bytekódba (természetesen a memóriában, a .class fájlokba nem ír semmit), hogy most onnantól a gépi kódos rész fut.Az optimalizálás pl. abban nyilvánul meg, hogy a JVM látja, mik azok a feltételek, amik sok-sok lefutás után sosem teljesülnek vagy mindig teljesülnek, és úgy fordítja az adott kódrészletet gépi kódra, hogy ezeket a feltételeket alapból igaznak vagy hamisnak veszi
Például egy if-else ág mindig csak egyik fele igaz, akkor úgy fordítja le a kódot, hogy ki is hagyja a feltételvizsgálatot. Természetesen folyamatosan figyeli ezeket az előfeltételeket, és ha van 1 eset, amikor mégis lefutna a kioptimalizált rész, akkor az eredeti bytekódot futtatja interpretált módban.Szó sincs arról, hogy mindent gépi kódra fordít.
Remélem tisztáztam
Szerk:
még annyi, hogy ezek mind a program 1-1 futása során történnek. nincsen olyan, hogy a futását befejező program gépi kód részeit valahová elmenti, és ha újra futtatod, akkor azokat betölti. ezek mint just-in-time egy-egy futás alkalmával történő változtatások. ( ezt azért mondom, mert régen én így képzeltem)
-
Chipi333
csendes tag
A NetBeans annyit csinal, hogy letrehoz neked egy osztalyt ami javax.swing.JFrame-bol szarmazik, es van benne alapbol egy GUI szerkeszto. Eclipseben ezt kezzel kell. De eselyes azert, hogy van ahhoz is vmi plugin ami megcsinalja helyetted. Mert hat kezzel guit irkalni a legundoritobb resze ennek a szakmanak
-
Lacces
őstag
Picit továbbhaladtam a példában. Elég érdekes amit írt, de nekem kérdőjel maradt benne.
Van ez a két sor:
kk = vv;
System.out.println(kk.plusz(new Valos(9)).toString());Az első sor még ok, hogy itt dinamikus típus lesz, Komplex deklarált, és valós.
Viszont a második sornál a magyarázatot a példában nem értettem meg, hogy akkor most mi va...
kk dinamikus típus lesz. és meghívjuk a plusz metódust, amelynek a paramétere valós.
public Komplex plusz(Komplex k){ // Komplex osztályban
System.out.println("K + K: "+toString() +" + " + k.toString());
return new Komplex(re+k.re, im+k.im);
}
public Komplex plusz(Komplex k){ // Valos osztályban
System.out.println("V + K: "+toString() + " + " + k.toString());
return new Komplex(re+k.re, k.im);
[I]Az eredmény egyik sora: V + K: (7.8) + (9.0) [/I]lesz
}
public Valos plusz(Valos v){ // Valos osztályban
System.out.println("V + V "+toString()+ " + " + v.toString());
return new Valos(re+v.re);A magyarázat olyan, hogy dinamikus kötést alkalmaz. Ez rendben van, de miért?
1.Azért mert kk Komplex deklarált, de Valos Konstruktor hívás van, ezért egyből a Valos osztályból keresi hozzá a plusz metódust?
2. Vagy azért, mert Komplex osztályban nincs plusz() metódus amelynek a paraméter Valos szám!, és ezért a gyermek osztályban keres hozzá!Most ilyenkor egyből megy a deklarált osztályba, vagy abba az osztályba megy a fordító, ahol megvan híva az objektum konstruktora?
-
skoda12
aktív tag
1.
A ListaElem osztaly tartalmaz egy referenciat egy masik ListaElem tipusu objektumra, annak meg van elem nevu valtozoja, amit el tud erni a fenti hivatkozassal.
2.
A Hasonlithato kodjat nem talalom, de gondolom ugy mukodik, mint a Comparable. Olvasd el a Comparable interface dokumentaciojat, abban leirjak szepen, hogy mikor mit kell vizsgalni.
3.
Azert kell az a sor, mert nelkule mindig ugyanazt az elemet adna vissza a metodus.
-
Lacces
őstag
Már meg van a megoldás :-D
System.out.println("Enter the radius and length of a cylinder:");
Scanner sc = new Scanner(System.in);
String radiusAsString = sc.next();
String lengthAsString = sc.next();
double radius = Double.parseDouble(radiusAsString);
double length = Double.parseDouble(lengthAsString);Ehhez a verzióhoz mit szólsz?
System.out.println("Enter the radius and length of a cylinder:");
Scanner sc = new Scanner(System.in); Pattern newlineOrSpace =
Pattern.compile(System.getProperty("line.separator") + "|\\s");
sc.useDelimiter(newlineOrSpace);
double radius=sc.nextDouble();
double length=sc.nextDouble(); -
skoda12
aktív tag
Character.digit(ch, 10) -t hasznald konverziohoz, ahol ch char tipusu.
Elozore pedig: A Scannernek van nextDouble metodusa is. Nyilvan a streamet valahogy le kell zarni, erre az enter nem eleg. Ha nem akarod tulbonyolitani, akkor beolvashatsz egy sort egy String-be es ebbol olvasod ki Scanner-rel a double ertekeket.
-
skoda12
aktív tag
1.
double pi = 3.14;
System.out.printf("%.0f\n", pi);2.
A 9.0 literal double tipusu, ami a legnagyobb tipus a (9.0 / 5) * celsius + 32 kifejezesben, ha celsius float. Emiatt az eredmeny is double, amit castolas nelkul nem tudsz float-ba belerakni.
9.0f viszont float tipusu.3.
A Scanner osztalyt hasznald.
-
skoda12
aktív tag
1.
Nyilvan rengeteg kulonbseg van long es Long kozt.
Long egy referencia tipus, long egy primitiv tipus. Ha ranezel a Long dokumentaciojara, akkor latod, hogy tele van konverzios metodusokkal, amik jol jonnek, ha nem akarsz castolni pl.
Masreszt Long immutable, mig long nem.
Templatek megadasanal csak referencia tipust hasznalhatsz, tehat nem irhatsz olyat, hogy List<long>.
Ettol fuggetlenul elelmiszerpult.get(vonalKod), akkor is mukodik ha vonalKod long tipusu, ekkor ugyanis egy Long-ba lesz becsomagolva autoboxingnak koszonhetoen.2.
Az is teljes erteku megoldas lehet, ha csak egy this() hivodik meg a konstruktorodban. Mondjuk Hashtable tipikusan nem az a tipus, ami neked kell. -
kispx
addikt
Foglalt szavakat emeli ki, a String egy osztály.
Szerintem is this.t=m; -nek kellene állnia, az Eclise nem is fog jelezni, mert this.t=t; szintaktikailag helyes, azt nem tudja leellenőrizni, hogy szemantikailag is helyes.
-
Lortech
addikt
[Type interface]
A példa általánossága miatt áll itt ez az interfész, bármilyen típusú elemeket tartalmazó lista iterálható vele.
Új hozzászólás Aktív témák
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Battlefield 6
- bitpork: Phautós tali a Balcsinál 2025 Augusztus 2 napján (szombat)
- Mindenki Z Fold7-et akar
- Miért álltak az oldalak egy hétig, mi történt?
- Opel topik
- Samsung Galaxy Watch8 - Classic - Ultra 2025
- Autós topik látogatók beszélgetős, offolós topikja
- USB Type-C port is van az ASUS ProArt szériás VGA-ján
- Samsung Galaxy A55 - új év, régi stratégia
- További aktív témák...
Állásajánlatok
Cég: FOTC
Város: Budapest