Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Dopo oltre 4 anni si rinnova la serie Sony Alpha 7 con la quinta generazione, che porta in dote veramente tante novità a partire dai 30fps e dal nuovo sensore partially stacked da 33Mpixel. L'abbiamo provata per un breve periodo, ecco come è andata dopo averla messa alle strette.
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme e Aston Martin Aramco F1 Team si sono (ri)unite dando alla vita un flagship con chip Snapdragon 8 Elite Gen 5 e design esclusivo ispirato alle monoposto di Formula 1. La Dream Edition introduce la nuova colorazione Lime Essence abbinata al tradizionale Aston Martin Racing Green, decorazioni intercambiabili personalizzate e una confezione a tema F1, intorno a uno smartphone dall'ottima dotazione tecnica con batteria da 7000mAh ricaricabile a 120W e isola fotografica intercambiabile
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
Abbiamo partecipato all'OVHcloud Summit 2025, conferenza annuale in cui l'azienda francese presenta le sue ultime novità. Abbiamo parlato di cloud pubblico e privato, d'intelligenza artificiale, di computer quantistici e di sovranità. Che forse, però, dovremmo chiamare solo "sicurezza"
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-05-2012, 17:21   #1
Mettiu_
Member
 
L'Avatar di Mettiu_
 
Iscritto dal: Jul 2011
Messaggi: 246
[JAVA] Quando le prestazioni contano

Salve a tutti, ho una questione da risolvere.
Sto partendo con un progetto piuttosto serio in cui si necessita di ALTE PRESTAZIONI e mi è stato detto che esiste la possibilità di compilare Java in modo che non generi bytecode ma codice nativo che viene eseguito senza interpreti intermedi. Volevo sapere innanzitutto se questa cosa è possibile (guardando in giro pare di si) e soprattutto se produce vantaggi PRATICI? Considerate che l'applicativo in questione potrebbe dover girare anche svariate ore (è un simulatore) quindi le prestazioni non servono al boot ma nell'esecuzione a regime. Lo scrivo chiaramente in modo che non nascano eventuali flame: IO VORREI USARE JAVA perchè lo conosco abbastanza bene e so che sarei più produttivo. Detto ciò, se la situazione dovesse essere inaccettabile dal punto di vista delle performances, dovrò desistere e andare all'alternativa (che può essere _esclusivamente_ C++ quindi non ci sono altre strade). Mi farebbe piacere sentire i pareri di gente che ha più esperienza di me perchè chiaramente se si parla di ordini di grandezza di differenza la scelta è obbligata ma se Java si può spingere a livelli comparabili, si potrebbe accettare un tradeoff...
Grazie in anticipo
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto.

CONCLUSO POSITIVAMENTE CON: oldfield
Mettiu_ è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2012, 19:12   #2
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Beh, java non usa più interpreti da secoli... e puoi compilare il tuo codice, ma non puoi compilare tutta la libreria e il runtime
Senza contare che la "lentezza" di Java risiede in altro, tipo nel garbage collector, nel thrashing allegro dell'heap che fa la libreria standard, nell'allocazione ancora più allegra di nuovi oggetti, nella mancanza di overloaded operators ed inline, etc.

Per cui, credo che compilare il codice non sia un grande aiuto alle prestazioni.

Ma comunque queste sono speculazioni, l'unico modo per essere sicuri è TESTARE
Scrivi qualcosa di rappresentativo del tuo carico di lavoro in C++, Java e Java compilato, e vedi come va!
__________________
*ToMmO*

devlog | twitter
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2012, 19:21   #3
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Concordo. Esiste gcj per compilare java in codice nativo, ma dubito che possa fare meglio della VM 7 e annesso HotSpot.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2012, 19:37   #4
Mettiu_
Member
 
L'Avatar di Mettiu_
 
Iscritto dal: Jul 2011
Messaggi: 246
Grazie per le risposte. Alla fine dei conti immaginavo che non poteva essere un compilatore a risolvermi i problemi..

