最近在開發系統遇到了一個奇怪的問題,明明都已經把heap space 都調到1024Mb了,怎麼還是會OutOfMemory呢? 仔細看原因居然是unable to create new native thread ,這到底該如何解決呢?
參考一下資料:
How to fix "java.lang.OutOfMemoryError: unable to create new native thread"
This formula gives a decent estimate for the number of threads you can create:
(MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads
For Java 1.5 I get the following results assuming that the OS reserves about 120MB:
1.5GB allocated to JVM: (2GB-1.5Gb-120MB)/(1MB) = ~380 threads
1.0GB allocated to JVM: (2GB-1.0Gb-120MB)/(1MB) = ~880 threads
Java 1.4 uses 256kb for the thread stack which lets you create a lot more threads:
1.5GB allocated to JVM: ~1520 threads
1.0GB allocated to JVM: ~3520 threads
Java Virtual Machine (JVM) - Re: java.lang.OutOfMemoryError: unable to create new native thread
Java Performance Part III - When 4294967296 bytes of address space isn't enough
這篇提到怎樣的heap size 可以產生多少的Thread,參考[Thread Stack Size]
JDK1.4
-Xmx750 = 4580 threads.
-Xmx1000 = 3608 threads.
-Xmx1500M = 1663 threads
JDK1.5
-Xmx750M = 1129 threads
-Xmx1000M = 880 threads
-Xmx1500M = 384 threads
也就是你Heap Space 調得越大,所可以用到的thread 數量就越少?
用來監控沒有啟動的Thread的方法
However, you can put a logic in your application to watch the number of unstarted threads. If this number is growing, you know that somewhere in your application threads are created without the start() calls. Here is the code to calculate the number of unstarted threads:
ThreadGroup g = Thread.currentThread().getThreadGroup();
while (g.getParent()!=null) g = g.getParent();
Thread[] l = new Thread[g.activeCount()]];
int unstartedThreadCount = g.activeCount() - g.enumerate(l,true):
看好電動車市場潛力,以及歐巴馬政府,擬將美國打造成電動車電池王國的政策,經濟部規畫11月領軍出訪美國,洽談台、美動力鋰電池廠商合作機會,可望為長園(8038)、能元(3127)、台達電(2308)等動力鋰電池廠啟動合作商機。
在各國政府力推下,全球近期掀起發展電動車和動力鋰電池熱潮,國內廠商看好這股替代能源發展趨勢,亦紛紛投入發展,包括台塑(1301)轉投資的長園科技、宏碁(2353)轉投資的宏瀨(3616)、台泥(1101)轉投資的能元,以及積極布局綠能產業的台達電等。
由於美國決定推動電動車產業後,能源部計畫動用24億美元、折合新台幣逾770億元,打造動力鋰電池生產大國,美國亦有不少廠商紛紛投入動力鋰電池供應鏈,包含即將IPO的A123系統等。A123的股東有通用汽車、陶氏化學及奇異公司(GE)。
而我國則以兩輪的電動機車為重點,計畫在四年內補助16.58 億元,推動可抽換式鋰電池的電動機車,內銷16萬輛及外銷3.65萬輛;其中,動力鋰電池仍處於關鑑技術地位。
看好電動車輛未來發展前景,以及台、美兩地的動力鋰電池產業均處於萌芽期,雙方具備合作空間,經濟部已規畫在11 月帶團出訪美國,拜會當地動力鋰電池廠和研究機構,並預定邀請國內的鋰電池廠隨行,建立雙方合作機會。
目前鋰電池產業應用,仍以PC和手機市場為主,市占率最高的國家是日本,但市占率正逐步衰退,由高峰時期的九成以上,下滑至現行的六成左右;其次為南韓和大陸,約各占二成;我國僅3%到5%。
因日本擁有自有車廠品牌,且全力發展鋰電池產業,加上我國的高功率和高安全鋰電池和材料,均已具備一定基礎,經濟部認為,與美國合作的空間相對高,應能互蒙其利。
近期動力鋰電池受到各界關注,即將以「AONE」代號在那斯達克(Nasdaq)市場掛牌的A123,亦帶動IPO熱況,以8.5至9美元的價格區間計算,預計將募集2.1到2.2億美元的資金。