[
https://issues.apache.org/jira/browse/IGNITE-9638?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16632062#comment-16632062
]
Pavel Tupitsyn commented on IGNITE-9638:
----------------------------------------
This is caused by {{AttachCurrentThread}} JNI call without matching
{{DetachCurrentThread}}.
Detaching JVM thread on every call will severely degrade the performance.
We have a number of options:
* Provide a user-facing API to manually detach the thread (really ugly from
user perspective)
* Use platform-specific ways to detect thread exit (DLL_THREAD_DETACH on
Windows, pthread_key_create on Linux) - this will likely require compiling
unmanaged DLLs for every platform (ugly from our perspective, less
cross-platform)
* Find a way to detach a thread that has exited: this way we can rely on GC,
ThreadLocals and finalizers to detect a thread exit
> .NET: JVM keeps track of CLR Threads, even when they are finished
> ------------------------------------------------------------------
>
> Key: IGNITE-9638
> URL: https://issues.apache.org/jira/browse/IGNITE-9638
> Project: Ignite
> Issue Type: Bug
> Components: platforms
> Affects Versions: 2.6
> Reporter: Ilya Kasnacheev
> Assignee: Pavel Tupitsyn
> Priority: Major
> Labels: .NET
> Fix For: 2.8
>
> Attachments: IgniteRepro.zip
>
>
> When you create a Thread in C#, JVM creates corresponding thread
> "Thread-NNNN" which is visible in jstack. When C# joins this thread, it is
> not removed from JVM and is kept around. This means that jstack may show
> thousands of threads which are not there. Reproducer is attached. It is
> presumed that memory will be exhausted eventually.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)