Performance com Strings e StringBuilder em Java

Semana passada, estava trabalhando em uma ferramenta em java, que coletava algumas informações e gerava uma saída para um arquivo txt.

Ao testar a ferramenta com um grande volume de dados, me surpreendi que ela gastava mais tempo de execução na concatenação de String do que na escrita do arquivo.

Não podia deixar a ferramenta assim e como um bom programador resolvi melhorar o meu código. E olha como ficou o resultado.

Na primeira versão concatenava usando apenas Uma String (output), código abaixo:

long prev_time = System.currentTimeMillis();
long time;
String output = "";

for (Device device : this.devices) {
 output += "\"deviceid\": \"" + device.deviceid + "\", ";
....
}
time = System.currentTimeMillis() - prev_time;
System.out.println("Time after for loop " + time);

O resultado foi “Time after for loop 233117 ms“, a ferramenta gastava aproximadamente 4 minutos para executar.

Na segunda versão, usei Duas Strings (output e output2) para fazer a concatenação, código abaixo:

long prev_time = System.currentTimeMillis();
long time;
String output = "";

for (Device device : this.devices) {
 String output2 = "";
 output2 += "\"deviceid\": \"" + device.deviceid + "\", ";
....
 output += output2;
}
time = System.currentTimeMillis() - prev_time;
System.out.println("Time after for loop " + time);

O resultado foi “Time after for loop 22929 ms“, a ferramenta agora gastava apenas 22 segundos para processar. Muito bom!!!

Achei que não deveria parar nesse valor e procurei qual outro tipo de classe Java, que poderia utilizar, e num pesquisa rápida encontrei o StringBuilder.

Na terceira versão usei o StringBuilder, veja código abaixo:

long prev_time = System.currentTimeMillis();
long time;
StringBuilder sb = new StringBuilder();

for (Device device : this.devices) {
 String output2 = "";
 output2 += "\"deviceid\": \"" + device.deviceid + "\", ";
....
 sb.append(output2);
}
time = System.currentTimeMillis() - prev_time;
System.out.println("Time after for loop " + time);
String output3 = sb.toString();

O resultado foi  “Time after for loop 137 ms“, impressionantes 137 milissegundos.

Performance é sempre um desafio, mas melhor ainda é compartilhar. #FicaADica

Leia também:

Dica de formatação ao enviar Emails com HTML e CSS

Se você estiver enviando um email da sua aplicação que utiliza HTML e CSS, pode acontecer erros na formatação, quando você abrir este email no seu cliente de Correio.

A dica deste post é adicionar tags de comentários, em frente a cada linha de CSS, assim o email não perde a formatação.

Seleção_040

Leia também:

Desenvolvimento de Portlets, sem conhecer Java, usando Javascript/CSS/HTML

O IBM WebSphere Portal permite que a TI da empresa entregue de forma rápida, um ambiente robusto de Portal, com características de agregação de dados e personalização.

Mas um dos principais desafios é existência de analistas e programadores com conhecimento em desenvolver para Portal, especialmente quando falamos de conhecimento da especificação Java – JSR 286 (Portlets). O mesmo não acontece quando falamos de linguagens de script.

Atenta a essa demanda, a IBM liberou recentemente no Greenhouse Solutions Catalog, o IBM Script Portlet  para WebSphere Portal. O IBM Script Portlet é uma ferramenta que incorpora tecnologias web como JavaScript, CSS e HTML para criar portlets (JSR 286) sem a necessidade de conhecer Java, portlets, … O IBM Script Portlet é uma ambiente de desenvolvimento baseado no IBM Web Content Manager (WCM), clique na imagem abaixo para aumentar:

ibmscriptportlet

 

Dentre algumas das características da nova ferramenta estão:

  • Direcionamento de conteúdo com base em dispositivos ou geografias;
  • Acesso as informações do usuário logado;
  • Design adaptivo.
  • Projeto Adaptive usando processamento condicional.

Para ver como funciona o IBM Script Portlet, recomendo você dar uma olhada no artigo Enchanting Business value with Exceptional Scriptlets e ver também a apresentação KEY108 do IBM Connect 2014.

O IBM Script Portlet para WebSphere Portal requer o IBM WebSphere Portal V8 e pode ser baixado do Greenhouse no seguinte link  IBM Script Portlet para WebSphere Portal.

Leia também:

Applets Java do IBM Domino deixarão de funcionar devido a nova JVM da Oracle. Veja como solucionar!

A Oracle disponibilizou uma nova JVM no domingo passado (19/Jan/2014).

Apos essa atualização alguns applets providos pelo IBM Domino deixarão de funcionar nos navegadores que estejam utilizando esta última versão da JVM.

Para corrigir este incompatibilidade a IBM já disponibilizou um fix para o Domino 8.x e 9.X.  O fix prove novos arquivos zip contendo applets Java com novas assinaturas.

A atualização é simples, bastando apenas sobrepor os arquivos no servidor e reiniciar a tarefa http.

Os arquivos para download e procedimento podem ser encontrados na Technote 1662233.

Leia também: