有没有办法在Java中为每个线程设置最大内存使用限制?

当我们在Java程序中启动线程时,有没有办法让我们为每个线程分配内存限制?

我的意思是我们为新的Java进程分配这样的东西:

 /usr/java/default/bin/java -Xms512m -Xmx1024m -jar /opt/abc/MyProcessor/MyProcessor.jar 

有什么方法可以用Java线程做类似的事情吗?

基本上,我的每个线程都要完成一些任务,我希望对每个内存的使用量设置一些最大限制。

有什么方法可以用Java线程做类似的事情吗?

否。进程中的线程通常用于访问进程内的共享主内存(在本例中为JVM)。

基本上,我的每个线程都要完成一些任务,我希望对每个内存的使用量设置一些最大限制。

你这样做:

  • 简单的方法。 生成新的JVM进程,您可以在其中指定每个进程的堆大小。
  • 困难的方式(我不推荐;这是一个可用的选项)。 您可以近似在每个线程中创建的对象的大小,并且如果线程创建的对象的大小超过特定量,则停止进一步执行线程。 这将要求您封装new关键字。 简单来说,所有对象都必须从工厂实例化,这将保留大致内存使用情况的选项卡。 请记住,堆上的对象大小是近似值; Java没有sizeof运算符。 如果需要在堆栈上保留对象的数量,那么使用在启动时传递给JVM的-Xss标志很容易。

要对每个线程设置限制,您需要在单独的进程中运行每个线程。

线程共享内存,因此无法自动为特定线程分配内存。 但是,您可以在代码中自己进行计算(针对每种感兴趣的数据类型)并管理每个线程使用的内存量。

您可以使用-Xss增加线程堆栈大小。 它将适用于每个线程。 堆是共享的,因此您无法单独更改线程。

总之,没有。

没有特定线程“拥有”堆内存的概念。

但是,您可以调整最大堆栈大小(每个线程都有自己的堆栈),但我怀疑这是您所追求的。