当前位置: 首页 > 面试题库 >

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

伯彦君
2023-03-14
问题内容

当我们在Java程序中启动线程时,是否有任何方法可以为每个线程分配内存限制?

我的意思是我们为新Java流程分配了以下内容:

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

我们可以用Java线程做任何类似的事情吗?

基本上,我的每个线程都将执行某项任务,我希望对每个线程的内存使用量设置一些最大限制。


问题答案:

我们可以用Java线程做任何类似的事情吗?

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

基本上,我的每个线程都将执行某项任务,我希望对每个线程的内存使用量设置一些最大限制。

您可以执行以下任一操作:

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


 类似资料:
  • 我们正在运行weblogic,似乎有内存泄漏-我们最终用完了堆空间。 我们在服务器上有5个应用程序(5个war部署)。 您能想到一种方法来收集每个应用程序的内存使用情况吗? (然后我们可以通过查看相应应用程序中的代码来集中搜索。) 我已经运行jmap来获取堆转储并在jvisualvm中加载结果,但不清楚大部分对象来自何处——例如字符串。 我在想,weblogic可能会在每个应用程序中使用单独的类加

  • 问题内容: 您可以在32位Windows上为Java进程分配的最大堆大小是多少? 我问是因为我想在OpenMap中使用ETOPO1数据,而原始二进制浮点文件大约为910 MB。 问题答案: 回答您的问题,没有什么比经验实验更好。我编写了一个Java程序并在指定XMX标志的同时运行它(还使用XMS = XMX来强制JVM预分配所有内存)。为了进一步防止JVM优化,我积极分配了X个10MB的对象。我在

  • 每次运行程序时,我都会调整,以查看它的效果。 然后,我将作业(的实例)提交到池。每一个都增加一个,做一些工作(创建一个随机整数数组并对其进行洗牌),然后Hibernate一段时间。其思想是模拟一个web服务调用。最后,作业将自己重新提交到池中,这样我总是有作业在工作。 我正在测量吞吐量,例如每分钟处理的作业数。 现在的问题是:我得到了一个,作业超过了31,000个。我尝试过设置,但这没有帮助。我尝

  • Spring HATEOAS提供了方便的ControllerLinkBuilder来创建指向控制器方法的链接,这些方法将作为HREF添加到返回给客户端的JSON/XML中。例如: ... 可能会生成类似以下内容的JSON: 然而... 我倾向于通过反向代理访问我的服务。我想大多数人可能会这样做。这让我可以在不同的端口上运行多个服务,但让我可以通过相同的基本URL访问它们。不幸的是,通过代理访问意味

  • LibGDX使用LWJGL作为后端,因此LwjglApplication Configuration用于设置窗口的属性(例如可调整大小、宽度、高度等)---但似乎没有任何设置能够设置窗口在屏幕上的位置。 我的游戏以1280x720分辨率运行。我的笔记本电脑的分辨率是1366x768。当我运行游戏时,游戏窗口的一小部分隐藏在屏幕底部,看不见。通过向上拖动窗口可以很容易地解决这个问题,但如果不需要拖动

  • 问题内容: 我可以看到文档说我们可以在文档上设置,但不能在索引/索引上设置。还想知道如果我们设置它是否对性能有影响。 问题答案: 已为每个索引启用,但有效期为每个文档。 如果您希望索引“过期”,请删除它们。更简单,更高效。 是的,对性能有影响。Elasticsearch处理“过期”数据的“方式”是创建基于时间的索引。意思是,您每天或每周都会创建一个索引。在该索引中索引属于该日/周的所有内容。您决定