9
votes

Allocation de tas spécifique au fil

est-il possible de créer un sous-ensemble de threads (par exemple de threadpool spécifique) allouer de la mémoire de son propre tas? Par exemple. La plupart des threads allouent à partir d'un tas de partage régulier et peu de threads de travailleurs attribuent des tas individuels (1: 1 par fil).

L'intention consiste à assurer une exécution sûre du code dans l'environnement partagé - le travailleur typique est apatride et fonctionne sur un thread séparé, le traitement d'une demande ne doit pas consommer plus de 4 Mo de tas.

Mise à jour # 1 RE: Mais pourquoi êtes-vous inquiet de "l'exécution sûre" et de l'augmentation imprévisible de la consommation de tas?

Le point concerne l'hébergement sécurisé du code Java tiers arbitraire dans mon processus. Une fois des points, il s'agit de ne pas obtenir de "mémoire de mémoire" pour tout mon processus en raison de bugs dans le code tiers.

mise à jour # 2 re: à la limitation de la mémoire d'utilisation par fil, en Java, la langue est impossible

Selon mon enquête avant d'avoir posté cette question, mon opinion est la même chose, j'espère que je manque quelque chose.

Les seules solutions alternatives possibles pour mon cas d'utilisation, car je vois maintenant sont ...

1) Combien de mémoire mon fil Java prend-il? - Utilisation de la mémoire de thread de piste dans certains fils du gouverneur et terminer les mauvais threads

2) Exécuter le code Java sur mon propre JVM - Oui c'est possible. Vous pouvez télécharger une implémentation JVM Open Source, la modifier ... :)


2 commentaires

Non, toute l'idée derrière les threads doit être aussi légère que possible, alors ils partagent le même tas; Cela rendrait également la synchronisation plus difficile s'ils le permettaient. Mais pourquoi êtes-vous inquiet de la "exécution sûre" et de la consommation imprévisible de la consommation de tas?


Les implémentations de JVM typiques utilisent des tampons d'allocation locaux de thread (TLAB), où chaque thread a sa propre zone pour faire de petites allocations sans trop de surcharge de sécurité. Cela ne traite pas de disponibilité cependant. RTSJ a quelques trucs relatifs aux fils et aux tas, mais c'est à propos de la latence.


3 Réponses :


2
votes

non. Il n'y a pas de concept de cela dans Java. Il y a un "tas" que nouveau alloue de. L'allocation Java est la sécurité du thread. Et pourquoi pensez-vous que faire plus de tas causerait que les fils consomment moins de mémoire?

Si vous souhaitez contrôler l'utilisation de la mémoire dans un fil, n'acitez pas les choses.

Vous pouvez, en théorie, créer des piscines d'objets réutilisables dans un but comme celui-ci, mais la performance serait certainement pire que l'alternative évidente.


0 commentaires

5
votes

Check out Allocation de mémoire NONBLOCKING Java - Les threads sont généralement alloués à partir de leurs propres blocs d'allocation déjà. Donc, si la vitesse est préoccupante, Sun vous l'a fait pour vous.

à la limitation de la mémoire d'utilisation par fil, en Java, la langue est impossible. Que ce soit possible (ou a du sens) dans JVM et Java, la plate-forme est une question intéressante. Vous pouvez bien sûr le faire de la même manière que tout profileur de mémoire , mais je crains que le système de gestion dépasse la demande elle-même bientôt.


0 commentaires

2
votes

threads par design Partagez tout le tas et d'autres régions de la mémoire. Seule la pile est vraiment à fil local et cet espace peut être limité.

Si vous avez des tâches que vous souhaitez exécuter dans leur propre mémoire et / ou peut être arrêtée, vous devez les exécuter comme un processus séparé.


0 commentaires