有没有一种方法可以对Java中的每个线程设置最大内存使用限制?
当我们在有没有一种方法可以对Java中的每个线程设置最大内存使用限制?,java,multithreading,memory,Java,Multithreading,Memory,当我们在Java程序中启动线程时,有没有办法为每个线程分配内存限制 我的意思是,我们为一个新的Java进程分配如下内容: /usr/java/default/bin/java -Xms512m -Xmx1024m -jar /opt/abc/MyProcessor/MyProcessor.jar 我们可以用Java线程做类似的事情吗 基本上,我的每个线程都将执行一些任务,我希望对每个线程的内存使用量设置一些最大限制。要对每个线程设置限制,您需要在单独的进程中运行每个线程 线程共享内存,因此无法
Java
程序中启动线程时,有没有办法为每个线程分配内存限制
我的意思是,我们为一个新的Java
进程分配如下内容:
/usr/java/default/bin/java -Xms512m -Xmx1024m -jar /opt/abc/MyProcessor/MyProcessor.jar
我们可以用Java线程做类似的事情吗
基本上,我的每个线程都将执行一些任务,我希望对每个线程的内存使用量设置一些最大限制。要对每个线程设置限制,您需要在单独的进程中运行每个线程
线程共享内存,因此无法自动将内存分配给特定线程。但是,您可以自己在代码中进行计算(针对每个感兴趣的数据类型),并管理每个线程使用的内存量。您可以使用
-Xss
增加线程堆栈大小。它将适用于每个线程。堆是共享的,所以您不能单独更改线程的堆。总之,不是
没有堆内存由特定线程“拥有”的概念
但是,您可以调整最大堆栈大小(每个线程都有自己的堆栈),但我怀疑这是您想要的
我们可以用Java线程做类似的事情吗
不可以。进程中的线程通常用于访问进程中的共享主内存(本例中为JVM)
基本上,我的每个线程都将执行一些任务,我希望对每个线程的内存使用量设置一些最大限制
您可以:
- 简单的方法。生成新的JVM进程,您可以在每个进程上指定堆大小
- 艰难的道路(我不推荐;这是一个可用的选项)。您可以估计在每个线程中创建的对象的大小,如果线程创建的对象的大小超过一定数量,则停止线程的进一步执行。这将要求您封装
关键字。简单地说,所有对象都必须从工厂实例化,工厂将记录大致的内存使用情况。请记住,堆上的对象大小是近似值;Java没有new
运算符。如果需要对堆栈上的对象计数,那么使用启动时传递给JVM的sizeof
标志就很容易做到-Xss