Vivere nell’era digitale è tanto una benedizione quanto una frustrazione. Quando i computer e le applicazioni funzionano senza problemi, tendiamo a darli per scontati. Ma quando un computer si blocca o un’applicazione blocca un laptop o un dispositivo mobile, le scarse prestazioni aumentano lo stress.
Che tu sia uno sviluppatore che ha accesso al codice sorgente o semplicemente un utente finale che cerca di accelerare un’applicazione Java fastidiosamente lenta, abbiamo buone notizie: ci sono passi che puoi prendere per migliorare le prestazioni.
Java è uguale a JavaScript?
In breve, no; Java e JavaScript sono due tecnologie completamente diverse. Sebbene siano entrambe tecnologie orientate agli oggetti, Java è un ambiente di sviluppo in cui i programmatori possono codificare le applicazioni progettate per essere eseguite localmente nella memoria di un sistema.
JavaScript, d’altra parte, è stato progettato per creare applicazioni Web e spesso coincide con altre tecnologie Web come HTML e CSS. Oggi esamineremo i modi migliori per migliorare le prestazioni delle applicazioni scritte in Java, ma non JavaScript.
Cause di scarse prestazioni dell’applicazione
Le cause di un’applicazione con prestazioni inferiori sono enormi, sebbene le cause principali siano una manciata di problemi. Naturalmente, le prime due cause sono la cattiva progettazione e la codifica secondaria.
Sebbene gli IDE e gli editor di codice evidenzino test e oggetti per renderli più leggibili dall’uomo, esiste un divario nella comunicazione tra computer e umani. Farai errori mentre costruisci un’applicazione, non c’è modo di aggirarla.
Il computer a volte non capisce la tua intenzione. Piuttosto, esegue solo le istruzioni che gli vengono fornite. Oltre ai difetti algoritmici e di codifica, le carenze di risorse sono un’altra causa comune.
Hardware locale come i cicli RAM e CPU influiscono sulle prestazioni dell’applicazione, così come altre risorse come la larghezza di banda della rete. Inoltre, si noti che i problemi del sistema operativo locale influiscono spesso sulle prestazioni dell’applicazione.
Come migliorare le prestazioni dell’applicazione Java – 9 passaggi
Prima di approfondire ogni passaggio specifico, volevamo offrirti una panoramica di alto livello su come migliorare le prestazioni delle applicazioni Java, come segue:
- Eseguire la profilazione e test di carico – la profilatura della tua applicazione Java ti aiuterà a scoprire i punti deboli e i colli di bottiglia.
- Pulizia del codice e revisione degli algoritmi – la pulizia del codice è più facile da mantenere, modificare, leggere e perfezionare; la revisione dei tuoi algoritmi riduce le chiamate alle funzioni tautologiche.
- Evitare la ricorsione quando possibile – la ricorsione è un male necessario in alcuni casi, sebbene debba essere usata con parsimonia.
- Aggiorna l’hardware del sistema – le scarse prestazioni dell’applicazione potrebbero non essere radicate in codici e algoritmi scadenti; invece, la causa sottostante può essere correlata al sistema che esegue l’applicazione.
- Aumenta la larghezza di banda LAN e WAN – non tutte le funzioni interagiscono con l’hardware locale; se l’applicazione parla con sistemi remoti, potrebbe essere la colpa della tua infrastruttura di rete.
- Metti in ordine il tuo sistema operativo – i sistemi operativi disordinati necessitano di manutenzione per eseguire le applicazioni al meglio delle loro possibilità.
- Impiega StringBuilder per una maggiore efficienza – le stringhe sono quasi inevitabili nella maggior parte delle applicazioni, ma l’operazione “+ =” è altamente inefficiente.
- Sfruttare la memorizzazione nella cache per migliorare le prestazioni – la memorizzazione nella cache è uno dei modi migliori per ridurre l’istanza di oggetto ridondante e le chiamate di funzione.
- Favorisci la pila sul mucchio – lo stack è più efficiente per quanto riguarda le risorse di sistema perché si mantiene e libera la memoria che gli oggetti defunti occupano.
Detto questo, approfondiamo un po ‘più a fondo ogni metodo per migliorare le prestazioni delle applicazioni Java.
1. Eseguire la profilazione e test di carico
Il primo passo per migliorare le prestazioni delle applicazioni Java è identificare le aree da migliorare. Senza sapere dove si trovano i maggiori problemi, provare ad accelerare un’applicazione è come lanciare un dardo su un bersaglio mentre è bendato. Fortunatamente, esistono strumenti software che raccolgono dati relativi alle prestazioni delle applicazioni.
Il primo strumento che consigliamo di utilizzare è il software di profilazione Java. Un esempio è YourKit, che è una soluzione adatta sia alle aziende che ai singoli utenti. YourKit offre una varietà di licenze come opzioni aziendali, accademiche, open source e per sede.
Le sue funzionalità includono, ma non sono limitate a, le seguenti:
- Profilazione delle prestazioni della CPU
- Profilazione delle prestazioni della memoria
- Rilevazione di perdite di memoria
- Discussioni e analisi di sincronizzazione
- Test delle prestazioni di Web, database e I / O
Questo strumento è stato progettato per essere utilizzato su sistemi locali, sistemi remoti, progetti attualmente in fase di sviluppo e persino software di produzione. YourKit non è l’unico profiler Java di qualità, tuttavia, e ha una forte concorrenza da altre soluzioni come EJ-Technologies, che ha creato il file JProfiler.
Questo strumento è molto simile a YourKit e fornisce opzioni di test per sessioni locali e remote, trigger offline, confronti di istantanee, tracciamento delle richieste (HTTP, RMI, servizio Web, EJB, eventi AWT, avvio thread, ecc.) e creazione di probe personalizzati tra molte altre funzionalità. da ultimo, JProfiler ha anche strumenti di profilatura hardware, thread, telemetria e database.
2. Pulizia del codice e revisione degli algoritmi
Il codice sorgente del software è come la prima bozza di un romanzo: non è mai perfetto dopo la prima iterazione e richiede revisioni significative prima che venga finalmente perfezionato. Prima di tutto, dovresti cercare di scrivere un codice pulito saturo di commenti in modo da poter navigare nel testo e ricordare facilmente perché ogni oggetto è stato istanziato e perché ogni funzione è stata chiamata.
Sebbene mantenere pulito il codice non acceleri da solo un’applicazione Java, ti aiuta a eliminare in modo più efficiente il codice non necessario e cerca punti deboli e ridondanza nei tuoi algoritmi. Il codice pulito rende anche il processo di debug più semplice e ti aiuta a correggere gli errori (come le perdite di memoria) che hai identificato dopo la profilazione e il caricamento del test del software.
3. Evitare la ricorsione quando possibile
La ricorsione è una strategia di programmazione di base in cui una funzione si chiama per risolvere un problema. La ricorsione non è necessariamente malvagia, tuttavia è un’arma a doppio taglio. Ha vantaggi e usi pratici. Ad esempio, la ricorsione rende il codice più pulito e compatto e riduce le iterazioni tautologiche di loop e funzioni.
Poiché la ricorsione riduce la complessità e il volume del codice, aiuta a semplificare la manutenzione di un’applicazione Java. Sfortunatamente, questi vantaggi hanno un prezzo per le prestazioni dell’applicazione. Le chiamate di ricorsione e funzione sono costose in termini di velocità e prestazioni perché richiedono funzioni pop e push nello stack.
Una soluzione più efficiente alla ricorsione, invece, è il looping. Le operazioni di loop possono essere più difficili da leggere e sono composte da più caratteri e codice sorgente rispetto alla ricorsione, ma sono preferibili quando è necessario massimizzare le prestazioni dell’applicazione. Potrebbe non essere sempre pratico rinunciare del tutto alla ricorsione, ma attenuarla il più possibile contribuirà a migliorare le prestazioni delle applicazioni Java.
4. Aggiorna l’hardware del sistema
A prima vista, potrebbe sembrare che un’applicazione Java poco performante debba essere causata da un problema software. Sebbene possa sembrare controintuitivo, la causa principale delle scarse prestazioni potrebbe essere un problema hardware. Indipendentemente dal fatto che tu stia eseguendo un’applicazione Java localmente o in remoto, il sistema in cui è in esecuzione l’applicazione Java potrebbe non disporre di risorse di sistema sufficienti per eseguire il codice in modo soddisfacente.
Il componente più semplice da aggiornare che in genere influisce direttamente sulle prestazioni del software è la RAM. Espandendo la quantità di memoria nel computer, si riduce la possibilità che il sistema esaurisca lo spazio di archiviazione per i dati dell’applicazione e sia costretto a tornare a utilizzare il disco rigido come RAM improvvisata. Questa pratica è nota come file di paging e sebbene abbia usi pratici, i file di paging sono più indesiderabili per le applicazioni ad alte prestazioni rispetto alla RAM perché il processo di lettura e scrittura è significativamente più lento su un disco rigido.
Inoltre, se l’applicazione Java interagisce in modo significativo con il disco rigido (come un backup di dati o un’applicazione di sincronizzazione), l’aggiornamento del disco rigido può migliorare le prestazioni del sistema. Ad esempio, è possibile eseguire l’aggiornamento a un’unità con RPM più elevati per procedure di lettura e scrittura più veloci. Tuttavia, si noti che i dischi rigidi più veloci sono SSD (unità a stato solido) e non contengono parti mobili. Infine, alcuni sistemi, ma non tutti, sono in grado di espandere anche la CPU, anche se non è facile aggiornarlo come la RAM.
5. Aumentare la larghezza di banda LAN e WAN
Sebbene l’hardware locale e del server sia un componente chiave delle applicazioni Java, incluse le applicazioni Web Java, non è l’unico potenziale collo di bottiglia. Che si tratti di ospitare applicazioni Web Java localmente su una LAN, su una rete intranet o in remoto, la larghezza di banda svolge un ruolo cruciale per quanto riguarda la disponibilità e le prestazioni delle applicazioni, soprattutto durante i periodi di picco di carico.
In generale, la larghezza di banda LAN è in genere abbondante ed economica, mentre la larghezza di banda WAN è costosa e scarsa. Tuttavia, altro traffico LAN potrebbe affollare la rete locale a cui è collegato il server che esegue le applicazioni Web Java. Questo problema può essere risolto in due modi.
Innanzitutto, puoi scegliere di aggiornare gli switch e l’infrastruttura di rete locale a una soluzione Gigabit Ethernet o 10Gigabit Ethernet per alleviare la congestione della rete. In alternativa, è possibile implementare una politica QoS (Quality of Service) che dia priorità al traffico da e verso il server che ospita le applicazioni Java rispetto ad altri tipi di traffico.
Inoltre, oltre ad aumentare la larghezza di banda WAN (che potrebbe richiedere la selezione di un altro ISP), è possibile implementare il bilanciamento del carico per sfruttare al meglio le connessioni ISP ridondanti. Ricordare che le applicazioni Java con prestazioni scadenti potrebbero non essere necessariamente causate da problemi software e possono essere influenzate dalla congestione della rete.
6. Metti in ordine il tuo sistema operativo
I sistemi operativi richiedono pulizia e manutenzione per funzionare al massimo delle prestazioni e utilizzare in modo efficiente le risorse di sistema. Un sistema operativo trascurato ha la tendenza a rallentare e sentirsi lento. Ad esempio, potresti avere molti processi invisibili in esecuzione in background che non sapevi nemmeno.
Inoltre, la procedura di installazione di molte applicazioni aggiunge automaticamente nuovo software all’elenco delle applicazioni che si avviano all’avvio. Queste applicazioni non solo causano l’avvio più lento di un sistema, ma riducono anche le risorse di sistema vitali come i cicli RAM e CPU che potrebbero altrimenti essere utilizzate per eseguire un’applicazione Java.
La potatura del processo e delle applicazioni necessarie e indesiderate aiuteranno a riordinare il sistema operativo, così come l’esecuzione di un pulitore di registro sui sistemi Windows. Un pulitore del registro può mitigare ed eliminare gli errori DLL e gli errori di runtime rimuovendo le voci errate nel registro e rigenerando le strutture degli indici.
Inoltre, un altro compito di pulizia – che dovrebbe essere usato con parsimonia – sta deframmentando il disco rigido. Nel tempo, poiché i file vengono continuamente scritti ed eliminati da un disco rigido, possono diventare un caos tentacolare. Uno strumento di deframmentazione arrotonda tutti i dati e li riscrive in blocchi contigui, riducendo il tempo necessario al disco rigido per leggere le informazioni.
Ma attenzione: il processo di deframmentazione è molto impegnativo e faticoso sul disco rigido. Se lo deframmenti quotidianamente, settimanalmente o anche mensilmente, ridurrai drasticamente la durata del tuo disco rigido. Una frequenza più ragionevole e pratica è di circa due o tre volte all’anno.
7. Impiegare StringBuilder per una maggiore efficienza
Le stringhe sono un tipo di dati comune nella stragrande maggioranza delle applicazioni: sono piuttosto difficili da evitare o ignorare. Sfortunatamente, la concatenazione di stringhe è tanto inefficiente quanto frequente. Potrebbe sembrare che il modo migliore per concatenare le stringhe sia con l’operazione “+ =”, ma questa è un’operazione abusata che è selvaggiamente inefficiente.
Il problema è che l’operazione “+ =” alloca una stringa completamente nuova ogni volta che viene utilizzata, il che può creare molti dati di stringa ridondanti e non necessari. Sebbene l’utilizzo di questa operazione di tanto in tanto non causi l’interruzione della tua applicazione Java, ogni piccola operazione si somma. Immagina quante volte questa inefficienza potrebbe essere amplificata in un ciclo?
Fortunatamente, esiste un’alternativa più efficiente. Il StringBuilder L’oggetto è stato progettato come un’alternativa efficiente alle operazioni di concatenazione di base. Prendi l’abitudine di usare questo tipo di dati invece di usare la scorciatoia pigra dell’operazione “+ =” se vuoi migliorare le prestazioni delle applicazioni Java.
8. Sfruttare la memorizzazione nella cache per migliorare le prestazioni
La memorizzazione nella cache è uno dei modi più efficaci per aumentare l’efficienza delle applicazioni Java. Il concetto chiave della memorizzazione nella cache è di consolidare più chiamate e funzioni in una risorsa riutilizzabile. Sebbene esistano molte forme di memorizzazione nella cache, quando la maggior parte delle persone qui usa la parola “memorizzazione nella cache”, la prima cosa che viene in mente è la tecnologia del database.
Non solo i dati contenuti in un database possono essere memorizzati nella cache locale per conservare la larghezza di banda, ma anche l’alto volume di connessioni al database che altrimenti rallenterebbe un’applicazione. Tuttavia, tieni presente che la memorizzazione nella cache non deve essere abusata. Potresti pensare intuitivamente che tutto dovrebbe essere memorizzato nella cache nel caso in cui dovessi riutilizzarlo nel prossimo futuro. Tuttavia, è necessario assicurarsi che i dati e le connessioni memorizzati nella cache siano abbastanza numerosi da vedere un miglioramento delle prestazioni.
9. Favorire la pila sul mucchio
Per migliorare le prestazioni dell’applicazione Java, archiviare i dati nello stack anziché nell’heap. Perchè lo chiedi? Perché utilizza la memoria in modo più efficiente e rimuove i dati che hanno già raggiunto il suo scopo. Lo stack non solo utilizza le risorse in modo più efficiente, ma tiene anche sotto controllo le spese generali. Il modo migliore per favorire lo stack rispetto all’heap è evitare l’istanza delle classi wrapper.
Proprio come l’uso della ricorsione, non è sempre possibile (o addirittura possibile) rinunciare all’uso di una classe wrapper. Ma come regola generale, dovresti utilizzare per impostazione predefinita tipi di dati primitivi come “int” anziché Integer. Il numero di guadagni in termini di prestazioni che puoi ottenere impiegando questa tattica dipende da una miriade di fattori. Tuttavia, favorire lo stack è una buona guida per trovare il percorso verso il codice Java più snello ed efficiente.
Esistono strumenti sul mercato per aiutarti ad aggiornare con successo le patch Java. Uno di questi strumenti è SolarWinds Patch Manager.
È possibile scaricare un pienamente funzionante Prova gratuita di 30 giorni
SolarWinds Patch Manager Scarica la versione di prova GRATUITA di 30 giorni
Correlati: migliori strumenti di gestione delle patch
Inoltre, dovresti dare un’occhiata a Strumento di monitoraggio Java di SolarWinds per server applicazioni con server & Application Monitor per migliorare le prestazioni. È possibile scaricare un pienamente funzionante Prova gratuita di 30 giorni.
SolarWinds Java Monitoring Tool per Application Server con SAMDownload prova GRATUITA di 30 giorni
Pensieri finali
Se un’applicazione Java lenta e strisciante ti fa ribollire il sangue, fai un respiro profondo e ricorda di non battere i pugni sulla tastiera: peggiorerà le cose. Invece, fai un respiro profondo e usa uno dei metodi di cui sopra per accelerare le prestazioni delle applicazioni Java.
Se hai storie o aneddoti personali riguardanti l’accelerazione delle applicazioni Java, ti invitiamo a commentare di seguito.
Italian:
Vivere nellera digitale può essere sia una benedizione che una frustrazione. Quando tutto funziona senza problemi, tendiamo a darlo per scontato, ma quando si verificano problemi tecnici, lo stress aumenta. Sia che tu sia uno sviluppatore o un utente finale, ci sono passi che puoi prendere per migliorare le prestazioni delle applicazioni Java. È importante eseguire la profilazione e i test di carico per individuare i punti deboli e i colli di bottiglia. Inoltre, la pulizia del codice e la revisione degli algoritmi possono ridurre le chiamate alle funzioni tautologiche. È importante evitare la ricorsione quando possibile e aggiornare lhardware del sistema se necessario. Inoltre, aumentare la larghezza di banda LAN e WAN e mettere in ordine il sistema operativo possono migliorare le prestazioni dellapplicazione. In sintesi, ci sono molte cause di scarse prestazioni dellapplicazione, ma seguendo questi nove passaggi, puoi migliorare le prestazioni delle applicazioni Java.