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

    Design delle classi e occupazione di memoria

    Ciao,

    supponiamo di avere la seguente classe
    Codice PHP:
    class {
     private 
    int x;
     public 
    void longMethod(){
           
    /* il corpo del metodo e'  composto da molto codice che usa la sola variabile x */
     
    }

    mi chiedevo se, creando ad esempio 10 istanze della classe A il codice del metodo longMethod() sia caricato in memoria 10 volte con una occupazione di spazio inutile,
    oppure se cio' che viene replicato per ogni istanza siano solo i dati e non il codice da eseguire.
    Altrimenti sarebbe piu conveniente, in termini di occupazione di memoria, fare ad esempio cosi :
    Codice PHP:
    class A{
      private 
    int x;
      public static 
    void longMethod(){
         
    staticMethod(x);
      } 

      private static 
    void staticMethod(int x){
          
    /* metodo composto da molto codice che prima si trovava in longMethod */
      
    }

    che ne pensate ?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    se non ricordo male ogni codice si porta la sua istanza, quindi significa che hai 10 istanze della stessa source.

    Ma se lo fai statico, hai problemi di concorrenza quindi non so, quanto è lungo?

  3. #3
    grazie della risposta.
    Il codice e' abbastanza lungo perche' e' pesantemente basato sul polimorfismo.
    E' un diagramma i cui vari elementi implementano dei metodi di una superclasse comune.
    Ho usato un po' il classico schema degli sprite nei videogiochi dove la classe sprite dichiara il metodo
    Codice PHP:
    public abstract void paint(Graphics g
    e ogni istanza di sprite (ad esempio in space invaders la nave spaziale e i vari tipi di alieni ) ridefinisce il metodo paint e si "disegna da sola". cosi nella classe che disegna il frame devi solo fare
    Codice PHP:
    for(Sprite s sprites)
       
    s.paint(g); 
    pero' , dato che uso lo stesso concetto anche per altre cose oltre al paint, mi sta venendo il dubbio che, in un diagramma con molti nodi e molti archi, la memoria occupata mi schizza alle stelle.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    In realtà questo può riguardare l'occupazione di heap e stack.

    In generale tutto ciò che è locale è sullo stack, tutto ciò che è di istanza è sullo heap (anche le variabili statiche), per quanto riguarda i metodi invece dipende molto dalla implementazione della jvm (ma sta tranquillo che è ottimizzata).

    leggi qui infatti

    In some of Sun's implementations of the Java virtual machine, a reference to a class instance is a pointer to a handle that is itself a pair of pointers: one to a table containing the methods of the object and a pointer to the Class object that represents the type of the object, and the other to the memory allocated from the heap for the object data.

    Non mi preoccuperei di un metodo lungo, ma se vuoi proprio ottimizzare cerca di lavorare sulle variabili

  5. #5
    utile informazione

    grazie

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.