{"id":12845,"date":"2018-01-30T17:02:47","date_gmt":"2018-01-30T16:02:47","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=12845"},"modified":"2018-01-30T17:02:47","modified_gmt":"2018-01-30T16:02:47","slug":"misurare-le-prestazioni-di-unapplicazione-java-con-stopwatch","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/misurare-le-prestazioni-di-unapplicazione-java-con-stopwatch\/","title":{"rendered":"Misurare le prestazioni di un&#8217;applicazione Java con StopWatch"},"content":{"rendered":"<p>Per conoscere\u00a0l&#8217;efficienza di un algoritmo, \u00e8 spesso indicativo misurare il tempo di esecuzione di una determinata funzione. Il modo\u00a0pi\u00f9 immediato per fare ci\u00f2 (non troppo raffinato ma funzionante) consiste nel raccogliere un&#8217;indicazione temporale in millisecondi prima e dopo lo svolgimento delle operazioni da analizzare e calcolare la differenza. Uno strumento <em>ad hoc<\/em> viene invece fornito da uno dei <a href=\"https:\/\/commons.apache.org\/\" target=\"_blank\" rel=\"noopener\">Commons <\/a>della Fondazione Apache (raccolte di componenti riutilizzabili del linguaggio Java): <strong>StopWatch<\/strong>.<\/p>\n<p>E&#8217; compreso nella libreria <a href=\"https:\/\/commons.apache.org\/proper\/commons-lang\/\" target=\"_blank\" rel=\"noopener\">Commons Lang<\/a> che pu\u00f2 essere scaricata in formato jar dalla pagina dei <a href=\"https:\/\/commons.apache.org\/proper\/commons-lang\/download_lang.cgi\" target=\"_blank\" rel=\"noopener\">Downloads<\/a> oppure essere integrato nel progetto mediante le seguenti coordinate Maven:<\/p>\n<pre class=\"lang:xhtml decode:true\">&lt;dependency&gt;\r\n  &lt;groupId&gt;org.apache.commons&lt;\/groupId&gt;\r\n  &lt;artifactId&gt;commons-lang3&lt;\/artifactId&gt;\r\n  &lt;version&gt;3.5&lt;\/version&gt;\r\n&lt;\/dependency&gt;<\/pre>\n<p>Il suo utilizzo \u00e8 piuttosto immediato:<\/p>\n<ul>\n<li>si istanzia un oggetto <strong>StopWatch<\/strong>;<\/li>\n<li>si invoca il suo metodo <em>start<\/em>;<\/li>\n<li>si eseguono le funzionalit\u00e0 di cui\u00a0si vuole misurare l&#8217;efficienza;<\/li>\n<li>si invoca il metodo <em>stop<\/em> per fermare il timer;<\/li>\n<li>si legge la misurazione raccolta tramite il metodo <em>getTime<\/em> al quale dovremo fornire l&#8217;indicazione dell&#8217;unit\u00e0 di misura in cui vorremo che la risposta sia espressa.<\/li>\n<\/ul>\n<p>Quello che segue \u00e8 un esempio in cui misuriamo quanto tempo ci &#8220;fa perdere&#8221; una chiamata <em>sleep<\/em> e poi stampiamo il risultato in secondi:<\/p>\n<pre class=\"lang:java decode:true \">public class Main {\r\n\r\n\tpublic static void main(String[] args) {\r\n\t\t\r\n\t\tStopWatch watch=new StopWatch();\r\n\t\t\r\n\t\twatch.start();\r\n\t\ttry {\r\n\t\t\tThread.sleep(12000);\r\n\t\t} catch (InterruptedException e) {\r\n\t\t\t\/\/ gestione dell'eccezione\r\n\t\t}\r\n\t\twatch.stop();\r\n\t\t\r\n\t\tSystem.out.println(watch.getTime(TimeUnit.SECONDS));\r\n\t}\r\n\r\n}\r\n<\/pre>\n<p>La misurazione dei tempi di esecuzione pu\u00f2 fornire indicazioni importanti nell&#8217;ambito della sperimentazione di funzionalit\u00e0 o per verificare quanto un algoritmo sia efficiente.<\/p>\n<p>Avete mai provato\u00a0a misurare quanto sono veloci i vostri programmi? E se s\u00ec, fateci sapere quale metodo usate&#8230;vi aspettiamo nei commenti!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Per conoscere\u00a0l&#8217;efficienza di un algoritmo, \u00e8 spesso indicativo misurare il tempo di esecuzione di una determinata funzione&#8230;.<\/p>\n","protected":false},"author":561,"featured_media":13300,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[481],"tags":[1891,1526,1892],"class_list":["post-12845","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-risorse-utili","tag-commons-apache","tag-java","tag-stopwatch"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12845","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/561"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=12845"}],"version-history":[{"count":3,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12845\/revisions"}],"predecessor-version":[{"id":13385,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12845\/revisions\/13385"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/13300"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=12845"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=12845"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=12845"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}