Differenza di efficienza [duplicato]

0

Sto facendo un compilatore e sto usando System.out.println(); per stampare l'assembly;

E il codice diventa più grande e più complicato da comprendere. Voglio sapere qual è la differenza di efficienza tra questo e se dovrei o no:

System.out.println("iload");

o

private void printAssemblyCode(String code) {
    System.out.println(code);
}    
printAssemblyCode("iload");

È solo per essere più leggibile. Ne vale la pena o no?

    
posta Elias Pinheiro 29.10.2015 - 14:27
fonte

3 risposte

1

L'efficienza non è molto diversa a causa delle ottimizzazioni nei moderni compilatori Java, ma non guadagna molta flessibilità. L'unica cosa che ti consente di fare è disattivare la stampa in una posizione anziché in molte.

Sarebbe meglio servire delegando a un framework di registrazione. Java ha registrazione integrata , e ci sono altri framework come Log4j .

Usando un framework di registrazione, acquisisci diverse abilità che il tuo codice attuale non possiede:

  • È possibile accedere a flussi arbitrari: standard, errore standard, un file, un socket, ecc.

  • Hai livelli diagnostici aggiuntivi. Piuttosto che on o off puoi avere errori, avvertimenti, informazioni, ecc. E puoi controllare quali livelli diagnostici vengono emessi.

  • I messaggi di registrazione possono includere informazioni aggiuntive come la classe e il numero di riga in cui si è verificato il log (se si passa un Throwable ) e la data e l'ora.

  • Tutta la configurazione viene eseguita tramite, beh, configurazione, non codice. Piuttosto che commentare una riga di codice e ricostruire, puoi modificare un file XML o di proprietà e il gioco è fatto.

Una volta che hai imparato a utilizzare un framework di registrazione, è altrettanto facile che usare System.out.println() ma ci sono molte più possibilità se ne hai bisogno.

Infine, un framework di registrazione richiede in genere una piccola quantità di inizializzazione, ma aggiunge poco o nessun notevole overhead al processo in esecuzione quando si richiama la sua funzionalità.

    
risposta data 29.10.2015 - 15:17
fonte
3

Mettere il codice in un metodo ha un vantaggio diverso: se decidi di non stampare su console, devi solo modificare una singola riga di codice.

L'hardcoding della stampa su console come quella del tuo progetto non è una buona idea.

Una volta che hai una versione funzionante e vuoi continuare con essa, dovresti passare e cambiare il modo in cui passi l'assembly al codice chiamante per un'ulteriore elaborazione. Una delle cose che puoi fare è cambiare le stampe in una chiamata a un'interfaccia innestabile che raccoglie gli opcode ( non come stringhe) e un'implementazione che li stampa sulla console.

    
risposta data 29.10.2015 - 14:50
fonte
1

L'overhead di chiamare un altro metodo per generare qualcosa sarà troppo piccolo da notare, dal momento che I / O è molto, molto più lento del calcolo.

La domanda rimane quanto è più leggibile utilizzare il metodo di stampa personalizzato piuttosto che println direttamente. Penserei che sia piccolo, ma potrebbe essere utile comunque, dal momento che il costo aggiuntivo è molto vicino a 0.

    
risposta data 29.10.2015 - 14:31
fonte

Leggi altre domande sui tag