Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete implementa due bracci estensibili, per spazzola e moccio, che si spingono ben oltre quanto visto sino ad oggi permettendo una pulizia di casa ancor più capillare e precisa
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
La tecnologia SQD-Mini LED di TCL arriva sul taglio da 65 pollici con la serie C8L: 2040 zone, pannello WHVA 2.0 e un picco che alle rilevazioni delle sonde tocca i 4400 nit nel profilo Filmmaker e un HDR quasi perfetto
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro
Wireless 2.4 GHz, Bluetooth 5.4, cancellazione attiva del rumore, design pieghevole e un'autonomia che mette in imbarazzo prodotti che costano il doppio. Le Maestro 500 non eccellono in nulla, ma offrono tutto. E a questo prezzo è difficile chiedere di più
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-05-2007, 11:29   #1
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
[JAVA6]oggetto di "dimensione fissa"

Nel java6, che voi sappiate, hanno introdotto "built-in" la possibilità di sapere quanta memoria centrale un oggetto occupa?
Con la java5 utilizzo il metodo descritto in questo articolo ma mi domando, essendo che nella nuova six version ci hanno messo pure un database intero, se si sono ricordati di inserire nelle librerie ufficiali questa funzionalità moolto utile per parecchi programmatori!
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2007, 11:58   #2
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
ops ....ho notato che il titolo della discussione è un pò ambigua rispetto al corpo del messaggio: per "dimensione fissa" intendo la possibilità che ci sia una qualche collezione (tipo hashmap) che, nella fase di istanziazione, permetta di definire la quantità massima di memoria centrale che la collezione di oggetti occuperà e, nel quel caso si tenti di superare la soglia inserendo un nesimo oggetto, la chiamata del metodo .put generi errore o qualche altro tipo di "paradigma" per notificare l'avvenuto superamento della quantità massima di memoria disponibile.
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2007, 12:33   #3
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Puoi usare un agente strumentale (java.lang.instrument). Cosa che avrebbe dovuto fare anche chi ha scritto l'articolo che citi.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2007, 12:58   #4
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Puoi usare un agente strumentale (java.lang.instrument). Cosa che avrebbe dovuto fare anche chi ha scritto l'articolo che citi.
Questa mi è nuova... che so sti agenti "strumentali"? ...ne ho sentito parlare ma per lo più mi sembra che vengano utilizzati per il profiling delle applicazioni.....
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2007, 13:02   #5
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Puoi usare un agente strumentale (java.lang.instrument). Cosa che avrebbe dovuto fare anche chi ha scritto l'articolo che citi.
l'articolo è del 2003(e mi sembra che instrument, che fra l'altro nn conoscevo, c'è da java 5
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2007, 13:29   #6
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
whops. Non so perchè ho pensato subito "guarda questo che non usa gli agenti" senza neanche guardare la data . Mea grandissima culpa. Domani leggendo un articolo del '98 e penserò "ma guarda questo che non usa Swing!".

Esempio e ci leviamo il pensiero.

Io parto sempre dall'idea "questo è lo strumento che voglio". In questo caso io voglio poter dire:

long dimensioneInByte = SizeAgent.getSizeOf(reference);

La cosa si rivela alquanto semplice. Questo è l'agente strumentale. Una nota: lo chiamo "strumentale" per non usare "di strumentalizzazione" perchè francamente mi fa schifo . Ma il termine corretto dovrebbe essere il secondo.

Codice:
package it.tukano.sizeagent;

import java.lang.instrument.*;

public class SizeAgent {
	private static volatile Instrumentation instrumentationInstance;

	public static void premain(String args, Instrumentation inst) {
		instrumentationInstance = inst;
	}
	public static long getSizeOf(Object reference) {
		return
			instrumentationInstance == null || instrumentationInstance == null ?
			-1 :
			instrumentationInstance.getObjectSize(reference);
	}
}
Fine. Per rendere disponibile l'agente si importa il package. Per renderlo "vivo" occorre impacchettarlo in un jar il cui file manifesto avrà la forma:

Codice:
Manifest-Version: 1.0
Premain-Class: it.tukano.sizeagent.SizeAgent
Con il jar per le mani, si lancia poi il programma che lo usa indicando alla jvm il jar dell'agente:

