【问题标题】:how much memory a thread takes in java [closed]一个线程在java中占用多少内存[关闭]
【发布时间】:2012-06-17 03:38:06
【问题描述】:

一个普通线程在java中占用多少内存。假设没有与之关联的对象。

【问题讨论】:

  • 一个好的分析器可以帮助解决这个问题。

标签: java multithreading memory


【解决方案1】:

Java 应用程序中的每个线程都有自己的堆栈。堆栈用于保存返回地址、函数/方法调用参数等。默认堆栈大小为 512KB。你可以通过-Xssjvm命令来改变。

java  -Xss128k

【讨论】:

    【解决方案2】:

    为线程堆栈分配的内存量特定于您的 JVM 版本 + 操作系统。它配置了 -XX:ThreadStackSize 选项(旧版本上的 -Xss。)有趣的是 512KB 是“正常的”,尽管它在 64 位 linux 上是 1024,这可能是它最常见的关键平台(无论如何都是一个人的意见)

    【讨论】:

    • 正如你所说,它是 ThreadStackSize,默认为 512KB(对于 32 位),此内存是在创建时保留用于执行,还是在方法调用嵌套时动态消耗?
    • 保留。这意味着多少也取决于平台,但从根本上说,如果操作系统不能保证它能够提供内存,那么在创建线程时就会发生 OOM 异常。 (能够提供内存当然可能包括强制应用程序数据进入交换空间。)这与底层malloc操作的契约有关。当然,这也都假设现代 JVM 具有本地绑定线程。解释器中发生的事情是 JVM 的事情。
    • 还要记住 linux 有一个独立于内存限制的用户线程上限。 Java 的“内存不足:无法创建本机线程”。不一定表示问题实际上是缺少物理 RAM。
    • Java 在创建堆和线程时为堆、线程堆栈等保留最大虚拟内存大小。实际内存在使用时分配。在 32 位应用程序中,虚拟内存可以很快用完,因为在某些操作系统上它可以小至 1.5 GB。在 64 位应用程序中,虚拟内存在许多平台上可以是 48 位,您只需要担心实际内存。
    猜你喜欢
    • 2012-02-13
    • 2023-04-03
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 2018-05-16
    • 1970-01-01
    • 2015-05-22
    相关资源
    最近更新 更多