【JVM】调优笔记1-----堆栈概念的对碰
關(guān)于JVM的工作原理以及調(diào)優(yōu)是一個向往已久的模塊,終于有幸接觸到:http://pengjiaheng.iteye.com/blog/518623
那就順著這個思路,來梳理一下自己看到后的結(jié)論和感想。
?
首先,墊些基礎(chǔ),下面會用到
1.Java基本數(shù)據(jù)類型的長度
| 類型 | 字節(jié) | 表示范圍 | 包裝類 |
| byte(字節(jié)型) | 1 | -128~127 | Byte |
| short(短整型) | 2 | -32768~32767? | Short |
| int(整型) | 4 | -2147483648~2147483647 | Integer |
| long(長整型) | 8 | -9223372036854775808 ~ 9223372036854775807 | Long |
| float(浮點型) | 4 | -3.4E38~3.4E38 | Float |
| double(雙精度型) | 8 | -1.7E308~1.7E308 | Double |
| char(字符型) | 2 | 從字符型對應(yīng)的整型數(shù)來劃分,其表示范圍是0~65535? | Charater |
| booealn(布爾型) | 1 | true或false | Boolean |
2.解釋【位-字節(jié)-字符】概念
關(guān)于編碼方式和一個字符幾個字節(jié)的詳細解釋:http://www.cnblogs.com/God-/p/6006749.html
具體的一個字符是幾個字節(jié),就要看具體的編碼方式了,可以看看上面這個詳細的解釋!
這里只需要清楚,上面基本數(shù)據(jù)類型,例如:short是2個字節(jié)的長度,一個字節(jié)是8bit(位),那2個字節(jié)就是16位,也就是short能表示的數(shù)據(jù)范圍是(2^16)-1次方也就是65536-1的范圍內(nèi),也就是-32768-32767
?
3.java中值傳遞和參數(shù)傳遞的問題
正好之前一段時間有http://www.cnblogs.com/sxdcgaq8080/p/7093462.html
可以作為參考
?
?
接著
談?wù)勚黝},堆與棧的概念(參考:http://pengjiaheng.iteye.com/blog/518623)
1.?棧是運行時的單位,而堆是存儲的單位。
??? 棧解決程序的運行問題,即程序如何執(zhí)行,或者說如何處理數(shù)據(jù);堆解決的是數(shù)據(jù)存儲的問題,即數(shù)據(jù)怎么放、放在哪兒。
??? 在Java中一個線程就會相應(yīng)有一個線程棧與之對應(yīng),這點很容易理解,因為不同的線程執(zhí)行邏輯有所不同,因此需要一個獨立的線程棧。而堆則是所有線程共享的。棧因為是運行單位,因此里面存儲的信息都是跟當前線程(或程序)相關(guān)信息的。包括局部變量、程序運行狀態(tài)、方法返回值等等;而堆只負責存儲對象信息。
?
2.堆中存什么?棧中存什么?
??? 堆中存的是對象。
棧中存的是基本數(shù)據(jù)類型和堆中對象的引用。
一個對象的大小是不可估計的,或者說是可以動態(tài)變化的,但是在棧中,一個對象只對應(yīng)了一個4btye的引用(堆棧分離的好處)。
?
?3.為什么不把基本類型放堆中呢?
上面有基本數(shù)據(jù)類型的大小,占用的空間一般是1~8個字節(jié)——需要空間比較少,而且因為是基本類型,所以不會出現(xiàn)動態(tài)增長的情況——長度固定,因此棧中存儲就夠了
?
?
?
?
?
4.本地方法
這里既然說到了本地方法棧,就簡單了介紹一下本地方法
簡單地講,一個Native Method就是一個java調(diào)用非java代碼的接口。一個Native Method是這樣一個java的方法:該方法的實現(xiàn)由非java語言實現(xiàn),比如C。
具體參考:http://www.cnblogs.com/langtianya/p/3459647.html
?
?
?
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
后話:
堆和棧中,棧是程序運行最根本的東西。程序運行可以沒有堆,但是不能沒有棧。而堆是為棧進行數(shù)據(jù)存儲服務(wù),說白了堆就是一塊共享的內(nèi)存。不過,正是因為堆和棧的分離的思想,才使得Java的垃圾回收成為可能。
Java中,棧的大小通過-Xss來設(shè)置,當棧中存儲數(shù)據(jù)比較多時,需要適當調(diào)大這個值,否則會出現(xiàn)java.lang.StackOverflowError異常。常見的出現(xiàn)這個異常的是無法返回的遞歸,因為此時棧中保存的信息都是方法返回的記錄點。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
主體參考:http://pengjiaheng.iteye.com/blog/518623
?
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的【JVM】调优笔记1-----堆栈概念的对碰的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PC市场连续5年滑坡,但对惠普戴尔来说是
- 下一篇: 大数据导出报错