Java Desktop System 2 di Sun: esce a Maggio
Sun ha annunciato che la seconda release di Java Desktop System sarà rilasciata il prossimo mese di maggio
di Fabio Boneschi pubblicata il 26 Aprile 2004, alle 15:06 nel canale Programmi









AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Un iPhone Duo da oltre 65 mila dollari: Caviar lancia la collezione Zodiac
Anthropic: IPO tra 70 e 78 dollari, Google e Nvidia comprano 10 miliardi ciascuno
SSHole in OpenSSH è già sfruttata: la CISA la inserisce nel catalogo KEV
Secure Future Group: il rischio cyber si misura in euro, non soltanto in vulnerabilità
Recensione Anker MagGo Power Bank 2 Pro, il power bank magnetico che non teme il calore
Salesforce Agentforce Coworker: il collega digitale che lavora al posto tuo
Sirui porta l’autofocus luminoso sotto i 650 euro: 24mm f/1.4 e 15mm f/1.6
BluePhishing, il nuovo metodo di attacco che sfrutta gli agenti di Microsoft Copilot. L'analisi di Proofpoint
Elon Musk parla dei propulsori Raptor 4 dedicati alle future versioni di Starship
NVIDIA, la vicenda Jensen Huang finisce sotto indagine dell'FBI e gli azionisti avviano una class action
Spiare un monitor dal cavo HDMI: un'IA azzecca oltre 7 caratteri su 10
Infomaniak lancia lo storage a oggetti S3 nel Public Cloud sovrano svizzero
Rocket Factory Augsburg ha posticipato il lancio del razzo spaziale RFA ONE al 2027
Lightning Tables, Confluent promette oltre 1.000 query al secondo senza database aggiuntivi









24 Commenti
Gli autori dei commenti, e non la redazione, sono responsabili dei contenuti da loro inseriti - info....
Ma ciò non implica assolutamente (e non è proprio così
.....
Il codice che un compilatore può generare può essere diverso, oppure esattamente uguale, ma questo nessuno lo garantisce
Hai ragione, java non definisce uno standard di compilazione programmaticamente (Un approccio interessante utilizzato ad esempio in Squeak in cui la VM viene generata a partire da una codice di alto livello, in modo da garantire un esecuzione bit-identica su differenti architeture) , ma fornisce specifiche documentali.
Ma dato che quello che si sta producendo e' bytecode che deve essere conforme all'architettura specificata della JVM, le differenze prodotte da vari compilatori sono relativamente ridotte. (E' chiaro che si possono o no utilizzare algoritmi per fare inlining, come tipicamente avviene per i field e metodi final, e altre cose, ma si tratta di ottimizzazioni rispetto all'architettura della JVM, non rispetto alla macchina fisica che seguira' il codice)
Da questo punto di vista il bytecode ha si subito una prima fase di elaborazione, ma questa non e' dipendente dalla macchina fisica su cui verra' eseguito.
Che sia più difficile generare codice macchina efficente a partire dal bytecode mi sembra un po' bizzarro. Sono tutto fuorchè un esperto di codice macchina, tuttavia il set di istruzioni per la macchina virtuale java è nato con la specifica esigenza di essere "silicabile" (orrendo termine [Chang 1997]), come per altro ancora testimoniato nell'introduzione alle specifiche della JVM (Sun, The Java Virtual Machine Specifications, 2nd ed.).
Questo e' il secondo step di compilazione, che a questo punto puo' essere specifico a seconda dall'implementazione della JVM per l'architettura fisica.
L'ottimizzazione e' basata sul bytecode prodotto e non vedo difficolta rispetto a quella del sorgente originario (E' una rappresentazione in larga parte 'equivalente' )
Certamente c'e' un trade-off: alcune delle scelte di ottimizzazione fatte durante la compilazione Sorgente-Bytecode possono avere impatti diversi su diverse JVM. Un processo di compilazione unico Sorgente-Codice macchina potrebbe essere potenzialmente piu' efficiente anche se non portabile (e quindi addio ad uno dei benefici di java, non potrei usare il mio IDE preferito sotto windows e sotto linux
Se il bytecode non può sfruttare, ad esempio, il set SSE, non è detto che non possa farlo il compilatore JIT (personalmente però ho forti dubbi che la HotSpot vada a verificare il tipo di processore).
Anch'io ho forti dubbi, dal codice delle librerie di java (mi vengono immente il Java3D o l'ImageToolkit), molte scelte di ottimizzazione per piattaforma sono trattate a livello applicativo con pattern di tipo AbstractFactories per istanziare implementazioni alternative, che magari si agganciano a API native.
Discorso interessante, se qualcuno ha altre info, sono curioso
Ciao
P.S. Il pattern "AbstractFactories" a cui ti riferisci è il famoso "Facade" pattern (con la "c" spagnola)?
Ti faccio un breve esempio:
In pratica esiste una classe astratta (questa e' l'Abstract Factory) che ha un metodo statico per costruire un oggetto; questo metodo richiama un metodo di istanza della factory concreta.
L'oggetto restituito implementa un interfaccia (E qui ci sta il Façade pattern
Su internet si trovano un sacco di pagine sui pattern, ma io partirei dal mitico wiki di Ward Cunningham:
http://www.c2.com/cgi/wiki?AbstractFactory
Ciao
Devi effettuare il login per poter commentare
Se non sei ancora registrato, puoi farlo attraverso questo form.
Se sei già registrato e loggato nel sito, puoi inserire il tuo commento.
Si tenga presente quanto letto nel regolamento, nel rispetto del "quieto vivere".