Java: Alternative to String.intern() for canonical representation

Si has usado el metodo String.intern() (en versiones anteriores a Java 7) seguro que te suena el “java.lang.OutOfMemoryError: PermGen space” [1]

Una pequeña alternativa:

import java.util.WeakHashMap;
import java.lang.ref.WeakReference;

public class StringPoolWH {
	private static final WeakHashMap<String,WeakReference> map = new WeakHashMap<String,WeakReference>();

	public static synchronized String getCanonicalVersion(final String str) {
		final WeakReference ref = map.get(str);
		if (ref != null) {
			final String cstr = ref.get();
			if (cstr != null) {
				return cstr;
			}
		}
		map.put(str, new WeakReference(str));
		return str;
	}
}

String.intern() cambió en Java 7 y 8 y ya no se usa el PermGen. Más información en: String.intern() in Java 6, 7 and 8

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: