Frage

Ich habe einen Kern JAR, die ein gewisse Funktionalität bereitstellt und somit in vielen anderen Anwendungen auch verwendet - Desktop-Anwendungen, Web-Anwendungen usw. Nun ist dieser Kern JAR unterhält einen Objektpool enthält Objekte, die rechenintensiv sind zu erstellen. Der Objektpool ist von fester Größe und damit ich alle Objekte auf einmal erstellen und auf den Pool füllen. Was ich tun möchte, ist, dass, wenn die App meine JAR mit geladen wird, wird das Objekt Pool ohne die Anwendung erstellt über die Details eines solchen Pools zu kennen. Und dass, obwohl die App Ladezeit dauert ein Hit, weil der Pool Bevölkerung, aber sobald die App über dieses Stadium ist, sollte es nicht mehr Leistung getroffen werden später bei der Erstellung solcher schweren Gegenstände.

Gibt es eine Möglichkeit, dies zu erreichen?

War es hilfreich?

Lösung

Der einzige Weg, um so etwas zu tun, außerhalb des Hinzufügens von expliziten Haken in den Client-Anwendungen Ihre Startlogik aufzurufen ist statisch initializers zu Ihren Klassen hinzuzufügen Ihren Pool zu bauen.

Eine statische Initialisierer wird ausgeführt, wenn die Klasse zuerst von der JVM geladen wird (vor jedem Code in der Klasse aufgerufen wird), die nicht ganz deterministisch ist, aber in der Regel, wenn ein Codepfad Referenzierung Ihre Klasse ist erster Treffer.

Ich würde empfehlen, eine Art von Haken in der Startlogik für die Client-Anwendungen bereitstellt aufzuzurufen, auf diese Weise sie genau diese Art der Sache kontrollieren kann, anstatt Ihre Startlogik läuft bei einer unvorhersehbaren Zeit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top