有没有办法在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
增加线程堆栈大小。 它将适用于每个线程。 堆是共享的,因此您无法单独更改线程。
总之,没有。
没有特定线程“拥有”堆内存的概念。
但是,您可以调整最大堆栈大小(每个线程都有自己的堆栈),但我怀疑这是您所追求的。