第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

java.lang.OutOfMemoryError: unable to create new

java.lang.OutOfMemoryError: unable to create new

蝴蝶刀刀 2019-03-19 17:15:27
程序總是在兩三天就報(bào)一次內(nèi)存泄漏的異常,不知道是什么原因引起的,因?yàn)轫?xiàng)目中有一個(gè)地方?jīng)_到隊(duì)列,在隊(duì)列中創(chuàng)建了很多的線程不知道是不是這個(gè)引起了。。。public class GlobalVariables {    public static ExecutorService pool = Executors.newFixedThreadPool(1000);    public static BlockingQueue<Object> queue = new ArrayBlockingQueue<Object>(1000);    public static Map<Integer, Integer> map = new HashMap<Integer, Integer>();    }public class AddQueues implements Runnable{    private Object obj;        public AddQueues(Object obj) {        this.obj = obj;    }    @Override    public void run() {        try {            System.out.println("-------------"+obj);            GlobalVariables.queue.put(obj);        } catch (InterruptedException e) {            e.printStackTrace();        }    }}@Overridepublic Map<String, Object> updateQueuePool(Map<String, Object> map) throws Exception {        EntranceVisitCountDTO dto = new EntranceVisitCountDTO();        dto.setAdminUserId(Integer.parseInt(map.get("adminUserId").toString()));        GlobalVariables.pool.submit(new AddQueues(dto));        Map<String,Object> param = new HashMap<String,Object>();        param.put("result", "yes");                return param;    }/*** 定時(shí)將隊(duì)列里的數(shù)據(jù)放到map中*/@Scheduled(cron = "0/3 * * * * ?")public synchronized void updateVisitCountOfMap(){    try{        if(!GlobalVariables.queue.isEmpty()){                    for(int i = 0; i < 100; i++){                Object obj = GlobalVariables.queue.take();                if(obj instanceof EntranceVisitCountDTO){                    EntranceVisitCountDTO dto = (EntranceVisitCountDTO)obj;                    Integer visitCount = GlobalVariables.map.get(dto.getAdminUserId());                    if(visitCount != null && GlobalVariables.map.size() <= 1000){                        GlobalVariables.map.put(dto.getAdminUserId(), visitCount +1);                    }else if(GlobalVariables.map.size() > 1000){                        visitDayCountService.updateEntranceShowCount();
查看完整描述

3 回答

?
縹緲止盈

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊

  1. 這段代碼的入口應(yīng)該是updateQueuePool方法,這個(gè)方法會生成DTO,然后創(chuàng)建新的job來吧DTO放到queue里面去,而這個(gè)queue的消費(fèi)者是在updateVisitCountOfMap,這個(gè)方法每3秒鐘消費(fèi)100個(gè)DTO,如果調(diào)用updateQueuePooll方法的頻率大于消費(fèi)的頻率的話,OOM是早晚的事情

  2. GlobalVariables.map也是類似的問題,每3秒放入最多100個(gè)對象,但是每10分鐘消費(fèi)。

  3. GlobalVariables的幾個(gè)字段都是公開的,意味著任何代碼都可以直接使用,這個(gè)也是個(gè)可能導(dǎo)致問題的因素。

  4. 如果內(nèi)存有泄露,調(diào)用System.gc沒任何幫助。

這段代碼問題挺多的,不過不是完整代碼,所以也不能確定哪個(gè)地方會有內(nèi)存泄露,你最好讓代碼運(yùn)行一段時(shí)間,然后用jmap dump下jvm,然后用virtual vm來查看該dump文件,看看到底是queue引用的對象還是map里面的對象沒有被回收導(dǎo)致的。


查看完整回答
反對 回復(fù) 2019-04-18
?
天涯盡頭無女友

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊

unable to create new native thread'
很少有這種OOM,一定是代碼那里不斷的new Thread()造成的。
改成線程池吧。

查看完整回答
反對 回復(fù) 2019-04-18
?
Qyouu

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊

你設(shè)置的線程池大小是1000個(gè),沒必要建這么多吧,可以先看下主機(jī)是幾核幾線程,建議調(diào)低一點(diǎn)。另外jvm中的xxs分配多大,這個(gè)是影響你在jvm中能開多少線程的。在核查xmx的大小。


查看完整回答
反對 回復(fù) 2019-04-18
  • 3 回答
  • 0 關(guān)注
  • 661 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號