java -cp .;SizeAgent.jar -javaagent:SizeAgent.jar Main

Occhio però che il "sizeOf" di una mappa è la dimensione dell'oggetto HashMap, non di ciò che contiene. Per fare quello che ti serve dovrai probabilmente creare una mappa i cui metodi aggiungi e rimuovi registrino la dimensione dei nuovi arrivati e dei vecchi in partenza.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2007, 14:35   #7
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
whops. Non so perchè ho pensato subito "guarda questo che non usa gli agenti" senza neanche guardare la data . Mea grandissima culpa. Domani leggendo un articolo del '98 e penserò "ma guarda questo che non usa Swing!".
a maggior sfregio

http://www.javaworld.com/javaforums/...age=0#Post7552
(come poi dici tu...conta solo le references)
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2007, 14:46   #8
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Conta la dimensione dell'oggetto che è poi la dimensione dei suoi campi. Siccome i campi sono puntatori ogni oggetto è relativamente leggero. Penso valga la pena di precisare che il getSizeOf di Instrumentation è il sizeof di C: è fatto con il sizeof di C.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2007, 15:52   #9
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
Codice:
E:\>javac SizeAgent.java
SizeAgent.java:1: package java.lang.instrument does not exist
import java.lang.instrument.*;
^
SizeAgent.java:4: cannot resolve symbol
symbol  : class Instrumentation
location: class SizeAgent
        private static volatile Instrumentation instrumentationInstance;
                                ^
