日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

    歡迎訪問(wèn) 生活随笔!

    生活随笔

    當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

    编程问答

    java 线程数_在虚拟机中是什么限制java线程数量?这方面涉及哪些调优?

    發(fā)布時(shí)間:2024/7/23 编程问答 33 豆豆
    生活随笔 收集整理的這篇文章主要介紹了 java 线程数_在虚拟机中是什么限制java线程数量?这方面涉及哪些调优? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

    首先要說(shuō)明一點(diǎn),Java線程的實(shí)現(xiàn)是基于底層系統(tǒng)的線程機(jī)制來(lái)實(shí)現(xiàn)的,程序中開(kāi)的線程并不全部取決于JVM虛擬機(jī)棧,而是取決于CPU,操作系統(tǒng),其他進(jìn)程,Java的版本。JVM的線程與計(jì)算機(jī)本身性能相關(guān)。

    以前寫過(guò)一個(gè)例子,統(tǒng)計(jì)可以開(kāi)辟的線程數(shù)量,通過(guò)不斷的申請(qǐng)Thread,最終會(huì)報(bào)錯(cuò),輸出一個(gè)當(dāng)前開(kāi)辟線程的數(shù)量:

    public class ThreadCount{

    private static Object obj = new Object();

    private static int count = 0;

    public static void main(String[] args){

    for(;;){

    new Thread(new Runnable(){

    public void run(){

    synchronized(obj){

    count += 1;

    System.out.println("Thread #"+count);

    }

    for(;;){

    try {

    Thread.sleep(1000);

    } catch (Exception e){

    System.err.println(e);

    }

    }

    }

    }).start();

    }

    }

    }

    運(yùn)行結(jié)果上傳圖片有點(diǎn)問(wèn)題,結(jié)果就不貼了,每個(gè)人的機(jī)器,結(jié)果都是不同的,可以運(yùn)行下。

    既然線程數(shù)量于計(jì)算機(jī)本身相關(guān),我們是不是不可調(diào)控,是固定的呢?

    答案顯然不是的,在不考慮系統(tǒng)本身限制的情況下,主要跟JVM一下幾點(diǎn)有關(guān):-Xms 初始堆大小 (在實(shí)際生產(chǎn)中,一般把-Xms和-Xmx設(shè)置成一樣的。)

    -Xmx 最大堆大小

    -Xss 每個(gè)線程棧大小

    結(jié)論1:當(dāng)給JVM的堆內(nèi)存分配的越大,系統(tǒng)可創(chuàng)建的線程數(shù)量就越少(可以通過(guò)上面測(cè)試程序,不斷的改變-Xmx,-Xms的值,觀看最后異常時(shí)的線程數(shù)量)。這個(gè)如何理解呢?很簡(jiǎn)單,因?yàn)榫€程占用的是系統(tǒng)空間,所以當(dāng)JVM的堆內(nèi)存越大,系統(tǒng)本身的內(nèi)存就越少,自然可生成的線程數(shù)量就越少。

    結(jié)論2:當(dāng)-Xss的的值越小,可生成的線程數(shù)量就越多。(一樣可以通過(guò)上面測(cè)試,保持-Xmx,-Xms不變,改變-Xss的值,jdk5以下默認(rèn)好像是256K,以上默認(rèn)為1M,具體記不太清楚了)。這個(gè)理解也很簡(jiǎn)單,線程可用空間保持不變,每個(gè)線程占用的棧內(nèi)存大小變小,自然可生成的線程數(shù)量就越多。

    那么是不是不斷加大可用內(nèi)存,線程數(shù)量也會(huì)不斷增長(zhǎng)呢?

    這個(gè)當(dāng)然不是,上面我特意加粗了不考慮系統(tǒng)本省限制的情況,所以說(shuō)線程數(shù)量還與系統(tǒng)限制有關(guān)。主要跟一下幾個(gè)參數(shù)有關(guān)(Linux下的):/proc/sys/kernel/pid_max 增大,線程數(shù)量增大,pid_max有最高值,超過(guò)之后不再改變,而且32,64位也不一樣

    /proc/sys/kernel/thread-max 系統(tǒng)可以生成最大線程數(shù)量

    max_user_process(ulimit -u)centos系統(tǒng)上才有,沒(méi)有具體研究

    /proc/sys/vm/max_map_count 增大,數(shù)量增多

    總結(jié):線程最大數(shù)量由JVM的堆(-Xmx,-Xms)大小、Thread的棧(-Xss)內(nèi)存大小、系統(tǒng)最大可創(chuàng)建的線程數(shù)的限制參數(shù)三個(gè)方面影響。不考慮系統(tǒng)限制,可以通過(guò)這個(gè)公式估算:

    線程數(shù)量 = (機(jī)器本身可用內(nèi)存 - JVM分配的堆內(nèi)存) / Xss的值。

    以上均為個(gè)人觀點(diǎn),有錯(cuò)誤的還請(qǐng)指正,請(qǐng)勿噴,和諧,和諧。

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的java 线程数_在虚拟机中是什么限制java线程数量?这方面涉及哪些调优?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。