Oops...intern não é tão bom assim

A um tempo atrás Fábio Marcon Pallini, vulgo dolly da IBm, se propôs a fazer um código que testasse a eficiência de comparação de Strings entre três métodos do Java.
- java.lang.String.intern(void)::String
- java.lang.Object.equals(Object)::boolean
- java.lang.Object.compareTo(Object)::int

O código encontra-se neste link:
http://phpfi.com/331388

Foi usado como arquivo de entrada a bíblia que está em http://www.gutenberg.org/ebooks/10
1.34 Mb .zip

O resultado foi surpreendente:
Texto lido. 392429 palavras carregadas.
Fazendo comparacao com a palavra: God.
Inicio das comparacoes:

.intern() == : 329 milissegundos.

.equals(String) : 15 milissegundos.

.compareTo(String) == 0 : 0 milissegundos

Incrível e triste ao mesmo tempo.
O intern() foi o pior resultado. O James Gosling disse o contrário.
Contudo, eu vejo que esse método joga a String para o pool, e realmente é mais barato comparar referência de memória do que byte a byte da String, contudo, a comparação que ocorre no pool é que deve deixar lento. Talvez, seja isto que ele quis dizer.

Agradecimentos a Fábio Marcon Pallini.

4 comentários:

o grande eubage disse...

Vc é rápido em Caião! ;-)

Eu li seu scrap hj demanhã e como tava a toa msm mandei bala no código. Espero q os resultados não sejam culpa de algum erro de código meu! heehehe

Mas então cara, se viu q estranho, testei com diversas palavras como te disse no email: keep, and, of. Em todas um resultado semelhante, compareTo é o bixo! hauhauha

Caio Bomfim Martins disse...

Também estava a toa, heehehehe, por isso que foi rápido.
Está certo seu código, compareTo é o bixo msm, hahahahha

Unknown disse...

Caioo! Td bem???
Não entendi nadaa... rs! Mas o site é bonitinhoo! Rs!
Boa sorte sempree e felicidade!
bjaoo

Caio Bomfim Martins disse...

Obrigado Camila!!

Ratings:

Avaliação deste artigo

Copyright © Programming @ home