Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Ottimizzazione codice

  1. #1

    Ottimizzazione codice

    Salve a tutti, ho un breve quesito di ottimizzazione del codice java.

    Allora, per esempio abbiamo questa situazione

    codice:
    public List<Object> getFoo() {
        // do something
       return aList;
    
    }
    
    // Soluzione 1
    public void goo() {
    
        if(getFoo() != null && !getFoo().isEmpty() ) {
           list = getFoo();
           // work with list
         }
    }
    
    // Soluzione 2
    public void goo2() {
    
     List<Object> list = getFoo();
    
      if( list != null && !list.isEmpty()) {
         // work with list
       }

    Secondo voi, ragionando esclusivamente a livello di creazione del ByteCode e delle performance, qual è la soluzione migliore? oppure ce n'è una terza?

    Ciao a tutti

  2. #2

    Re: Ottimizzazione codice

    Originariamente inviato da Jack.cpp
    Salve a tutti, ho un breve quesito di ottimizzazione del codice java.

    Allora, per esempio abbiamo questa situazione

    codice:
    public List<Object> getFoo() {
        // do something
       return aList;
    
    }
    
    // Soluzione 1
    public void goo() {
    
        if(getFoo() != null && !getFoo().isEmpty() ) {
           list = getFoo();
           // work with list
         }
    }
    
    // Soluzione 2
    public void goo2() {
    
     List<Object> list = getFoo();
    
      if( list != null && !list.isEmpty()) {
         // work with list
       }

    Secondo voi, ragionando esclusivamente a livello di creazione del ByteCode e delle performance, qual è la soluzione migliore? oppure ce n'è una terza?

    Ciao a tutti
    Secondo me c'è ne una terza
    codice:
    // Soluzione 2
    public void goo2() {
    
     final List<Object> list = getFoo();
    
      if( list != null && !list.isEmpty()) {
         // work with list
       }
    Aggiungendo final da un ulteriore hints al gc per liberare lo spazio di memoria della lista.
    Ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    dipende anche dalla frequenza con cui intendi eseguire getFoo().
    Mi spiego, eseguendo una tantum, anche la soluzione 1 va bene, anche se la scriverei così

    codice:
    public void goo(){
       List<Object> list  = getFoo()
       if(list.isEmpty() ) {
          //DO OTHER THINGS
      }
    }
    
    //FAI IN MODO CHE LIST SIA SEMPRE VALORIZZATA
    
    List<Object> list = new ArrayList<Object>();
    public List<Object> getFoo(){
       return list; 
    }
    in realtà final in java indica che la variabile può essere assegnata una sola volta, non indica al gc di deallocare in qualche modo.
    Usare final ti aiuta perché non puoi modificare la variabile, non perché non la fai deallocare. Ma così come scritto, dentro un metodo, non ha molto senso visto che è dereferenziata alla fine del metodo.

    Infine ti consiglio di assegnare un valore di default, bypassi regolarmente il controllo a null (che non è bello nemmeno a vedersi e fa sprecare cicli di clock, anche se irrisori in moderne architetture).

    ps a meno che non hai seri problemi di performance, quanto hai detto qui è praticamente irrisorio in un programma medio

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.