37 votes

Impossible de trouver une implémentation moderne du pool d'objets en Java

Je recherche une implémentation moderne d'un pool d'objets en Java. Je peux voir celui des communes apache, mais pour être honnête, je préférerais celui qui utilise des génériques, ainsi que le contenu relatif à la concurrence d'accès des versions plus récentes de Java.

La piscine commune fonctionne-t-elle vraiment bien? Le code est joli, euh, moche.

J'aurais besoin de quelque chose qui permette une validation personnalisée de la vivacité, etc.

Merci!

18voto

Pascal Thivent Points 295221

Je peux voir l'apache commons un, mais pour être honnête, je préfère un type qui utilise des médicaments génériques, et de la simultanéité des trucs à partir de versions plus récentes de java.

Eh bien, le fait est que ce genre de projets (generic object piscines) ne reçoivent pas beaucoup de traction, car il n'est pas nécessaire pour eux aujourd'hui (la création de l'objet n'est pas cher). C'est probablement ce qui explique pourquoi vous ne voyez pas beaucoup d'entre eux (et en fait, je ne suis au courant de Communes de la Piscine).

Cela étant dit, si les génériques est votre préoccupation principale, vous pouvez patch Communes de la Piscine, voir PISCINE-83, il a un patch ci-joint.

Ne les communes de la piscine fonctionne vraiment bien? Le code semble assez, euh, laid.

Il comporte quelques bugs connus (quatre), mais, à ma connaissance, il fonctionne. Et concernant la dernière phrase, eh bien, si vous pensez que vous pouvez écrire quelque chose de mieux, et si vous avez le temps pour ça, pourquoi ne pas le faire?

J'avais besoin de quelque chose qui permet de personnalisé liveness de validation etc etc.

Vous n'avez pas un nombre infini de possibilités. Soit

  1. Trouver quelque chose qui fait tout ce dont vous avez besoin (je ne sais pas telle bibliothèque, ce qui ne signifie pas qu'il n'y a pas tout).
  2. Si vous ne pouvez pas trouver quelque chose qui ne tout ce que vous avez besoin de la boîte, puis étendre une solution existante.
  3. Rouler votre propre solution.

8voto

emory Points 6319

Communes de la Piscine est un bon candidat pour votre projet.

  1. Les génériques de l'Interface - le problème Le plus évident avec les communes de la piscine est de ses pré-génériques de l'interface. Il y a un certain nombre de façons que vous pouvez obtenir autour de cette. Vous pouvez
    1. faire de la coulée;
    2. mettre en œuvre une interface parallèle qui ne le casting pour vous; ou
    3. utiliser le patch que Pascal identifié
  2. La simultanéité des Trucs plus récentes de java - C'est un détail d'implémentation, vous ne devriez pas s'inquiéter. Si la simultanéité est correct, alors il n'a pas d'importance la façon dont l'exactitude a été atteint. Sinon, une piscine de mise en œuvre qui utilise la plus récente des trucs, mais dont la simultanéité est mauvais, c'est toujours un mauvais candidat.
  3. Laide Code - Vous êtes supposé utiliser, de ne pas l'épouser.
  4. Personnalisé Liveness de Validation - mettre en Œuvre les validateObject pour tester la liveness d'objets. Les objets morts seront détruits. Vous pouvez également mettre en place un Cron task périodiquement emprunter et rendre les objets - forcer l'élimination rapide des objets morts.

7voto

NamshubWriter Points 7238

Il est difficile de faire une recommandation, sans savoir quelles sont les caractéristiques dont vous avez besoin.

Si le nombre d'objets dans la piscine est fixe, vous pouvez utiliser un BlockingQueue comme dans cet exemple de la question visée par @codedevour

Si les valeurs que vous voulez piscine peut être associée à une clé, vous pouvez utiliser Cartographe de Goyave

ConcurrentMap<Key, Connection> connections = new MapMaker()
       .concurrencyLevel(32)
       .softKeys()
       .weakValues()
       .expiration(30, TimeUnit.MINUTES)
       .evictionListener(
           new MapEvictionListener<Key, Connection>() {
             public onEviction(Key key, Connection connection) {
               connection.close();
             } 
           });
       .makeComputingMap(
           new Function<Key, Connection>() {
             public Connection apply(Key key) {
               return createConnection(key);
             }
           });

3voto

Jeremy Unruh Points 409

Commander KBOP. C'est un thread-safe bloquant clé unique à objet unique ou clé unique à pool d'objets multiples. Il est léger et n’ajoute aucune dépendance supplémentaire.

http://www.kbop.org

2voto

codevour Points 3246

Cela semble être lié à votre question, peut-être que vous devriez vraiment envisager d'écrire un pool d'objets par vos propres moyens. Cette base de Java pool d'objet de travail?.

Mise en commun a été initialement présenté comme un tuning d'action pour la lenteur de la création de l'objet et la collecte des déchets en particulier. Sur un JVM > 1.4 mise en commun n'est pas plus nécessaire pour l'optimisation de la gestion de la mémoire dans une entreprise typique de l'application. Elle peut même avoir un effet négatif sur le garbage collector de performance. Dans des cas particuliers, comme la création de millions d'occurrences dans chaque appel de méthode, il pourrait encore payer.

Exemple de mise en commun, cependant, est tout de même intéressant pour les objets avec une lenteur personnalisé "post-construction". Dans certains cas, vous voulez injecter des dépendances après la création de l'objet, de lire quelques-configuration etc. Cela peut être lent et n'a pas à être effectué maintes et maintes fois. Dans de tels cas, l'objet de mise en commun permettra d'améliorer la performance globale.

Adam Bien -- Pool D'Objet Peut Toujours Être Utile Pour Totalement Différentes Raisons

Que pensez-vous de l'amélioration de l'communes de la Piscine Cadre? Faire du refactoring et ajouter la partie générique, ce serait bien pour les autres aussi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X