Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
FAQ How can I ensure that my model is scalable?
Because eScript programs are assumed to be small, we did not put too much care
into the optimization of the memory usage of our DOM. However, for
languages in which programs tend to get much larger, such as C, Pascal, or
C#, the definition of each individual field has to be carefully weighed.
To represent <windows.h>, the number of DOM elements easily runs
into hundreds of thousands or even millions.
When writing a model that needs to scale to large systems, you must pay careful
attention to the memory your model uses. Traditional
performance optimization techniques apply here, but lazy loading and
most recently used (MRU) caching are particularly effective. The JDT’s Java model,
for example, is populated lazily as the elements are accessed. Java element handles
do not exist in memory at any one time for every Java project in your workspace.
Most Java elements implement the Openable interface, indicating that they
are lazily populated when you invoke methods on them that require access to
underlying structures. Although all Openable elements can be explicitly
closed when no longer needed, the model automatically closes the MRU
elements by storing references to all open elements in a
least recently used (LRU) cache. The abstraction layer of thin Java element handles allows expensive data
structures to be flushed even if clients maintain references to those Java elements
indefinitely. Abstract syntax trees are also generated lazily as they are needed
and are quickly discarded when no longer referenced.
Although some of these performance enhancements can be added retroactively to
your model implementation, it is important to think about scalability right from the start.
Performance aspects of your model and of the tools built on top
of it, need to be considered early in architectural planning. In particular,
an architecture that does not let clients of your API maintain references to
large internal data structures is essential to the scalability of your model.
See Also:
FAQ Language integration phase 3: How do I edit programs?
FAQ How do I create Java elements?
This FAQ was originally published in Official Eclipse 3.0 FAQs. Copyright 2004, Pearson Education, Inc. All rights reserved. This text is made available here under the terms of the Eclipse Public License v1.0.