特定于线程的堆分配

Xtr*_*der 8 java heap heap-memory

是否有可能使一些线程子集(例如来自特定的ThreadPool)从自己的堆中分配内存?例如,大多数线程都是从常规共享堆分配的,很少有工作线程从各个堆分配(每个线程1:1).

目的是确保在共享环境中安全执行代码 - 典型的worker是无状态的并且在单独的线程上运行,处理一个请求不应该消耗超过4MB的堆.

更新#1 Re:但是为什么你担心"安全执行"和不可预测的堆消耗增加?

关键是在我的进程中安全托管任意第三方java代码.由于第三方代码中存在错误,因此我的整个过程不会得到"内存不足".

更新#2 Re:从限制每个线程的内存使用量来看,用Java语言来说这是不可能的

根据我的调查,在我发布这个问题之前,我的看法是一样的,我只是希望我错过了一些东西.

我现在看到的唯一可能的用例替代解决方案是......

1)我的java线程需要多少内存? - 跟踪某些调控器线程中的线程内存使用情况并终止坏线程

2)在我自己的JVM上运行Java代码 - 是的,这是可能的.你可以下载一个JVM开源实现,修改它...... :)

alf*_*alf 5

查看Java非阻塞内存分配 -线程通常已经从它们自己的分配块中分配了内存。因此,如果您担心速度,Sun会为您完成。

至于限制每个线程的内存使用情况,在Java语言中这是不可能的。该平台在JVM和Java中是否可能(或有意义)是一个有趣的问题。您当然可以像任何内存分析器一样执行此操作,但是恐怕管理系统很快就会淘汰应用程序本身。


bma*_*ies 2

不,Java 中没有这个概念。有一个“堆”new从中分配。Java 分配是线程安全的。为什么您认为创建更多堆会导致线程消耗更少的内存?

如果你想控制线程中的内存使用,就不要分配东西。

理论上,您可以出于这样的目的创建可重用对象池,但性能几乎肯定会比明显的替代方案更差。