> This application is a real time radar display showing an animated
> sequence of data. For example, a 3 hr data loop in 10 minute steps. In
> addition, the display updates every 10 minutes to include the latest
> available data and removes any out-of-date data.
> There appears to be a possible memory leak in this application. An
> earlier mail from James Kelly “Memory leak in Radar App” covered some of
> this. The replies were very useful. And we managed to improve the
> performance by implementing the FieldImpl.setSample(false) suggestion.
> However, this application can still eventually run out of memory.
> >From running various scenarios I may have narrowed it down to the
> animation process. It was observed that if the application was not
> looping, i.e, playing, the memory usage would become stable and the
> application ran for many days. However, with play enabled, the
> application would run out of memory in a few hours or overnight.
You observe stable memory usage when the application is
not looping. Are the periodic calls to:
occurring when you observe stable memory usage?
If they are occurring when memory usage is stable, that
isolates looping as the cause of the meory leak, and
will significantly narrow the search for a cause.
We have long suspected Java3D memory leaks, and indeed
some are known to exist. But it is hard to be certain
that there is no leak in VisAD.
> Before getting down to the specific details, I would like to ask if
> anyone has observed something like this elsewhere? Or knows straight off
> if it could be a java3d, VisAD, thread or implementation problem?
> If still interested, read-on:
> This application utilises the VisAD library. In particular,
> AnimationControl, java3d.AnimationControlJ3D, DataReference, Field,
> java3d.DisplayImplJ3D, java3d.DisplayRendererJ3D
> We have a class called AnimationManager.java that manages the animation,
> i.e, creates and controls the animation tool bar [backstep, play, stop,
> forwardstep, slider and combo box].
> When the animation needs to be updated it uses (among other things):
> where the newSet [Gridded1DDoubleSet] is obtained by iteration over a
> Vector of DataReferences and extracting the domain set from each Field
> to build a new set of dates. [ Data data = dataReference.getData();
> Field field = (Field)data; ]
> The data of each DataReference is created and updated by another class
> (1 instance per radar). The availability of new data is checked every
> minute and added to the field. If the data has changed, a call to
> DataReference.setData(Field) is made. Every 10 minutes, data older than
> 3 hours is removed; again updating the Field and setData.
> If anyone has any thoughts on the matter and/or needs more information,
> let me know.
> Susan Fisher
> Meteorological Systems Section
> Bureau of Meteorology
> Tel: [+61] 3 9669 4577
> Email: s.fisher@xxxxxxxxxx
> To unsubscribe visad, visit:
To unsubscribe visad, visit: