{"id":399,"date":"2021-10-14T19:28:28","date_gmt":"2021-10-14T19:28:28","guid":{"rendered":"https:\/\/sidroniolima.com.br\/blog\/?p=399"},"modified":"2021-10-14T19:28:32","modified_gmt":"2021-10-14T19:28:32","slug":"effective-java-item-6","status":"publish","type":"post","link":"https:\/\/sidroniolima.com.br\/blog\/2021\/10\/14\/effective-java-item-6\/","title":{"rendered":"Effective Java &#8211; Item 6"},"content":{"rendered":"\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=sidroniolima\" class=\"twitter-share-button\">Tweet<\/a><\/div>\n\n<h2><a href=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2021\/10\/recicle.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-401\" src=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2021\/10\/recicle.png\" alt=\"\" width=\"770\" height=\"330\" srcset=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2021\/10\/recicle.png 770w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2021\/10\/recicle-300x129.png 300w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2021\/10\/recicle-768x329.png 768w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2021\/10\/recicle-620x266.png 620w\" sizes=\"auto, (max-width: 770px) 100vw, 770px\" \/><\/a><\/h2>\n<h2>Avoid creating unnecessary objects (evite criar objetos desnecess\u00e1rios)<\/h2>\n<p>O item do livro diz que \u00e9 mais apropriado reusar objetos ao inv\u00e9s de criar novos objetos funcionalmente equivalentes cada vez que for necess\u00e1rio. Um objeto pode sempre ser reutilizado se for imut\u00e1vel.<\/p>\n<p>O primeiro exemplo dado \u00e9 a cri\u00e7\u00e3o de uma String.<\/p>\n<p><code>String s = new String(\"bikini\"); \/\/ DON'T DO THIS!<\/code><\/p>\n<p>Esse c\u00f3digo cria uma inst\u00e2ncia cada vez que \u00e9 executado e nenhum deles \u00e9 necess\u00e1rio. O argumento do construtor (&#8220;bikini&#8221;) j\u00e1 \u00e9 uma String.<\/p>\n<p>O correto \u00e9 <code>String s = \"bikini\";<\/code><\/p>\n<p>Em um loop, nesse caso, apenas uma \u00fanica inst\u00e2ncia \u00e9 criado, ao inv\u00e9s de uma para cada vez que for executado.<\/p>\n<p>E se na mesma VM outro objeto contendo &#8220;bikini&#8221; reusar\u00e1 a inst\u00e2ncia j\u00e1 criada.<\/p>\n<p>O c\u00f3digo abaixo, que verifica se uma String \u00e9 um numeral romano, e da forma como foi escrito, criar\u00e1 sempre um Pattern para express\u00e3o regular, o que \u00e9 muito caro para a VM.<\/p>\n<p><code>\/\/ Performance can be greatly improved!<br \/>static boolean isRomanNumeral(String s) {<br \/>return s.matches(\"^(?=.)M*(C[MD]|D?C{0,3})\"<br \/>+ \"(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$\");<br \/>}<\/code><\/p>\n<p>O certo seria criar um objeto imut\u00e1vel que seria reutilizado nas chamadas ao m\u00e9todo.<\/p>\n<p><code>\/\/ Reusing expensive object for improved performance<br \/>public class RomanNumerals {<br \/>private static final Pattern ROMAN = Pattern.compile(<br \/>\"^(?=.)M*(C[MD]|D?C{0,3})\"<br \/>+ \"(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$\");<br \/>static boolean isRomanNumeral(String s) {<br \/>return ROMAN.matcher(s).matches();<br \/>}<br \/>}<\/code><\/p>\n<p>\u00a0Esse c\u00f3digo acima rodou 6.5 vezes mais r\u00e1pido.<\/p>\n<p>Um outro exemplo, que pode levar ao aumento de utiliza\u00e7\u00e3o de recursos, \u00e9 utilizar o autoboxing, isto \u00e9, poder utilizar juntos primitivos e objetos que os encapsulam. Exemplo de long, primitivo, e Long, objeto.<\/p>\n<p><code>\/\/ Hideously slow! Can you spot the object creation?<br \/>private static long sum() {<br \/>Long sum = 0L;<br \/>for (long i = 0; i &lt;= Integer.MAX_VALUE; i++)<br \/>sum += i;<br \/>return sum;<br \/>}<\/code><\/p>\n<p>O c\u00f3digo acima criar\u00e1 2^31 inst\u00e2ncias de Long desnecess\u00e1rias. Desta forma, &#8220;prefira tipos primitivos a objetos que os encapsulem e tome cuidado nos autoboxing n\u00e3o intencionais&#8221;.<\/p>\n<p>Essa parte do livro foi muito interessante pois s\u00e3o situa\u00e7\u00f5es di\u00e1rias e que se n\u00e3o forem observadas podem contribuir para diminuir a performance de aplica\u00e7\u00f5es.<\/p>\n<p>Segue o <a href=\"https:\/\/www.amazon.com.br\/Effective-Java-English-Joshua-Bloch-ebook\/dp\/B078H61SCH\/ref=sr_1_2?__mk_pt_BR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;crid=11ZZ64OGGW0NR&amp;dchild=1&amp;keywords=effective+java&amp;qid=1634239200&amp;sprefix=effect%2Caps%2C275&amp;sr=8-2&amp;ufe=app_do%3Aamzn1.fos.25548f35-0de7-44b3-b28e-0f56f3f96147\">link<\/a> do livro.<\/p>\n<p>\u00a0<\/p>\n\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=sidroniolima\" class=\"twitter-share-button\">Tweet<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Avoid creating unnecessary objects (evite criar objetos desnecess\u00e1rios) O item do livro diz que \u00e9 mais apropriado reusar objetos ao inv\u00e9s de criar novos objetos funcionalmente equivalentes cada vez que for necess\u00e1rio. Um objeto pode sempre ser reutilizado se for imut\u00e1vel. O primeiro exemplo dado \u00e9 a cri\u00e7\u00e3o de uma String. String s = new [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[27,116],"tags":[115,29],"class_list":["post-399","post","type-post","status-publish","format-standard","hentry","category-java","category-performance","tag-effective-java","tag-java"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/posts\/399","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/comments?post=399"}],"version-history":[{"count":1,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/posts\/399\/revisions"}],"predecessor-version":[{"id":402,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/posts\/399\/revisions\/402"}],"wp:attachment":[{"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/media?parent=399"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/categories?post=399"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/tags?post=399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}