Ich bin JProfiling meine Anwendung, um hohe CPU zu analysieren Verwendung. Die CPU-Auslastung beträgt zum Zeitpunkt der Benutzeranmeldung 100% ( auf dem Server ). So begann Profiling meine Anwendung.
Die folgenden Abfragezeichenfolgen, die ich in den Heap-Dumps gefunden habe. Nicht nur diese 4 Abfragen, es gibt Hunderte von Abfragen wie diese im Dump.
%Vor%Ich bin gerade im System angemeldet und berühre die Bohnen überhaupt nicht, trotzdem kann ich sie in den Müllhalden sehen.
Irgendwelche Ideen, warum diese Zeichenfolgen im Speicher vorhanden sind?
Oder was bedeutet diese Zeile?
Das ist normal, das sind die vorbereiteten Hibernate-Abfragen, die beim Serverstart erstellt werden.
Nehmen Sie zum Beispiel die Klasse ControlTransaction
. Hibernate weiß bereits, dass wahrscheinlich Abfragen benötigt werden, um Entitäten nach ID auszuwählen, sie zu löschen, usw.
Also erzeugt es vorher eine Reihe von SQL-vorbereiteten Anweisungen, um diese Operationen auszuführen. Die Kommentare am Anfang jeder Abfrage geben an, warum sie generiert wurden.
Zum Beispiel wurde diese Abfrage erzeugt, um eine ControlTransaction per Id zu laden:
%Vor% Abfragen, die mit Kommentaren von one-to-many
oder one-to-one
beginnen, werden zum verzögerten Laden usw. verwendet. Benannte Abfragen in JPQL / HQL werden beim Serverstart auch in eine SQL-Abfrage kompiliert, und der Kommentar gibt an, aus welcher benannten Abfrage der SQL-Abfrage.
Jede Entität führt abhängig von den verwendeten Mapping-Annotationen zu mehreren dieser Abfragen.
Es ist also normal, dass diese Abfragen beim ersten Login des Benutzers im Heap vorhanden sind.
Haben Sie diese Abfragen als @NamedQueries
(oder @NamedQuery
) auf einer Ihrer Entitäten?
Hibernate könnte die benannten Abfragen beim Serverstart in den Cache laden. Sie werden sicherlich beim Start geparst, um die Syntax usw. zu überprüfen.