È possibile creare un sottoinsieme di thread (ad esempio da ThreadPool specifico) allocare memoria dal proprio heap? Per esempio. la maggior parte dei thread si sta allocando da un normale heap condiviso e pochi thread di lavoro si stanno allocando da singoli heap (1: 1 per thread).Allocazione heap specifica del filetto
L'intento è quello di garantire l'esecuzione sicura del codice in ambiente condiviso - il lavoratore tipico è senza stato ed è in esecuzione su un thread separato, l'elaborazione di una richiesta non dovrebbe consumare più di 4 MB di heap.
Update # 1 Re: Ma perché ti preoccupi "esecuzione sicura" e imprevedibile aumento del consumo mucchio?
Il punto riguarda l'hosting sicuro di codice java di terze parti arbitrario all'interno del mio processo. Una volta i punti è di non ottenere "Memoria insufficiente" per il mio intero processo a causa di bug nel codice di terze parti.
Aggiornamento # 2 Re: Come di limitare l'utilizzo della memoria per thread, in Java il linguaggio è impossibile
Secondo la mia indagine prima che ho postato questa domanda la mia opinione è la stessa, ho spero solo che mi manchi qualcosa.
Le uniche possibili soluzioni alternative per il caso d'uso secondo me adesso sono ...
1) How much memory does my java thread take? - utilizzo della memoria filo traccia in qualche filo regolatore e terminare cattivi filati
2) Run Java code on my own JVM - Sì, è possibile. È possibile scaricare un'implementazione open source JVM, modificarlo ... :)
No, l'idea dietro ai thread deve essere il più leggera possibile, in modo che condividano lo stesso heap; inoltre renderebbe la sincronizzazione più difficile se consentita.Ma perché sei preoccupato per "esecuzione sicura" e aumento imprevedibile del consumo di heap? – Viruzzo
Le tipiche implementazioni JVM utilizzano i thread TLAB (Thread Local Allocation Buffers), in cui ogni thread ha una propria piccola area per effettuare piccole allocazioni senza troppo sovraccarico di thread-safety. Questo però non affronta la disponibilità. RTSJ ha alcune cose relative a thread e heap, ma si tratta di latenza. –