Originariamente inviato da andbin
Hai un po' di confusione ....
Quello che c'è dentro i file .class (a parte header, descrittori vari, ecc...) è il "byte code" java, un codice macchina inventato di sana pianta dalla Sun. Non è un codice macchina per un processore fisico, reale esistente. Semplicemente è un set di istruzioni "inventato" da zero.
Poi per la esecuzione reale del bytecode ci sono 2 strade: la interpretazione pura o la compilazione JIT (just in time) che trasforma il byte code nel codice macchina del processore reale. E quest'ultima cosa è quello che fa di norma una virtual machine per una certa piattaforma, perché chiaramente più efficiente.
Detto questo, c'è da dire che qualcosa esiste per ottenere eseguibili "nativi". Parlo di GCJ (vedi
http://en.wikipedia.org/wiki/GCJ ). Ma innanzitutto è per gli Unix-like e poi comunque non credo (almeno così sapevo) che sia completo dal punto delle librerie.
Già perché non è tanto questione di generare del codice macchina per un certo processore fisico .... ma avere nativo tutto il set di librerie del runtime java!!
E comunque ci sarebbe da ragionare su cosa vorrebbe dire (senza avere davvero un JRE) fare operazioni che riguardano la reflection o il caricamento delle "risorse".
Morale: se si ha una applicazione Java, meglio farla "girare" con un JRE apposito. Altrimenti si rischia di darsi la classica zappa sui piedi.