Quote:
Originariamente inviato da Tommo Guarda i messaggi
Ma comunque queste sono speculazioni, l'unico modo per essere sicuri è TESTARE
Scrivi qualcosa di rappresentativo del tuo carico di lavoro in C++, Java e Java compilato, e vedi come va!
Questa potrebbe essere una buona idea, a patto che riesca a fare un prototipo molto semplificato in poco tempo... Il core di tutto il sw è un simulatore a eventi discreti. Fare delle prove anche solo per capire quali sono le differenze potrebbe portare via parecchio tempo (purtroppo sono poco familiare con C++).
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto.

CONCLUSO POSITIVAMENTE CON: oldfield
Mettiu_ è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2012, 21:13   #5
U-Boat
Member
 
Iscritto dal: Dec 2001
Città: Cernobbio -Co-
Messaggi: 47
Ti è possibile pensare di rendere il simulatore multithread per sfruttare davvero al 100% la cpu?
__________________
micheledellatorre.net
U-Boat è offline   Rispondi citando il messaggio o parte di esso
Old 07-05-2012, 00:18   #6
nico159
Senior Member
 
Iscritto dal: Aug 2003
Città: Barletta (BA)
Messaggi: 939
Profiling, profiling, profiling

Dopo che avrai capito dov'è realmente il collo di bottiglia nel tuo codice, si potrà pensare a come sistemarlo
__________________
In a world without fences, who needs Gates?
Power by: Fedora 8 - Mac OS X 10.4.11
nico159 è offline   Rispondi citando il messaggio o parte di esso
Old 07-05-2012, 01:14   #7
Mettiu_
Member
 
L'Avatar di Mettiu_
 
Iscritto dal: Jul 2011
Messaggi: 246
La natura del mio problema si presta in modo naturale ad un approccio ad oggetti oltrechè alla parallelizzazione visto che ci sono N dispositivi da simulare simultaneamente (sono dei router ma non basati su IP). Il multithreading sarà d'obbligo. Mi sa che si potrebbero fare dei test incrociati come consigliato da alcuni di voi, poi dall'alto sceglieranno cosa è meglio!
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto.

CONCLUSO POSITIVAMENTE CON: oldfield
Mettiu_ è offline   Rispondi citando il messaggio o parte di esso
Old 07-05-2012, 11:27   #8
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Gcj è un binario morto. Lo sviluppo è fermo da anni a java 1.4 con ancora parti della libraria da implementare e quello che c'è è bugnato. Lascia perdere questi aggeggi se hai intenzione di usare java. La jvm è più che sufficiente per arrivare a sfiorare le prestazioni di un programma scritto in C.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 07-05-2012, 11:42   #9
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
Gcj è un binario morto. Lo sviluppo è fermo da anni a java 1.4 con ancora parti della libraria da implementare e quello che c'è è bugnato. Lascia perdere questi aggeggi se hai intenzione di usare java. La jvm è più che sufficiente per arrivare a sfiorare le prestazioni di un programma scritto in C.
Quoto, considerato quanto detto dall'autore del thread:
Quote:
...Considerate che l'applicativo in questione potrebbe dover girare anche svariate ore (è un simulatore) quindi le prestazioni non servono al boot ma nell'esecuzione a regime...
L'implementazione della JVM distribuita con il JDK Oracle di default, compila in codice nativo quei metodi che superano una certa soglia di chiamate a runtime, 1000 se non ricordo male (comunque è un parametro settabile).
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 07-05-2012 alle 11:46.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 07-05-2012, 13:17   #10
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Vero, mi pare anche che c'era un modo per "convincere" la JVM a compilare tutti i metodi al primo utilizzo... però non so qual'è. Magari non esiste

EDIT: un articolo molto interessante con dei veri tests: http://caprazzi.net/posts/jit-compiler-part-1/
__________________
*ToMmO*

devlog | twitter

Ultima modifica di Tommo : 07-05-2012 alle 13:23.
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 07-05-2012, 13:23   #11
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Quote:
Originariamente inviato da Tommo Guarda i messaggi
Vero, mi pare anche che c'era un modo per "convincere" la JVM a compilare tutti i metodi al primo utilizzo... però non so qual'è. Magari non esiste
http://www.oracle.com/technetwork/ja...formanceTuning

Direi che con -XX:CompileThreshold=1 dovrebbe andare... mai fatto dei test in questo senso però.
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2012, 18:49   #12
Mettiu_
Member
 
L'Avatar di Mettiu_
 
