Anteriormente aviamos avaliado o desempenho quando concatenamos vários caracteres "f", utilizando String. Podemos concluir que utilizar String para concatenar strings pode ser muito prejudicial para o desempenho do seu código.
Hoje vamos analisar a diferença do tempo de processamento entre String e StringBuilder.
Para facilitar, vamos utilizar o mesmo código anterior, realizando pequenas adaptações, para vermos de fato a velocidade de execução do StringBuilder
- Comparando performance de String e String Builder
public class ConcatenaString { public static void main(String[] args) { // Trecho de código para String String strFinal = ""; long tStart = System.currentTimeMillis(); // Vamos concatenar 100000 vezes o caractere 'f', // então relembremos que cada vez que passarmos no laço // a JVM irá criar um novo objeto em memória. for (int i = 0; i < 100000; i++) { strFinal += "f"; } long tEnd = System.currentTimeMillis(); long tResult = tEnd - tStart; System.out.println("Tempo de execução com String = " + tResult + " ms"); // Trecho de código para StringBuilder StringBuilder strBuilder = new StringBuilder(); tStart = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { strBuilder.append("f"); } tEnd = System.currentTimeMillis(); tResult = tEnd - tStart; System.out.println("Tempo de execução com StringBuilder = " + tResult + " ms"); } }
Tempo de execução com String = 14627 ms Tempo de execução com StringBuilder = 0 ms
Na minha máquina ao executar o código acima, a saída foi de 14627ms para String com o operador "+" e 0ms para o StringBuilder. Foram utilizados apenas 100mil caracteres, mas vamos imaginar se aumentássemos em 10x esse valor... Seria 1milhão de caracteres.
Altere o valor do seu código e verifique a o tempo de processamento.
Perceba que para não tornar o teste tendencioso, coloquei o tInicio e o tFim no início e no fim do laço "for", dessa forma desconsideramos qualquer outro código que venha antes ou depois, por exemplo as atribuições e escritas no console, assim avaliamos puramente a concatenação de ambos.
Sem dúvidas a performance do StringBuilder comparado a String comum é muito melhor quando precisamos concatenar valores.
O que acontece na verdade é que StringBuilder é mútavel, ou seja, a cada "append(valor)" que fizemos no laço, concatenamos de fato um novo valor a String já existente, sem a necessidade da criação de um novo objeto em memória. Mas e qual a diferença entre StringBuilder e StringBuffer? A resposta fica para o próximo post. Até a próxima.
Nenhum comentário:
Postar um comentário