SizeAgent.java:6: cannot resolve symbol
symbol  : class Instrumentation
location: class SizeAgent
        public static void premain(String args, Instrumentation inst) {
                                                ^
3 errors

E:\>java -version
java version "1.6.0"
Java(TM) SE Runtime Environment (build 1.6.0-b105)
Java HotSpot(TM) Client VM (build 1.6.0-b105, mixed mode)
...ma siamo nella fantascienza!!?
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2007, 15:57   #10
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Conta la dimensione dell'oggetto che è poi la dimensione dei suoi campi. Siccome i campi sono puntatori ogni oggetto è relativamente leggero. Penso valga la pena di precisare che il getSizeOf di Instrumentation è il sizeof di C: è fatto con il sizeof di C.
per cui in teoria si potrebbe usare lo stesso metodo usato nel link(usare la reflection per procurarsi tutti i riferimenti dell'oggetto ricorsivamente), ma fatto con l'instrument
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2007, 18:06   #11
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Quote:
Originariamente inviato da Frank1962 Guarda i messaggi
...ma siamo nella fantascienza!!?
Mmmmhhhhh... prova a fare un:

javac -version

xthebol

Probabilmente nel caso di frank creerei un programma a parte che gestisca la struttura dati oppure ripiegherei sulla trasformazione dei dati in forma "binaria", usando quindi un ByteBuffer per contenerli. Nel primo caso somiglierebbe tanto ad un database in memoria, Nel secondo alloco un ByteBuffer di 32 megabyte e quella diventa la mia struttura dati.

Il primo salva la capra, il secondo i cavoli.

La capra è la possibilità di lavorare con degli oggetti. Connetto le due jvm tramite JNI, monitoro la seconda con JMX e sono a posto. Butto un po' di ram per il processo della seconda JVM.

I cavoli sono l'esatto controllo sulla quantità di memoria occupata.

Non so ma penso che tenterei col buffer. Ma dipende anche dai dati.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2007, 21:16   #12
JavHack
Junior Member
 
Iscritto dal: Oct 2005
Messaggi: 17
Leggeti la doc della classe File in java 6, trovi sicuramente novità che ti interesseranno
JavHack è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2007, 21:52   #13
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
mhhh... devo essermi perso qualcosa. Che c'è in java.io.File che può esserci utile?
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2007, 23:12   #14
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
ho creato il file jar e ho inserito il class con il codice compilato postato da pgi, però non riesco a capire come istanziare la classe SizeAgent nel mio progetto, o meglio, non ho capito se questa classe la devo anche inserire insieme alle classi del mio progetto oltre che passarla come file jar al main.....

ps: cmq il problema di compilazione era dovuto, come diceva giustamente pgi, alla versione del javac che era ferma alla 1.4
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------

Ultima modifica di Frank1962 : 10-05-2007 alle 23:20.
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 11-05-2007, 15:37   #15
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Includi il jar nel classpath (con -cp in esecuzione e compilazione) e quando vuoi la dimensione di un oggetto blublu semplicemente scrivi:

long size = SizeAgent.getSizeOf(blublu);

Ricordati anche di passare alla JVM l'agente con -javaagent:SizeAgent.jar
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 11-05-2007, 18:10   #16
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
Codice:
String aux = new String("hellooooooooooooooooooo world!!!!");
long dimensioneInByte = SizeAgent.getSizeOf(aux);
sono risucito a farlo funzionare ma a quanto pare il funzionamento risulta non essere dei più intuitivi ....prendendo a esempio una String, come mai se cambio la lunghezza della stringa il output mi viene data sempre dimensione di 24byte (almeno nel mio caso) ?

ps: ho il sospetto che sto getSizeOf non fa quello che mi aspettavo....
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------

Ultima modifica di Frank1962 : 11-05-2007 alle 18:24.
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 11-05-2007, 18:33   #17
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Tutti i campi di un'istanza di una classe Java sono puntatori.

Se quel puntatore punta ad un array di 40 petabyte comunque conta per 1 puntatore. Perchè "nell'istanza" c'è il puntatore, non c'è l'array.

E' la stessa differenza che c'è tra il sizeof di una struttura c che contiene un array di 100 int ed il sizeof di una struttura c che contiene un puntatore ad int.

Nel primo caso conta il "peso" dei 100 interi, nel secondo il "peso" del puntatore.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 11-05-2007, 19:10   #18
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Tutti i campi di un'istanza di una classe Java sono puntatori.

Se quel puntatore punta ad un array di 40 petabyte comunque conta per 1 puntatore. Perchè "nell'istanza" c'è il puntatore, non c'è l'array.

E' la stessa differenza che c'è tra il sizeof di una struttura c che contiene un array di 100 int ed il sizeof di una struttura c che contiene un puntatore ad int.

Nel primo caso conta il "peso" dei 100 interi, nel secondo il "peso" del puntatore.
si ma allora che utilità ha un simile metodo? ....cioè alla fine mi ritorna sempre quanto occupa il puntatore; secondo me è poco intuitivo e ambiguo nel nome ....di un metodo SizeObject mi aspetto che venga ritornata la dimensione dell'oggetto che gli passo come argomento, ed è ovvio che un oggetto al suo interno sia composto da altri oggetti (ergo, puntatori a oggetti)
Nel caso della String non è possibile calcolare la dimensione del campo che compone l'oggetto stringa istanziato?
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 11-05-2007, 19:27   #19
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
E che te la prendi con me? Mica l'ho scritto io il linguaggio di programmazione Java

Ma tu, di preciso, che ci devi fare con 'sta cosa?
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 11-05-2007, 19:39   #20
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
il problema più o meno è questo ......ho un webserver che registra tutte le richieste GET,POST,ecc e le inserisce in un "buffer" in attesa che vengano salvate su database..... questo buffer però dev'essere ovviamente limitato nella dimensione e non superare una certa soglia preimpostata in modo tale che nell'eventualità che ci siano troppe richieste queste non vadino ad occupare tutta la memoria centrale e vengano, anche se non salvate su db, cancellate dal buffer per far posto alle nuove richieste...... spero di essermi spiegato bene (ma temo di no)
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine NL-LC1 è il primo dissipatore a liquido A...
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con ...
NVIDIA mostra una comunità di rob...
Sony annuncia LYTIA L910, arriva il sens...
Ericsson, il 5G è l’infrastruttur...
Marvell punta tutto su TSMC A14: sar&agr...
Hyundai a un passo dal controllo totale ...
Questo SSD vecchio 16 anni ha resistito ...
Monopattino elettrico Xiaomi in offerta:...
Microsoft usa le capre di Age of Empires...
Microsoft conferma bug nel Cestino in tu...
Accenture crolla del 20% in borsa, il pe...
ASUS Pro WS W890E-SAGE SE: sette PCIe 5....
Attenzione al prezzo di questa TV Hisens...
Chrome sbeffeggiato da Ballmer nel 2009:...
Un gioco Mac compatibile con Apple Silic...
La batteria allo stato solido di Honda s...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:51.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v