6
votes

Comment éviter les problèmes de générationConstructeurAccessor?

Nous avons une application Java qui reçoit des demandes de savon et, après avoir beaucoup de demandes, nous remarquons que le GC empêche le monde de décharger de nombreuses classes de générationConstructoraccessor. C'est un impact important sur la performance.

Est-ce que quelqu'un sait-on éviter cela ou de réduire au moins de manière significative le nombre de classes généraliséesConstructorAccessor Créé?


2 commentaires

Pourquoi cette gcc GCC (GNU Compiler)? Voulez-vous dire la baliser GC (collectionneur de déchets)? Utilisez-vous GCJ (compilateur GNU pour Java)?


Je pense que c'était une faute de frappe, je le change à gc


3 Réponses :


0
votes

de http: // coding.derkeiler.com/archive/java/comp.lang.java.programmer/2006-11/msg00122.html

Ces classes font partie de la Mécanisme de réflexion. Depuis autour Java 1.3 La réflexion a été mis en œuvre en générant des classes à effectuer l'accès. C'est beaucoup plus rapide utiliser, mais prend plus de temps pour créer et Convient à la génération permanente.

La sérialisation les utilise pour lire / écrire champs, exécutions méthodes (ReadObject, WriteObject, ReadObjectNodata, ReadResolve) et appelez le Classe de base non sérialisable constructeur (ce dernier code n'est pas vérifiable).

Il semble qu'ils ne sont utilisés que de manière transitoire pour sérialiser / désérialiser une classe d'objet donnée. Comme l'indique l'article, celles-ci sont probablement tenues à l'aide de Softreferences, alors assurez-vous que votre application dispose de beaucoup de mémoire. Celles-ci seront réclamées moins souvent.

surprenant, il ne semble pas y avoir d'autre solution.


0 commentaires

5
votes

Utilisez l'une des options:

public class a {
  public static void main(String[] args) throws Exception {
    for (int i = 0; i < 20; i++) {
      a.class.getDeclaredConstructor(null).newInstance(null);
    }
  }

  private static int x;
  public a() {
    new Throwable("" + x++).printStackTrace();
  }
}


2 commentaires

En fait, la fixation de nininflation à True entraînera tous les accès à la génération de codes d'octets. Vous voulez définir le seuil à zéro ou moins.


@Raphw Vous avez raison, merci de corriger ma désinformation! J'ai édité le message avec votre suggestion.



2
votes

[...] Nous remarquons que le GC arrête le monde à décharger beaucoup de Génération des classesConstricesConstricesConstricesConstrices. C'est une grande performance impact.

Comme il est impossible d'éviter si votre application utilise la réflexion, vous pouvez essayer d'utiliser Collecteur de déchets CMS pour minimiser l'impact du gc d'arrêt-le-monde.


0 commentaires