Fuite mémoire dans java.text.DecimalFormat de GnuClasspath

Aujourd’hui, un collègue me montre du code qui utilise java.text.DecimalFormat de GnuClasspath, la JCL du projet GNU, et qui plante avec une java.lang.OutOfMemoryError.

L’objectif est de formater un double suivant un nombre de décimal, ce que fait très bien la classe java.text.DecimalFormat.

Voici la stacktrace complète de mon code de test :

Exception in thread "main" java.lang.OutOfMemoryError
at java.util.ArrayList.ensureCapacity(ArrayList.java:176)
at java.util.ArrayList.add(ArrayList.java:340)
at java.text.DecimalFormat.addAttribute(DecimalFormat.java:2236)
at java.text.DecimalFormat.handleFractionalPart(DecimalFormat.java:2074)
at java.text.DecimalFormat.formatInternal(DecimalFormat.java:1942)
at java.text.DecimalFormat.format(DecimalFormat.java:387)
at java.text.NumberFormat.format(NumberFormat.java:818)
at trash.MyTrash.testNewDecimal(MyTrash.java:34)
at trash.MyTrash.(MyTrash.java:18)
at trash.MyTrash.main(MyTrash.java:8)

Commençons les investigations de java.text.DecimalFormat.

(Lire la suite…)

Conversion d’un entier vers une chaîne de caractères

Au cours d’une relecture de code, je tombe sur cette ligne :

int myInt = 1979;
byte[] foo = ("" + myInt).getBytes();

L’objectif de ce code étant de récupérer un tableau de byte d’un entier en passant par une chaîne de caractères et ça fonctionne ! Mais cela est-il performant ?
(Lire la suite…)