Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    memorizzazione delle variabili locali nello stack di Java

    Ciao,

    avrei una curiosità sulla memorizzazione delle variabili di tipo primitivo nella jvm.


    A quanto mi risulta, le variabili di questo tipo, vengono impilate sullo stack che gestisce parte della memoria associata al programma in esecuzione.
    Differente è l'allocazione degli oggetti, che avviene nello Heap e sullo stack viene messo solo il puntatore all'oggetto stesso.

    La dimensione di ogni 'slot' sullo stack, se non sbaglio è di 32 bit.
    Infatti, variabili di tipo int e float occupano uno slot, double o long ne occupano 2.

    Il dubbio mi viene quando si parla di variabili di tipo byte o short. Occupano anche loro un intero slot o funziona in qualche altro modo?
    Anche perchè, nel caso, non mi spiegherei la loro utilità: occuperebbero cmq lo spazio di 1 intero e anche nelle operazioni vengono promossi ad intero.
    Dove starebbero i vantaggi di utilizzare short o byte?

    Qualcuno mi può illuminare?

    Grazie a tutti.

    Ps: se nn si capisce qualcosa chiedete

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: memorizzazione delle variabili locali nello stack di Java

    Originariamente inviato da teuccio
    A quanto mi risulta, le variabili di questo tipo, vengono impilate sullo stack che gestisce parte della memoria associata al programma in esecuzione.
    Differente è l'allocazione degli oggetti, che avviene nello Heap e sullo stack viene messo solo il puntatore all'oggetto stesso.
    Facciamo una precisazione:
    - Le variabili di istanza e gli oggetti (compresi gli array) "vivono" sul heap.
    - Le variabili locali di un metodo "vivono" sullo stack.

    Originariamente inviato da teuccio
    La dimensione di ogni 'slot' sullo stack, se non sbaglio è di 32 bit.
    Infatti, variabili di tipo int e float occupano uno slot, double o long ne occupano 2.

    Il dubbio mi viene quando si parla di variabili di tipo byte o short. Occupano anche loro un intero slot o funziona in qualche altro modo?
    Anche perchè, nel caso, non mi spiegherei la loro utilità: occuperebbero cmq lo spazio di 1 intero e anche nelle operazioni vengono promossi ad intero.
    Dove starebbero i vantaggi di utilizzare short o byte?
    Credo che la gestione dello stack sia dipendente dalla implementazione della virtual machine.

    Comunque magari verifica cosa dice il: The Java Virtual Machine Specification, in particolare il capitolo 3.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Sì sì, scusa, le variabili d'istanza, facendo parte di un oggetto stanno nello heap.
    Mi ero espresso male.

    Per quanto riguarda il link che mi hai dato, credo di esserci passato ieri sera.

    Ne ho letto parecchio, ma non sono sicurissimo di aver capito bene: li parla dello stack come diviso in slot: tutti i tipi primitivi occupano uno slot, tranne long e double che ne occupano due:
    Dal capitolo: 3.6.1
    A single local variable can hold a value of type boolean, byte, char, short, int, float, reference, or returnAddress. A pair of local variables can hold a value of type long or double
    Quindi continuo a chiedermi: a cosa servono byte e short se comunque in memoria occupano lo spazio di un int e nelle operazioni aritmetiche vengono comunque promossi ad intero prima di effettuare le operazioni?

    Forse il vantaggio sta solo nel fatto che, quando questi tipi dati vengono usati nelle variabili d'istanza occupano meno spazio nello heap?

    Grazie ciao

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.