Ich habe kürzlich über Szenarien erfahren, die das Aufwärmen einer App erfordern (mit hohem Durchsatz), bevor sie damit beginnen, echte Anfragen zu bedienen. Die Logik dahinter war es, JIT zu erlauben, seine Leistungszauberei zu machen!
Ist das eine Norm für Java-Apps oder wird dies in der Regel für speicherintensive (Footprint-) Apps gemacht?
Wenn Sie von einer Webapplikation / Website mit hohem Traffic sprechen, ist JIT ein sehr kleines Problem. Das größte Problem ist das Aufwärmen (Auffüllen) aller Cache-Ebenen, die Sie benötigen. ZB ehcache-Regionen, die vom Hibernate
Die Frage ist, wann möchten Sie aus diesem Weg gehen dies tun?
Wenn Sie eine Webanwendung bereitstellen, und diese SOFORT live ist, fügen Sie, während Sie sie "aufwärmen", zusätzliche Last hinzu, was kontraproduktiv ist. Ähnliches gilt, wenn eine Desktop-App gestartet wird. Kein Punkt beim Aufwärmen, wenn der Benutzer sofort damit beginnt. Oder schlimmer noch, es dem Benutzer nicht zu erlauben, während des Aufwärmens der App zu interagieren.
Wenn Sie eine Webanwendung bereitstellen und die Bereitstellung testen, bevor Sie Ihre Load Balancer darauf ausgerichtet haben, haben Sie diese bereits als Nebeneffekt aufgewärmt.
Zusätzlich zu cherouvims Antwort kann ich nachdenken von einigen anderen Problemen, die Aufwärmen erfordern:
Xms
kleiner ist als Ihr Xmx
). Ich stelle mir vor, dass sich das Betriebssystem auch auf das Verhalten einer Anwendung einstellt, so dass OS-Aufrufe auch von einer Aufwärmphase betroffen sein können.
Die meisten der oben genannten Punkte (Cache-Population, Objektinitialisierung) sind nicht spezifisch für Java.
Tags und Links java performance jit jvm throughput