Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Domanda sulla compilazione e sulla JVM

    Salve scuso la domanda banale ma a livello teorico non mi sono chiari alcuni passaggi.

    Ho capito che per l'esecuzione di un programma Java vengono eseguiti i seguenti passaggi:

    codice sorgente Java ---> Bytecode ---> codice nativo (Linguaggio Macchina)

    Ciò che non ho capito è dove intervengono i vari compilatori...cioè, dal bytecode al codice nativo dovrebbe fare la conversione il JIT compiler (che dovrebbe essere incluso nella JVM). Ma il primo passaggio cioè dal codice sorgente al bytecode chi lo fa?

    Seconda domanda: se il JIT compiler (interno alla JVM) fa la traduzione da bytecode a codice nativo quale è il vero compito della JVM?


    grazie.
    My website: .....:::{[( www.oltrecalcio.com )]}:::.....
    My works: .....:::{[( win.oltrecalcio.com/lavori )]}:::.....

    "PALLA TAGLIATA...MESSA FUORI...C'è PIRLO PIRLO...ANCORA PIRLO...DI TACCO...TIRO... GOOOOOOOOOOOOOOOOOL GRROSOOO GRROSOOO GRROSSOOO GOL DI GROSSOOOOOOOO..."

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Re: Domanda sulla compilazione e sulla JVM

    Originariamente inviato da cristal
    Salve scuso la domanda banale ma a livello teorico non mi sono chiari alcuni passaggi.

    Ho capito che per l'esecuzione di un programma Java vengono eseguiti i seguenti passaggi:

    codice sorgente Java ---> Bytecode ---> codice nativo (Linguaggio Macchina)

    Ciò che non ho capito è dove intervengono i vari compilatori...cioè, dal bytecode al codice nativo dovrebbe fare la conversione il JIT compiler (che dovrebbe essere incluso nella JVM). Ma il primo passaggio cioè dal codice sorgente al bytecode chi lo fa?
    Dal sorgente al byte-code c'è il compilatore javac che viene eseguito da chi ha scritto il programma. L'esecuzione di tale compilatore produce l'eseguibile java, ovvero uno o più file .class. Sono questi che vengono eseguiti dalla JVM.

    Seconda domanda: se il JIT compiler (interno alla JVM) fa la traduzione da bytecode a codice nativo quale è il vero compito della JVM?

    grazie.
    Quello, appunto, di eseguire il programma. Non è sufficiente tradurre il programma in "linguaggio macchina"... bisogna anche eseguirlo.

    Quello che ti sfugge, probabilmente, è che non vi è nessuna traduzione vera e propria del byte-code in codice nativo: semplicemente la JVM prende le istruzioni del byte-code e le interpreta. Questo si chiama "just-in-time": la "traduzione" avviene in tempo reale con l'esecuzione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Perfetto ora è tutto molto più chiaro.
    Mi sorgono però le seguenti domande:

    1) ho letto che solo le JVM più recenti sono dotate del JIT compiler il quale traduce in run time dal bitecode al codice nativo; per cui mi chiedo...senza JIT compiler chi è che traduceva il bitecode in codice nativo? E in quale fase avveniva questa traduzione?

    2) affinchè un programma java possa essere eseguito è sufficiente la JVM o è necessaria la JDK? Mi verrebbe da dire che la JDK è indispensabile in quanto oltre a contenere la JVM contiene anche il compilatore Javac....e senza compilatore Javac la conversione dal codice sorgente Java al bitecode non sarebbe possibile. Giusto?

    grazie ancora.
    My website: .....:::{[( www.oltrecalcio.com )]}:::.....
    My works: .....:::{[( win.oltrecalcio.com/lavori )]}:::.....

    "PALLA TAGLIATA...MESSA FUORI...C'è PIRLO PIRLO...ANCORA PIRLO...DI TACCO...TIRO... GOOOOOOOOOOOOOOOOOL GRROSOOO GRROSOOO GRROSSOOO GOL DI GROSSOOOOOOOO..."

  4. #4
    Come ti ha spiegato corretamente LeleFT la compilazione da sorgente a bytecode viene fatta dal compilatore javac. Quindi per eseguire il tuo programma non serve la jdk, ma solo la jre che compili il bytecode in linguaggio macchina.

    In pratica quando sviluppi in java in genere scrivi il sorgente, lo compili con javac e successivamente passi alla distribuzione del tuo applicativo su altri pc che dovranno avere solo la jvm per eseguirlo.

  5. #5
    Originariamente inviato da albyblueska
    In pratica quando sviluppi in java in genere scrivi il sorgente, lo compili con javac e successivamente passi alla distribuzione del tuo applicativo su altri pc che dovranno avere solo la jvm per eseguirlo.
    scusa ma non mi trovo....la JRE contiene solo la JVM ma non contiene compilatori, quindi con la JRE da sola il compilatore Javac non c'è.
    Il compilatore Javac è contenuto nella JDK (che contiene a sua volta anche la JRE e quindi la JVM) ed è per questo che credo che la JDK sia indispensabile affinche un programma Java possa essere eseguito su una macchina.

    Ti trovi?
    My website: .....:::{[( www.oltrecalcio.com )]}:::.....
    My works: .....:::{[( win.oltrecalcio.com/lavori )]}:::.....

    "PALLA TAGLIATA...MESSA FUORI...C'è PIRLO PIRLO...ANCORA PIRLO...DI TACCO...TIRO... GOOOOOOOOOOOOOOOOOL GRROSOOO GRROSOOO GRROSSOOO GOL DI GROSSOOOOOOOO..."

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da cristal
    scusa ma non mi trovo....la JRE contiene solo la JVM ma non contiene compilatori, quindi con la JRE da sola il compilatore Javac non c'è.
    Il compilatore Javac è contenuto nella JDK (che contiene a sua volta anche la JRE e quindi la JVM) ed è per questo che credo che la JDK sia indispensabile affinche un programma Java possa essere eseguito su una macchina.

    Ti trovi?
    È il programmatore che compila i sorgenti, l'utente finale NON DEVE RICOMPILARE! A lui bastano i file .class e la macchina virtuale!
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    aaaaahhhh.....

    ma io parlavo lato programmatore!!!
    My website: .....:::{[( www.oltrecalcio.com )]}:::.....
    My works: .....:::{[( win.oltrecalcio.com/lavori )]}:::.....

    "PALLA TAGLIATA...MESSA FUORI...C'è PIRLO PIRLO...ANCORA PIRLO...DI TACCO...TIRO... GOOOOOOOOOOOOOOOOOL GRROSOOO GRROSOOO GRROSSOOO GOL DI GROSSOOOOOOOO..."

  8. #8
    quindi sostanzialmente...

    lato programmatore: codice sorgente Java --(Javac)--> Bitecodes Java --(JRE)--> Linguaggio nativo

    lato utente finale: Bitecodes Java --(JRE)--> Linguaggio nativo


    L'utente finale usufruisce solo del compilatore JIT che è incluso nella JVM che a sua volta è inclusa nella JRE. Quindi è sufficiente la JRE.

    Il programmatore oltre a fare questo deve anche compilare il sorgente con Javac e quindi necessita della JDK.

    giusto?
    My website: .....:::{[( www.oltrecalcio.com )]}:::.....
    My works: .....:::{[( win.oltrecalcio.com/lavori )]}:::.....

    "PALLA TAGLIATA...MESSA FUORI...C'è PIRLO PIRLO...ANCORA PIRLO...DI TACCO...TIRO... GOOOOOOOOOOOOOOOOOL GRROSOOO GRROSOOO GRROSSOOO GOL DI GROSSOOOOOOOO..."

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da cristal
    quindi sostanzialmente...

    lato programmatore: codice sorgente Java --(Javac)--> Bitecodes Java --(JRE)--> Linguaggio nativo

    lato utente finale: Bitecodes Java --(JRE)--> Linguaggio nativo


    L'utente finale usufruisce solo del compilatore JIT che è incluso nella JVM che a sua volta è inclusa nella JRE. Quindi è sufficiente la JRE.

    Il programmatore oltre a fare questo deve anche compilare il sorgente con Javac e quindi necessita della JDK.

    giusto?
    Sì.

    Ma perchè farsi tanti problemi? Il programmatore usa il JDK (che contiene anche una JRE privata) per programmare (quindi scrive il programma e lo compila, ottenendo un eseguibile .class).

    L'utente finale usa il programma, quindi necessita della JVM (ovvero della JRE), che non fa altro che eseguire il programma.

    Non complicarti tanto la vita con il JIT, che serve solo a farti fare confusione. Pensa solo che chi sviluppa le applicazioni ha bisogno di un compilatore (JDK) e chi esegue ha bisogno di un esecutore (JRE).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Si si, diciamo che farmi problemi è una mia peculiarità....

    siccome ho deciso di entrare nel mondo java vorrei capire prima bene tutti i passaggi architetturali...

    Una domanda più che altro a livello di curiosità...prima che le JVM implementassero il JIT compiler per la traduzione dal bytecode al linguaggio nativo, come faceva la JVM a fare questa traduzione?


    grazie!!!
    My website: .....:::{[( www.oltrecalcio.com )]}:::.....
    My works: .....:::{[( win.oltrecalcio.com/lavori )]}:::.....

    "PALLA TAGLIATA...MESSA FUORI...C'è PIRLO PIRLO...ANCORA PIRLO...DI TACCO...TIRO... GOOOOOOOOOOOOOOOOOL GRROSOOO GRROSOOO GRROSSOOO GOL DI GROSSOOOOOOOO..."

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.