Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Est-ce Qu'un PropertyChangeListener Bien Implémenté Empêche Le Garbage Collector De Fonctionner

DZone's Guide to

Est-ce Qu'un PropertyChangeListener Bien Implémenté Empêche Le Garbage Collector De Fonctionner

·
Free Resource
Question bête, hein.
Mais comme je m'apprête à jouer massivement avec des PropertyChangeListener, j'ai intérêt à avoir une réponse qui tienne la route.

Donc voilà un petit test parfait pour vérifier ça :

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;


public class TestPropertyChangeListenerMemory {

	private static class PropertyChangeSender {
		protected final transient PropertyChangeSupport support = new PropertyChangeSupport(
				this);
		private long index;

		/**
		 * @param listener
		 * @see java.beans.PropertyChangeSupport#addPropertyChangeListener(java.beans.PropertyChangeListener)
		 * @category delegate
		 */
		public void addPropertyChangeListener(PropertyChangeListener listener) {
			support.addPropertyChangeListener(listener);
		}

		public void setIndex(long index) {
			if (this.index != index) {
				long old = this.index;
				this.index = index;
				support.firePropertyChange("index", old, index);
			}
		}
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		PropertyChangeListener listener = new PropertyChangeListener() {
			private long previousValue = 10;
			public void propertyChange(PropertyChangeEvent evt) {
				Long value = (Long) evt.getNewValue();
				if (value > 10 && value / previousValue == 10) {
					System.out.println(value);
					previousValue = value;
				}
			}
			
		};
		long index = 0;
		while (true) {
			PropertyChangeSender sender = new PropertyChangeSender();
			sender.addPropertyChangeListener(listener);
			sender.setIndex(index++);
		}
	}
}


Vous pouvez le lancer avec java -Xms2M -Xmx2M, ça passe sans problème (et j'ai mis ces grosses valeurs uniquement parce que la JVM n'autorise pas moins).
D'ailleurs, la seule chose qui arrête ce bout de code, c'est l'explosion des longs (qui n'arrive certes pas tout de suite :-))
Topics:

Opinions expressed by DZone contributors are their own.

THE DZONE NEWSLETTER

Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

X

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}