<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Anderson Castro</title>
    <description>The latest articles on DEV Community by Anderson Castro (@soncastro).</description>
    <link>https://dev.to/soncastro</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2110810%2Fb5ea98b7-7b5c-4cfd-a854-0361d3d06a53.png</url>
      <title>DEV Community: Anderson Castro</title>
      <link>https://dev.to/soncastro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/soncastro"/>
    <language>en</language>
    <item>
      <title>Java Microbenchmark Harness(JMH): StringBuilder vs String - quando performance importa</title>
      <dc:creator>Anderson Castro</dc:creator>
      <pubDate>Thu, 18 Sep 2025 06:07:15 +0000</pubDate>
      <link>https://dev.to/soncastro/java-microbenchmark-harnessjmh-stringbuilder-vs-string-quando-performance-importa-5ad8</link>
      <guid>https://dev.to/soncastro/java-microbenchmark-harnessjmh-stringbuilder-vs-string-quando-performance-importa-5ad8</guid>
      <description>&lt;p&gt;Há muito tempo eu tenho em mente a afirmação: “StringBuilder tem uma performance melhor que String”.&lt;br&gt;
Resolvi usar a afirmação acima como motivação para me ambientar com o JMH(Java Microbenchmark Harness) e comprovar na prática.&lt;br&gt;
Talvez você já tenha visto benchmarks simples usando System.currentTimeMillis() ou System.nanoTime(), essas abordagens funcionam, mas o JMH oferece medições muito mais precisas, pois considera fatores da JVM que podem distorcer os resultados. &lt;br&gt;
O JMH está disponível aqui: &lt;a href="https://lnkd.in/dzE95pjB" rel="noopener noreferrer"&gt;https://lnkd.in/dzE95pjB&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para o benchmark, criei um loop com 100.000 iterações fazendo concatenação de strings, com a mesma lógica tanto para String quanto para StringBuilder.&lt;/p&gt;

&lt;p&gt;🔎 Resultado:&lt;br&gt;
String: 471,807 ms&lt;br&gt;
StringBuilder: 0,125 ms&lt;/p&gt;

&lt;p&gt;A diferença é enorme, e o motivo é simples:&lt;/p&gt;

&lt;p&gt;String é imutável: cada concatenação cria um novo objeto, gerando muitos objetos temporários. Isso aumenta a atuação do Garbage Collector, afetando a performance.&lt;/p&gt;

&lt;p&gt;StringBuilder é mutável: todas as concatenações acontecem no mesmo objeto, evitando overhead desnecessário.&lt;/p&gt;

&lt;p&gt;Esse benchmark me deixou ainda mais atento sobre fazer escolhas conscientes quando a performance é crítica.&lt;/p&gt;

&lt;p&gt;Vale lembrar que existe também o StringBuffer, que é thread-safe e, por isso, naturalmente um pouco(sutil) mais lento que o StringBuilder. Mas em alguns benchmarks, o StringBuffer pode até ter performance tão boa quanto StringBuilder, mas deixo esse comparativo para um próximo post 😉&lt;/p&gt;

&lt;p&gt;Usar System.currentTimeMillis() ou System.nanoTime() funciona para medições simples, mas quando se busca alta precisão, o JMH se destaca. Ele leva em conta fatores da JVM, como JIT, Garbage Collector e otimizações de compilação, oferecendo resultados confiáveis e reproduzíveis. Conhecer o JMH é importante, porque cedo ou tarde podemos precisar avaliar a performance de forma precisa e segura em nossos códigos Java.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxsbvc0r8av0h2heega5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxsbvc0r8av0h2heega5.png" alt=" " width="800" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F49u5z3x902puta8njwew.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F49u5z3x902puta8njwew.png" alt=" " width="624" height="811"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Factory Method: Teoria e Prática do Design Pattern com Java</title>
      <dc:creator>Anderson Castro</dc:creator>
      <pubDate>Wed, 17 Sep 2025 05:45:59 +0000</pubDate>
      <link>https://dev.to/soncastro/factory-method-teoria-e-pratica-do-design-pattern-com-java-4bk7</link>
      <guid>https://dev.to/soncastro/factory-method-teoria-e-pratica-do-design-pattern-com-java-4bk7</guid>
      <description>&lt;p&gt;🚀 Novo vídeo no ar!&lt;/p&gt;

&lt;p&gt;Neste vídeo eu explico o Factory Method com Java, um design pattern criacional que ajuda a criar objetos de forma flexível e organizada, deixando que as subclasses decidam qual implementação concreta usar.&lt;/p&gt;

&lt;p&gt;Se você já se perguntou como aplicar padrões de projeto na prática ou quer melhorar a qualidade e a manutenção do seu código, esse vídeo é para você! 💡&lt;/p&gt;

&lt;p&gt;Assista e aprenda como o Factory Method pode tornar seu código mais limpo, escalável e fácil de evoluir.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=SFiKSrfm2Rc" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=SFiKSrfm2Rc&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Entendendo Comparação de Strings em Java: Instâncias vs Literais</title>
      <dc:creator>Anderson Castro</dc:creator>
      <pubDate>Wed, 17 Sep 2025 05:41:13 +0000</pubDate>
      <link>https://dev.to/soncastro/entendendo-comparacao-de-strings-em-java-instancias-vs-literais-161n</link>
      <guid>https://dev.to/soncastro/entendendo-comparacao-de-strings-em-java-instancias-vs-literais-161n</guid>
      <description>&lt;p&gt;Este vídeo é assunto de certificação.&lt;br&gt;
Entendendo Comparação de Strings em Java: Instâncias vs Literais.&lt;br&gt;
Exemplo do efeito da "string pool"&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=dKlhgiD8qAM" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=dKlhgiD8qAM&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Você conhece a palavra-chave var no Java?</title>
      <dc:creator>Anderson Castro</dc:creator>
      <pubDate>Mon, 23 Dec 2024 14:30:22 +0000</pubDate>
      <link>https://dev.to/soncastro/voce-conhece-a-palavra-chave-var-no-java-39m9</link>
      <guid>https://dev.to/soncastro/voce-conhece-a-palavra-chave-var-no-java-39m9</guid>
      <description>&lt;p&gt;A partir do Java 10, a palavra-chave &lt;code&gt;var&lt;/code&gt; foi introduzida para facilitar a declaração de variáveis locais, permitindo que o tipo seja inferido pelo compilador. Isso traz mais simplicidade e legibilidade ao código, especialmente em situações onde o tipo é óbvio.&lt;/p&gt;

&lt;p&gt;Exemplos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var nome = "Anderson"; // Inferido como String
var numero = 8;        // Inferido como int
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vantagens:&lt;br&gt;
1) Código mais limpo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var lista = List.of("Java", "Anderson");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) Legibilidade: Evita repetições desnecessárias.&lt;/p&gt;

&lt;p&gt;Cuidados:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Só pode ser usada em variáveis locais e inicializadas.&lt;/li&gt;
&lt;li&gt;Evite quando o tipo não for óbvio:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var x = calcular(); // Tipo não claro
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use o &lt;code&gt;var&lt;/code&gt; com moderação para manter o código simples e legível!&lt;/p&gt;

</description>
      <category>java</category>
      <category>programming</category>
    </item>
    <item>
      <title>Como o Quarkus Resolve os Desafios do Desenvolvimento Java Moderno</title>
      <dc:creator>Anderson Castro</dc:creator>
      <pubDate>Thu, 12 Dec 2024 19:51:57 +0000</pubDate>
      <link>https://dev.to/soncastro/como-o-quarkus-resolve-os-desafios-do-desenvolvimento-java-moderno-4c6m</link>
      <guid>https://dev.to/soncastro/como-o-quarkus-resolve-os-desafios-do-desenvolvimento-java-moderno-4c6m</guid>
      <description>&lt;p&gt;O Quarkus é mais do que um framework Java; é uma solução pensada para superar os desafios que desenvolvedores enfrentam ao criar sistemas modernos. Como alguém que já precisou lidar com problemas complexos, como um proxy que alterava requisições de HTTPS para HTTP, sei que o verdadeiro diferencial de uma ferramenta está em sua capacidade de resolver problemas práticos.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;O Problema com Frameworks Tradicionais&lt;/u&gt;&lt;br&gt;
Frameworks tradicionais, foram revolucionários em seu tempo, mas enfrentam dificuldades em cenários modernos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inicialização lenta: Aplicações podem demorar vários segundos para começar, o que é um problema em ambientes serverless ou que exigem escalabilidade rápida.&lt;/li&gt;
&lt;li&gt;Alto consumo de memória: Compromete a eficiência e eleva os custos em nuvens públicas.&lt;/li&gt;
&lt;li&gt;Complexidade de integração: Configurações com containers e ferramentas como Kubernetes nem sempre são simples.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Esses problemas não são meramente teóricos. Desenvolvedores frequentemente perdem tempo precioso tentando mitigar essas questões em sistemas críticos.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;A Solução Quarkus&lt;/u&gt;&lt;br&gt;
O Quarkus foi projetado com dois pilares centrais: eficiência no uso de recursos e foco na experiência do desenvolvedor. Isso não é apenas um slogan; são características que resolvem problemas reais enfrentados no dia a dia.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Baixo Consumo de Recursos:&lt;br&gt;
Graças à integração com o GraalVM, o Quarkus compila suas aplicações em binários nativos, o que reduz o consumo de memória e acelera o tempo de inicialização. Imagine um serviço que precisa ser escalado rapidamente para atender a picos de demanda: com o Quarkus, ele está pronto para rodar em milissegundos, não segundos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Developer Joy:&lt;br&gt;
O Quarkus prioriza o fluxo de trabalho do desenvolvedor, eliminando etapas redundantes. Com Hot Reload, você vê mudanças instantaneamente, enquanto a configuração simplificada e a CLI prática permitem que você foque no que importa: resolver problemas.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;u&gt;Quando Usar o Quarkus&lt;/u&gt;&lt;br&gt;
O Quarkus é ideal em cenários que exigem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Microsserviços: O consumo reduzido de memória permite rodar dezenas ou centenas de instâncias sem esgotar recursos.&lt;/li&gt;
&lt;li&gt;Ambientes serverless: Onde cada segundo de inicialização importa para a performance e custo.&lt;/li&gt;
&lt;li&gt;Aplicações cloud-native: Graças à sua integração nativa com Kubernetes, OpenShift e outras ferramentas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se você já precisou lidar com a complexidade de sistemas que demandam mudanças ágeis e alta performance, verá no Quarkus um aliado valioso.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Conclusão&lt;/u&gt;&lt;br&gt;
Ser um solucionador de problemas exige encontrar ferramentas que não só lidem com as dores do presente, mas também estejam preparadas para os desafios do futuro. O Quarkus é uma dessas ferramentas. Ele não apenas resolve os problemas clássicos do Java, mas também redefine o que significa desenvolver aplicações modernas.&lt;/p&gt;

&lt;p&gt;Se você valoriza eficiência, simplicidade e resultados, o Quarkus pode ser a solução que você estava procurando.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
