Richiesta info prestazione

di il
6 risposte

Richiesta info prestazione

Volevo chiedere se per java e' piu' oneroso lanciiare un metodo di un oggetto gia creato, o un oggetto creato al momento.

class Prova{
 public static voi main( String args[] ) {
  Prova p = new Prova(); //caso 1
  p.test();                       //caso 1
  new Prova().test();   // caso 2
  }
 public void test(){ System.out.println( "Ciao Mondo" ); }
}

qualle delle 2 righe sarebbe piu' oneroso in fase di esecuzione? Personalmente ho pensato che la creazione di un oggetto richieda piu' tempo. Ma quando ho preso il tempo medio di 10 esecuzione dei 2 casi iterati fino a 5000 volte mi dava praticamente lo stesso tempo medio. naturalmente nel caso 1 la dichiarazione e l'inizializzazione di p li tenevo fuori.

for( int j = 0; j < 10; j++ ){
 time[j] -= millisecondi attuali;
 for( i = 0; i < 5000; i++ )
   caso 1, oppure caso 2
 time[i] += millisecondi attuali;
 }
calcolo della media dei valori dell'array time
Puo' essere che l'oggetto da creare e' troppo semplice per fare differenze?

Lingyong Sun

6 Risposte

  • Re: Richiesta info prestazione

    Ciao, instanziare un oggetto e poi usare il metodo, significa fare più operazioni di usare il metodo di un'oggetto istanziato.
    C'è da dire però che l'operazione: Prova p = new Prova() ha dei tempi di esecuzione impercettibili.

    Quando vedi le differenze
    Vedi le differenze quando il costruttore di una classe fa operazioni che impiegano tempo o assorbono tante risorse.
    Metti che nel costruttore fai delle query a database, operazioni sui file ecc. In questi casi ti accorgerai delle differenze.
  • Re: Richiesta info prestazione

    Toki ha scritto:


    Ciao, instanziare un oggetto e poi usare il metodo, significa fare più operazioni di usare il metodo di un'oggetto istanziato.
    C'è da dire però che l'operazione: Prova p = new Prova() ha dei tempi di esecuzione impercettibili.

    Quando vedi le differenze
    Vedi le differenze quando il costruttore di una classe fa operazioni che impiegano tempo o assorbono tante risorse.
    Metti che nel costruttore fai delle query a database, operazioni sui file ecc. In questi casi ti accorgerai delle differenze.
    Io sono alle prime armi nella programmazione, mi piace molto e ogni tanto cerco di creare qualcosa din nuovo e cercare di capire meglio come si svolgono i programmi da parte del pc come in questo caso.
    Grazie per la risposta era piu' o meno quello che immaginavo, quindi se non ho capito male in casi come qesti non fa molta differenza se io uso l'uno o l'altro sistema per la semplicita' dell'inizializzazione dell'oggetto.
    Per ora non so ancora usare le query e database, sto facendo una scuola serale per recuperare quello che ho perso epr una decisione stupida del passsato e l'argomento sar' fatto prossimo anno.
    Poi vorrei anche sapere la quantita' di memoria occupata. Istanziare un oggetto richiede memoria che rimane bloccato giusto? se e' cosi conviene usarlo solo per oggetti che dovranno essere usati piu' volte in futuro giusto? Devo cercare di limitare gli oggetti memorizzati per risparmiare memoria???
  • Re: Richiesta info prestazione

    Sono tutte domande giuste che però non possono avere una risposta corretta a prescindere.
    come disse un mio professore, nel 95% dei casi la risposta è dipende.

    Ovviamente se è un oggetto che ha tanti "dati" ma che accede ad un db potrebbe essere conveniente tenerlo in memoria anche se occupa molto, oppure potrebbe essere più efficente fare interrogazioni continue al db senza occupare spazio.

    dovresti fare una desamina ogni volta che ti trovi ad affrontare un problema del genere.

    ma la vera domanda è questa: serve l'ottimizzazione sfrenata?

    una frase fatta comune dice:
    Se siamo andati sulla luna con un commodore 64, perchè ora abbiamo problemi a far girare windows???

    La questione è questa, considerando che "mediamente" le macchine moderne hanno performanze più che accettabili e quantitativi di memoria più che sufficenti, conviene "perdere" tempo nell'ottimizzazione delle risorse? anche qui la domanda è dipende. in alcuni contesti lavorativi è NECESSARIO, ma nel 90% delle applicazioni comuni credo di no.
  • Re: Richiesta info prestazione

    zaknafein83 ha scritto:


    sono tutte domande giuste che però non possono avere una risposta corretta a prescindere.
    come disse un mio professore, nel 95% dei casi la risposta è dipende.

    Ovviamente se è un oggetto che ha tanti "dati" ma che accede ad un db potrebbe essere conveniente tenerlo in memoria anche se occupa molto, oppure potrebbe essere più efficente fare interrogazioni continue al db senza occupare spazio.

    dovresti fare una desamina ogni volta che ti trovi ad affrontare un problema del genere.

    ma la vera domanda è questa: serve l'ottimizzazione sfrenata?

    una frase fatta comune dice:
    Se siamo andati sulla luna con un commodore 64, perchè ora abbiamo problemi a far girare windows???

    La questione è questa, considerando che "mediamente" le macchine moderne hanno performanze più che accettabili e quantitativi di memoria più che sufficenti, conviene "perdere" tempo nell'ottimizzazione delle risorse? anche qui la domanda è dipende. in alcuni contesti lavorativi è NECESSARIO, ma nel 90% delle applicazioni comuni credo di no.
    Io ho iniziato a studiare programmazione un anno e mezzo fa, e per ora faccio il magaziniere e pizze in un self sevice, e come magazziniere ho un a regola ferrea per tener tutti i magazzine e celle organizzate, ed e' che ogni cosa deve stare al suo posto( sembra una cosa scontata ma non lo e' piu' quando si hanno centinaia di articoli ), nulla deve occupare quel posto se non in occasioni particolari dettati dalla neccessita', tutto questo perche' io non so' cosa e quanto mi arrivera' la prossima volta, e oltretutto anche chi viene a prendere la merce sa esattamente dove andare senza frugare in tutta la stanza, e lo stesso per me che vado a mettere via a colpo sicuro senza spostare qualcosa che non era al suo posto, cosa che succede quando vado in ferie( una settimana vuol dire che non mi hanno ancora stravolto il mio ordine basilare, 2 settimane o piu' vuol dire che il mio ordine basilare non esiste piu' e lo devo ricreare ). Quindi per me diventa naturale ottimizzare il piu' possibile rispettando i tempi di consegna che per me sono la scadenza delle consegne scolastiche.
    Riassumendo per me avere tanto spazio non e' un buon motivo per tralasciare l'ottimizzazione se il tempo e le risorse lo permettono.
    Per quanto riguarda il paragone Commodore e Windows, il problema secondo me e' dato dall'utente finale, Windows deve riempire le lacune dei loro utenti che non possiedono le capaci dei tecnici adetti al lancio del razzo verso la luna.
    In ogni caso ora ho dovuto rimensionare parecchio le mie consegne dopo che ho fatto un ritardo enorme, ritengo che sia piu' importante rispettare i tempi con il miglior risultato possibile.
    Lingyong sun
    ps Grazie per le risposte, e se avete consigli sono ben accette, e anche le critiche che per fastiose che siano, sono i colpi di scalpello che modellano una statua.
  • Re: Richiesta info prestazione

    Tu hai e rispetti un ordinamento perchè la tua capacità di ricerca non è quella di una macchina moderna. se pensi che con una ricerca logaritmica puoi trovare una persona sull'intera popolazione in soli 33 passaggi (all'incirca), capirai bene che è "ovvio" un minimo di conoscenza di ottimizzazione.

    quello che dico io è che nel caso dovessi avere una mole di dati TALE da impedire una esecuzione corretta del software (per corretta intendo anche temporalmente accettabile ) allora è imprescindibile l'ottimizzazione. tu non fai altro che applicare questo concetto per il tuo lavoro...avendo una mole di dati tale da impedirti una "memoria di ricordo al volo", preferisci sfruttare un tempo maggiore per la sua allocazione, semplificandoti la ricerca.
    ma se avessi solo 10 tipologie di prodotti, credi che sarebbe altrettanto necessario e "obbligatorio" rispettare questo ordine? Certo male non farebbe, ma non avresti quel guadagno che hai ora
  • Re: Richiesta info prestazione

    In realta' la mia memoria riesce perfettamente a gestire( in parte consciamente in parte inconscimante ) quasi tutti gli ingressi e le uscite del magazzino, quando ero l'unico a fare questo lavoro ed era la mia attivita' principale riuscivo anche a fare previsioni su quello che poteva essere rimasto e se il materiale era sufficiente fino al prossimo arrivo. Il problema e' dato dai limiti fisici di una persona. Personalmente separo una memoria celebrale( intelettuale ) e una memoria muscolare ( fisica ), quella fisica mi permette di compiere delle azioni che sono piu' veloci di tutto una sequenza controllata dalla parte cosciente del cervello, come nella pizzerie riesco a prevedere il movimento e lo spostamento delle persone al suo interno, infatti quando arriva una persona nuova devo rallentare tutto perche' non riesco a prevvedere i suoi spostamente quindi devo dove si sposta e in base al movimento comportarmi di conseguenza.
    Io pensavo( forse erroneamente ) a un parallelismo tra questi miei comportamenti e l'ottimizzazione. quando un programma non e' ottimizzato tutto e' piu' sprecato, quando e' ottimizzato risparmia molto di piu' e quel che e' risparmiato puo essere usato per altro.
    Un altro esempio e come controllo la merce, abino ogni prodotto alla sua scatola di cui devo ricordare meglio possibile forma, colore, dimensione. Tutto parte dal nome che mi evoca la scatola, infatti non riesco a riciamare la voce in bolla dalla scatola( molto difficile ), faccio un'ipotesi di dove si possa trovare cercando anche di intuire il metodo di lavoro del magazziniere pre-spedizione. ordino le scatole per tipologia( es le vedure-gelo sono prodotte tutte dalla stessa ditta, che sono contradistinde da un colore marrone che e' distinguibile dagli altri marroni peche leggermente piu chiara e liscia, e anche se hanno forma diversa riesco a ragrupparle come uno unico e in bolla metto degli asterischi, ora che e' stato cambiato fornitore e voci ordine-alfabetico devo anche usare un contatore promemoria esterno ), cercho di memorizzare il piu' possibile le scatole che nel frattempo passano sottochio in modo che in futuro riesco a sapere piu' o meno dove sono e alcune le ricordo e controllo solo per conferma( alle volte la memoria fa cilecca ), se trovo una nuova voce lo abino ad eventuali scatole nuove che non c'erano. Tutto questo fatto a bancale chiuso senza doverlo smontare, quindi non sempre sono visibili le etichette, il lato esposto della scatola cambia molto spesso. e dopo questo lavoro mi rimane int esta tutta la bolla per un paio di giorni( in genere ), il motivo per cui ho scelto di controllare da bolla e poi in bancale e' un vantaggio personale, se c'e' una scatola in piu' posso non accorgermene( raramente succede, di solito riesco a ricordarmi se la scatola e' stata gia controllata e abinata ), se invece c'e una voce in piu' in bolla posso accorgermene perche non esiste la scatola in bancale( purtroppo per stanchezza e distrazione ho commesso errori e sono mancate scatole ma mai piu' di una per volta ). Questo per me e' un'ottimizzazione del mio lavoro in cui ho utilizzato al meglio possibile le mie qualita' fisiche( nel controlloprincipalmente la vista ), e qualita' intelettuali( la capacita' di ricordare un oggetto attraverso il nome, richiamando piu' caratteristiche possibili ), poi attraverso la costanza nel lavoro e l'organizzazione riesco a fare meglio di una persona che fisicamente e' piu' forte, ma che non sa organizzare delle volte solo svogliatezza ), al cambio dal precedente a me si sono ribaltate alcune situazioni, io aiutavo alcuni camionisti a scaricare( mentre scaricavo memorizzavo gli articoli e poi sapevo anche dove si trovavano esattamente ), e consegnavo anche alcune cose direttamente al settore di uso, prima di me era lui a farsi aiutare dalgi altri avendo a disposizione lo stesso tempo.
    Questo io intendo per ottimizzare, perche poi alla fine io e l'altro prendevamo lo stesso stipendio, ma io preferisco a fare una cosa sempre meglio possibile, quindi quando si puo si deve migliorare.
    Mi sono perso un po' per rispondere sull'ultima dei 10 tipi di prodotti, sono piu o meno quelli usati quando ero alla farcitura dei panini al mac Donalds( organizzazione del lavoro eccellente ), dopo un anno potevo condire un vasoio intero di panini a occhi chiusi, come anche ora con le pizze organizzo gli incredienti secondo un preciso ordine logico studiato per rispettare fifo dei prodotti al meglio e che durante il servizio il corpo si muove a prescindere dalla testa che da solo il comando funghi, e il corpo sa gia dove deve andare, carciofi, la mano e' gia partita quasi contemporanea al pensiero, tutti questi attimi risparmiati e sommati mi permetto di andare ad aiutare i colleghi, naturalmente tutto con la stessa paga, non mi pagano di piu' se lavoro di piu' dal punto di vista prestazionale. e se si trattase di un articolo solo( impasto pizza divisa in cassette ) guardando la pila ( senza contare ne fissarlo a lungo ) e facendo una stami riesco a capire quante sono approssimativamente.
    Penso che siano queste le cose che mi hanno portato a cercare di migliorare e ottimizzare sempre i programmi che faccio. Mi piace anche osservare lgi altri per cercare nuove idee.
    ciao
    Lingyong Sun
Devi accedere o registrarti per scrivere nel forum
6 risposte