Vra

Ek geknoei rondom met n speelding tolk in Java en ek daarop ag gee probeer om te skryf 'n eenvoudige samesteller wat bytecode vir die Java Virtual Machine kan genereer. Wat het my laat dink, hoeveel optimalisering gedoen moet word deur opstellers dat virtuele masjiene soos JVM en CLI teiken moet?

Doen Slegs In Time (JIT) opstellers doen konstante vou, loergaatjie optimalisaties ens?

Was dit nuttig?

Oplossing

Ek is net gaan voeg twee skakels wat verduidelik bytecode Java se baie goed en 'n paar van die verskeie optimization van die JVM tydens looptyd.

Ander wenke

  

Die optimalisering bytecode is waarskynlik 'n oksimoron in die meeste gevalle

Ek dink nie dis waar nie. Optimalisaties soos hys lus invarianten en voortplantingsmateriaal konstantes kan nooit seer, selfs al is die JVM is slim genoeg om dit te doen op sy eie, deur eenvoudig uit hoofde van die maak van die kode te doen minder werk.

Optimization is wat JVMs lewensvatbaar as omgewings vir lang loop programme maak, kan jy wed dat SUN, IBM en vriende hul bes doen om te verseker dat hulle kan jou bytecode en-net-betyds saamgestel kode optimaliseer in 'n doeltreffende wyse as moontlik.

Met dit gesê, as jy dink jy kan pre-optimaliseer jou bytecode dan is dit waarskynlik nie veel skade te doen.

Dit is die moeite werd om bewus te wees, maar dat JVMs kan neig na 'n beter presteer (en nie gekraak) wanneer dit met net die soort van bytecode die Java samesteller is geneig om op te rig. Dit is nie onbekend vir optimalisatie misgeloop moet word of selfs vir die JVM te crash wanneer permutasies van bytecode voorkom dat korrekte maar in teenstelling met wat sou word wat deur javac is. Hopelik dat die soort van ding is meer in die verlede nou, maar dalk iets om bewus te wees van wees.

Obfuscators soos ProGuard sal baie statiese optimalisatie op jou bytecode te voer vir jou.

Die HotSpot samesteller sal jou kode tydens looptyd optimaliseer beter as moontlik tydens kompilering-time is - dit het meer inligting om te werk met, na alles. Die enigste tyd wat jy moet die optimalisering van die bytecode in plaas van net jou algoritme is wanneer jy fokus mobiele toestelle, soos die Blackberry, waar die JVM vir daardie platform is nie sterk genoeg is om kode te optimaliseer tydens looptyd en net voer die bytecode.

Die optimalisering bytecode is waarskynlik 'n oksimoron in die meeste gevalle. Tensy jy die VM te beheer, jy het geen idee wat dit doen om te bespoedig kode uitgevoer, indien enigiets. Die samesteller nodig sou wees om die besonderhede van die VM weet om Optimized kode te genereer.

Let op Aseraphim:

Dit kan ook nuttig wees om bytecode vir nie-ingeboude programme te optimaliseer in 'n beperkte gevalle wees:

  1. Wanneer die lewering kode oor die draad, bv vir Webstart programme, om aflewerbare / kas grootte te verminder en omdat jy nie noodwendig weet wat die vermoë / spoed van die kliënt.

  2. Vir kode wat jy weet is die prestasie van kritieke belang en gebruik by start-up voor (sê) HotSpot het tyd gehad om enige statistieke versamel.

Verder is die transformasies wat 'n goeie optimaliseerder / Obfuscator voer baie behulpsaam kan wees.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top