Escalabilidade segundo a wikipedia, e uma caracteristica desejavel em todo sistema que indica sua habilidade de manipular uma porcao crescente de trabalho de forma uniforme. Ou seja, se uma determinada aplicacao foi projetada para realizar apenas 100 processos e derrepente ha a necessidade de ampliacao do processamento para 100.000, se esta aplicacao for escalavel, certamente nao havera problemas para a parte logica do sistema (software). Escalabilidade e um termo muito amplo e engloba nao somente o software, mas o nosso foco nesse post sera apenas a parte logica.Quando desenvolvemos uma aplicacao sem o conhecimento da linguagem e metodologia utilizada ou sem um conhecimento basico de sistemas operacionais, carga de memoria, algoritmos ou o que o processador ira fazer com um determinado trecho do seu codigo, podem surgir aplicativos que nao sao escalaveis e quando a demanda aumentar, voce tera que refatorar seu codigo e possivelmente reescrever boa parte de seu aplicativo.Para exemplificar, imagine que voce necessite desenvolver uma solucao que abra um arquivo no formato TXT de 60.000 linhas, procure por linhas que contenham a string "192.168.1.20" e escreva estas linhas em um novo arquivo:public class AplicativoTXT { public static void main(String[] args) { File log = new File("access.log"); File nov = new File("access.log.bkp"); if (log.exists()) { try { String conteudo = ""; FileReader reader = new FileReader(log.getPath()); BufferedReader leitor = new BufferedReader(reader); String linha; int contador = 1; while ((linha = leitor.readLine()) != null) { if (linha.contains("192.168.1.20")){ conteudo += linha; } contador++; } BufferedWriter wr=new BufferedWriter(new FileWriter(nov)); writer.wr(conteudo); wr.close(); } catch (Exception ex) { System.out.println(ex.getMessage()); } } }}Ok, este codigo cumpre com sua funcao de varrer um aquivo txt, encontrar linhas que contenha uma determinada string, separa-las em uma string denominada "conteudo" e entao, atraves de um BufferedWriter, salvar o conteudo no arquivo.Agora entra a parte do conhecimento tecnico da linguagem e de algoritimos de computacao: Ao executar este codigo com um arquivo TXT com 60.000 linhas, ele com certeza levara mais de 15 minutos de execucao se ele nao apresentar uma StackOverflowError na tela por causa do consumo excessivo de memoria e simplesmente nao concluir a execucao do codigo. Um desenvolvedor inexperiente ou que nunca passou pela necessidade de escalabilidade de seu aplicativo, certamente nao notara a deficiencia que esse codigo pode trazer.Em java, a classe String e imutavel, ou seja, ao concatenar um objeto do tipo String, e alocado na memoria mais uma nova intancia de String, e a variavel deixa de apontar para o valor antigo e aponta para o novo valor, mantendo o valor antigo alocado na memoria. O Garbage collector recolhe o lixo, mas nao e garantido quando, isso pode saturar a memoria, pois a cada loop, o tamanho necessario a ser alocado, aumenta, trazendo tambem lentidao ao processamento com essa brincadeira de alocar espacos na memoria.Para resolver este problema, criaram as classes StringBuilder e StringBuffer. Basicamente elas sao Strings mutaveis. Ao inves de substituir ou concatenar o valor da variavel, com o StringBuilder, simplesmente e chamado o metido .append(String) para concatenar um valor a variavel. Foi colocado no projeto destas classes, metodos responsaveis pela alteracao