zoukankan      html  css  js  c++  java
  • java线程占多大的内存,占哪里的内存?

    说到线程,我们往往想到的是线程安全、线程池,很少会去考虑线程的内存。
    那么一个线程占用多大的内存?占用哪里的内存呢?

    占多大的内存?

    jdk1.4默认的单个线程是占用256k的内存
    jdk1.5+默认的单个线程是占用1M的内存
    可以通过-Xss参数设定,一般默认就好

    占哪里的内存?

    这TM还用问?java线程当然是占用jvm的内存啊!(╯‵□′)╯︵┻━┻(手动滑稽)
    好,我们做个实验,用jMeter同时并发调用java里某个接口200次,让java里增加大约190个线程(tomcat会有驻留线程,我这是10个),看下堆内存的情况:

    从图中看到当线程猛增时,堆内存也猛增,然后堆内存会迅速下降,这是因为堆上new了大量的对象,所以猛增,然后线程执行完后,对象被GC了,所以下降。
    上面提到堆内存下降是因为线程执行完了,GC回收了new出来的对象。但从图中看出,堆内存下降后线程数并没有下降,这是为什么呢?
    用过线程池的都知道,线程执行完后并不会立即销毁掉,会有一个保活时间,保活时间过了后才会销毁,so
    我用的是jdk1.8,每个线程占用1M内存,如果是占用的堆内存,那堆内存应该会增加190M左右,但从图中看并没有,所以线程不是占用的堆内存空间。

    实际上,java里每新起一个线程,jvm会向操作系统请求新起一个本地线程,此时操作系统会用空闲的内存空间来分配这个线程。所以java里线程并不会占用
    jvm的内存空间,而是会占用操作系统空闲的内存空间

  • 相关阅读:
    Middleware
    Languages
    Errors
    Config
    CLI Console
    Linux远程复制文件
    CentOS下安装Gitlab
    Maven_POM配置结构
    Maven_POM配置详解
    MySQL索引背后的数据结构及算法原理
  • 原文地址:https://www.cnblogs.com/liuwhut/p/12704198.html
Copyright © 2011-2022 走看看