Iscritto dal: Jul 2011
Messaggi: 246
Riuppo questo thread di qualche mese fa per chiedervi nuovi consigli...
Il mio software è praticamente finito, gira su Win7 64 bit + Java 7 (per sviluppare utilizzo Eclipse). Volevo chiedervi qualche tool per fare un pò di profiling in maniera semplice e veloce. Mi interessa sia analizzare le performances in termini di CPU che in termini di memoria e dovrei farlo in _poco_ tempo...
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto.

CONCLUSO POSITIVAMENTE CON: oldfield
Mettiu_ è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2012, 18:57   #13
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Parti con visualvm. Se hai installato il jdk lo hai già bello e pronto sul disco.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2012, 21:37   #14
Mettiu_
Member
 
L'Avatar di Mettiu_
 
Iscritto dal: Jul 2011
Messaggi: 246
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
Parti con visualvm. Se hai installato il jdk lo hai già bello e pronto sul disco.
Grazie del consiglio, c'è voluto poco per essere operativo.
Dai report prodotti da visualvm emerge che c'è un'allocazione massiccia di byte[] (svariate centinaia di MB), cosa che io non faccio mai esplicitamente nel mio codice, non ho alcun array di byte. Immagino che sia memoria allocata internamente da Java: è possibile risalire fino a CHI causa questa allocazione?
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto.

CONCLUSO POSITIVAMENTE CON: oldfield
Mettiu_ è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2012, 22:18   #15
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da Mettiu_ Guarda i messaggi
Grazie del consiglio, c'è voluto poco per essere operativo.
Dai report prodotti da visualvm emerge che c'è un'allocazione massiccia di byte[] (svariate centinaia di MB), cosa che io non faccio mai esplicitamente nel mio codice, non ho alcun array di byte. Immagino che sia memoria allocata internamente da Java: è possibile risalire fino a CHI causa questa allocazione?
byte[] e char[] sono in genere allocati da stringhe e stream in input/output internamente da java.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 17-09-2012, 11:23   #16
Mettiu_
Member
 
L'Avatar di Mettiu_
 
Iscritto dal: Jul 2011
Messaggi: 246
Rieccomi qui.
Diciamo che da un punto di vista dei tempi di esecuzione ho ottimizzato quel che c'era da ottimizzare... Il problema adesso è l'occupazione di memoria! Il mio programma parte con un buon ritmo, ad un certo punto raggiunge quota 2GB (visibile anche dal Task Manager) e lì comincia a rallentare vistosamente. Tra l'altro non capisco se rallenta perchè arriva ad un punto della simulazione molto oneroso oppure perchè il GC è troppo indaffarato a liberare memoria. Comunque sia, tramite il profiler scopro che buona parte della memoria è occupata da oggetti di tipo 'Event' (classe mia) e la cosa è anche normale visto che è un simulatore a eventi discreti ne vengono allocati molti. Viste queste grosse esigenze di allocazione potete consigliarmi qualche tecnica per risparmiare memoria e/o gestirla in maniera più efficente? Ho già minimizzato il numero di new cercando di riusare gli oggetti. Adesso mi balenava l'idea di fare uno store di oggetti di questo tipo così quando ne ho bisogno li chiedo sempre allo store che li allocherà fisicamente solo quando c'è realmente bisogno. Ovviamente si complica un pò tutto perchè quando sti oggetti non servono più devo tenerne traccia e rilasciarli nello store per renderli disponibili al successivo bisogno...
Avete idee??
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto.

