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

    Calcolare il peso di una chiamata

    Dunque, cerco di spiegarmi al meglio:

    ho una select sql che mi tira su dei dati:3 Integer, 2 Short, una stringa da 250 caratteri e una stringa da 100 caratteri

    il Front End esige 50kb di dati per chiamata, quindi ho bisogno di sapere quante righe posso estrarre in una volta sola, in altre parole ho bisogno di calcolare il peso il byte della somma degli oggetti sopra-elencati, eppoi facendo 50kb / pesoTotale, scoprire quante righe posso passare al Front End.

    Premetto che ho già googlato un pò al riguardo, e ho trovato qualche soluzione per calcolare il peso approssimativo di alcuni tipi di oggetti in java, ma preferisco comunque aprire questo topic per discuterne con voi (non mi sento sicuro della soluzione che ho trovato)

    Fatemi sapere se devo spiegarmi meglio! Grazie

  2. #2
    Ci sarebbero tante cosiderazioni da fare, ma cmq approssimativamente potresti tirare i risultati fuori dal result set buttarli in un vector e poi serializzare quest'ultimo (modo più sbrigativo). Per essere più accurato (serializzando il vector avresti incluso il peso anche di quest'ultimo), potresti serializzare direttamente i risultati.
    codice:
    Vector<Object> vector = new Vector<Object>();
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    						ObjectOutputStream outputStream = new ObjectOutputStream(byteArrayOutputStream);
    						outputStream.writeObject(vector);
    						outputStream.close();
    System.out.println(byteArrayOutputStream.toByteArray().length);

  3. #3
    Il tuo esempio pare funzionarmi, anche se dovrò studiarmi le api degli oggetti che mi hai proposto (è da parecchio che non tocco codice java, al momento faccio analisi...), ma l'output finale sarebbe espresso in byte quindi?

  4. #4
    Si, l'output è espresso in byte.
    E per quanto riguarda le api se fuori da un bel po, perchè gli oggetti usati sono le normali api IO di java che esistono dal sdk 1.2.

  5. #5
    a dire la verità non ho ancora mai lavorato seriamente in java, ho cominciato come analista direttamente, ho solo il mio bel 30 a programmazione II

    comunque grazie ancora!

  6. #6
    Sto creando una piccola applicazione dedicata al calcolo del peso degli oggetti che dobbiamo misurare, basandomi su quanto mi ha consigliato "francesco.muia", il fatto è che a seconda di come è fatto l'oggetto che gli do in pasto, mi da risultati non molto convincenti.

    Gli oggetti che devo misurare sono dei "Data Object" composti che contengono a loro interno altri oggetti come attributi...

    Ecco il metodo dedicato al calcolo del peso:
    codice:
    public static Integer getPesoOggetto(Object dto) {
      
      ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
      try {
        ObjectOutputStream outputStream = new ObjectOutputStream(byteArrayOutputStream);
        outputStream.writeObject(dto);
        outputStream.close();
      } 		
      catch(IOException ioe) {
        ioe.printStackTrace();
      }
    
      return byteArrayOutputStream.toByteArray().length;
    }
    Come potete vedere prende in input l'oggetto (serializzabile) e teoricamente dovrebbe restituirne il suo peso espresso in byte...

    il problema è che a volte mi da dei risultati un pò strani... è possibile che java applichi una specie di ottimizzazione delle memoria, tale che se l'oggetto composto è molto grande risulti che pesi meno del previsto?

    Il mio codice fa quello che credo faccia?

    Grazie anticipatamente!

  7. #7
    Il codice da te inserito è corretto.
    Che io sappia java in fase di serializzazione degli oggetti non applica nessuna compressione "randomica" per la quale si possa spiegare la cosa.
    Per quanto riguarda "i risultati strani" non riesco a capire cosa intendi:
    [list=1][*]Serializzi lo stesso oggetto più volte è il risultato è differente ?[*]Un oggetto "piccolo" pesa più di un oggetto "grosso" ?[/list=1]

  8. #8
    Esatto, un oggetto "piccolo" in proporzione pesa di + di uno molto + grande...

    Ma apparte questo, se il mio oggettone è composto da quattro stringhe da 100 caratteri l'una, teoricamente dovrebbe pesare almeno 800byte (4 array di char che utilizzano l'utf-8 come codifica di caratteri, quindi 2byte a carattere -> 2byte * 400 caratteri = 800byte) e invece mi pesa di meno...

    mi è venuta in mente l'idea che java ottimizzasse in qualche modo la memoria visto che gli oggetti che presentano attributi misti (Integer, String, BigDecimal, Calendar, ecc) rispettano + fedelmente i miei calcoli fatti a mano, mentre se presentano più attributi dello stesso tipo, tendono a pesare un pò meno del previsto... bhoooo!

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.