CONCLUSO POSITIVAMENTE CON: oldfield
Mettiu_ è offline   Rispondi citando il messaggio o parte di esso
Old 17-09-2012, 11:56   #17
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Mettiu_ Guarda i messaggi
Rieccomi qui.
Diciamo che da un punto di vista dei tempi di esecuzione ho ottimizzato quel che c'era da ottimizzare... Il problema adesso è l'occupazione di memoria! Il mio programma parte con un buon ritmo, ad un certo punto raggiunge quota 2GB (visibile anche dal Task Manager) e lì comincia a rallentare vistosamente. Tra l'altro non capisco se rallenta perchè arriva ad un punto della simulazione molto oneroso oppure perchè il GC è troppo indaffarato a liberare memoria. Comunque sia, tramite il profiler scopro che buona parte della memoria è occupata da oggetti di tipo 'Event' (classe mia) e la cosa è anche normale visto che è un simulatore a eventi discreti ne vengono allocati molti. Viste queste grosse esigenze di allocazione potete consigliarmi qualche tecnica per risparmiare memoria e/o gestirla in maniera più efficente? Ho già minimizzato il numero di new cercando di riusare gli oggetti. Adesso mi balenava l'idea di fare uno store di oggetti di questo tipo così quando ne ho bisogno li chiedo sempre allo store che li allocherà fisicamente solo quando c'è realmente bisogno. Ovviamente si complica un pò tutto perchè quando sti oggetti non servono più devo tenerne traccia e rilasciarli nello store per renderli disponibili al successivo bisogno...
Avete idee??
E' difficile (per me) rispondere a questa domanda così, sui due piedi. Sarebbe neccessario conoscere l'applicazione e studiarne bene il comportamento a runtime con il profiler, specie analizzare le varie generazioni della memoria gestita dal GC.

Comunque, circa l'object pool, potresti leggere qualcosa in merito: in linea di massima in Java non è una buona stategia.
- http://stackoverflow.com/questions/3...n-java#3657724
- http://stackoverflow.com/questions/6...object-pooling

Prova a spulciare tra questi topic, potresti trovare validi suggerimenti per il tuo caso; male che vada potrai schiarirti un po' le idee:
+ http://stackoverflow.com/questions/t...es&pagesize=15
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 17-09-2012, 12:19   #18
Mettiu_
Member
 
L'Avatar di Mettiu_
 
Iscritto dal: Jul 2011
Messaggi: 246
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
E' difficile (per me) rispondere a questa domanda così, sui due piedi. Sarebbe neccessario conoscere l'applicazione e studiarne bene il comportamento a runtime con il profiler, specie analizzare le varie generazioni della memoria gestita dal GC.

Comunque, circa l'object pool, potresti leggere qualcosa in merito: in linea di massima in Java non è una buona stategia.
- http://stackoverflow.com/questions/3...n-java#3657724
- http://stackoverflow.com/questions/6...object-pooling

Prova a spulciare tra questi topic, potresti trovare validi suggerimenti per il tuo caso; male che vada potrai schiarirti un po' le idee:
+ http://stackoverflow.com/questions/t...es&pagesize=15
Intanto grazie, sto facendo un giro fra i vari topic...
La maggior parte sembrano sconsigliare il pooling tanto dicono che gli oggetti, Java li crea a "basso costo"... Sarà ma se di oggetti ne servono migliaia e migliaia al secondo non mi pare trascurabile la questione della creazione/deallocazione (soprattutto deallocazione)...
Aggiungo che ulteriori analisi col profiler dimostrano che ad un certo punto tutto rallenta perchè la CPU è quasi totalmente utilizzata dal GC (ho utilizzato il tracer di visualvm), come immaginavo...
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto.

CONCLUSO POSITIVAMENTE CON: oldfield
Mettiu_ è offline   Rispondi citando il messaggio o parte di esso
Old 17-09-2012, 13:22   #19
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Ah, un'altra cosa: probabilmente non è il tuo caso ma occhio ai memory leak fantasma causati dai profiler birboni; se puoi è meglio "profilare" l'applicazione da remoto.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro DJI Neo 2 in prova: il drone da 160 grammi guada...
L'ESA sta cercando alternative all'utili...
iliad TOP 250 PLUS e TOP 300 PLUS: valan...
FRITZ! a Sicurezza 2025: connessioni WiF...
I 18enni di oggi non fanno più la...
Super offerte Apple: iPhone 16e a 529€ e...
Torres EVT arriva in Italia con listino ...
Microsoft Flight Simulator 2024 provato ...
Offerte Amazon ancora attive: Kindle, Fi...
Caldaie a gas, colpo di scena: l'UE valu...
Altro che 'scandalo De Martino', in Core...
Meta leggerà i tuoi messaggi dal ...
OpenAI entra in Thrive Holdings: nasce u...
Paramount: nuovi film di Sonic e Tartaru...
EU AI Cloud, il cloud sovrano di SAP per...
God of War: la serie TV entra in pre-pro...
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: 17:04.


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