日韩在线首页I俄罗斯pornI男女猛烈激情XX00高潮动态I超碰免费97I乱人伦99久久I欧美日韩成人一区I最新日韩视频在线观看I粉嫩AV四季AV绯色AVI五月导航

×
新網 > 虛擬主機 > 正文

析 JAVA虛擬機的棧與堆

  • 作者:新網
  • 來源:新網
  • 瀏覽:100
  • 2018-04-25 13:16:16

Java虛擬機中,數據類型可以分為兩類:基本類型和引用類型。基本類型的變量保存原始值,即:他代表的值就是數值本身;而引用類型的變量保存引用值。

 

  10545731.gif
<div>         Java虛擬機中,數據類型可以分為兩類:基本類型和引用類型。基本類型的變量保存原始值,即:他代表的值就是數值本身;而引用類型的變量保存引用值。
         “引用值”代表了某個對象的引用,而不是對象本身,對象本身存放在這個引用值所表示的地址的位置。
  基本類型包括:byte, short, int, long, char, float, double, boolean,
  引用類型包括:類,接口和數組。
  棧與堆1,什么是棧,什么是堆?
  堆和棧是程序運行的關鍵。棧是運行時的單位,棧解決程序的運行問題,即程序如何執行,或者說如何處理數據。而堆是存儲的單位,堆解決的是數據存儲的問題,即數據怎么放、放在哪兒。
  在Java中一個線程就會相應有一個線程棧與之對應,因為不同的線程執行邏輯有所不同,因此需要一個獨立的線程棧。而堆則是所有線程共享的。棧因為是運行單位,因此里面存儲的信息都是跟當前線程(或程序)相關信息的。包括局部變量、程序運行狀態、方法返回值等等;而堆只負責存儲對象信息。
  2,為什么要將棧與堆區分開?
  第一,從軟件設計的角度看,棧代表了處理邏輯,而堆代表了數據。這樣分開,使得處理邏輯更為清晰。分而治之的思想。這種隔離、模塊化的思想在軟件設計的方方面面都有體現。
  第二,堆與棧的分離,使得堆中的內容可以被多個棧共享(也可以理解為多個線程訪問同一個對象)。這種共享的收益是很多的。一方面這種共享提供了一種有效的數據交互方式(如:共享內存),另一方面,堆中的共享常量和緩存可以被所有棧訪問,節省了空間
  第三,棧因為運行時的需要,比如保存系統運行的上下文,需要進行地址段的劃分。由于棧只能向上增長,因此就會限制住棧存儲內容的能力。而堆不同,堆中的對象是可以根據需要動態增長的,因此棧和堆的拆分,使得動態增長成為可能,相應棧中只需記錄堆中的一個地址即可。
  第四,面向對象就是堆和棧的完美結合。其實,面向對象方式的程序與以前結構化的程序在執行上沒有任何 區別。但是,面向對象的引入,使得對待問題的思考方式發生了改變,而更接近于自然方式的思考。當我們把對象拆開,你會發現,對象的屬性其實就是數據,存放 在堆中;而對象的行為(方法),就是運行邏輯,放在棧中。我們在編寫對象的時候,其實即編寫了數據結構,也編寫的處理數據的邏輯。
  3,棧中存放什么?堆中存放什么?
  堆中存的是對象。棧中存的是基本數據類型和堆中對象的引用。一個對象的大小是不可估計的,或者說是可以動態變化的,但是在棧中,一個對象只對應了一個4btye的引用(堆棧分離的好處)。基本數據類型占用的空間一般是1~8個字節——需要空間比較少,而且因為是基本類型,所以不會出現動態增長的情況——長度固定,因此棧中存儲就夠了,如果把他存在堆中是沒有什么意義的。可以這么說,基本類型和對象的引用都是存放在棧中,而且都是幾個字節的一個數,因此在程序運行時,他們的處理方式是統一的。但是基本類型、對象引用和對象本身就有所區別了,因為基本類型、對象引用是棧中的數據,對象本身是堆中的數據。最常見的一 個問題就是,Java中參數傳遞時的問題。
  4,Java中的參數傳遞時傳值呢?還是傳引用?
  要說明這個問題,先要明確兩點:
  1. 不要試圖與C進行類比,Java中沒有指針的概念
  2. 程序運行永遠都是在棧中進行的,因而參數傳遞時,只存在傳遞基本類型和對象引用的問題。不會直接傳對象本身。
  明確以上兩點后。Java在方法調用傳遞參數時,因為沒有指針,所以它都是進行傳值調用(這點可以參考C的傳值調用)。因此,很多書里面都說Java是進行傳值調用,這點沒有問題,而且也簡化的C中復雜性。
  在運行棧中,基本類型和引用的處理是一樣的,都是傳值,所以,如果是傳引用的方法調用,也同時可以理解為“傳遞引用的值”的傳值調用,即引用的處理跟基本類型是完全一樣的。但是當進入被調用方法時,被傳遞的這個引用的值,被程序解釋(或者查找)到堆中的對象,這個時候才對應到真正的對象。如果此時進行修改,修改的是引用對應的對象,而不是引用本身,即:修改的是堆中的數據。所以這個修改是可以保持的了。
  堆和棧中,棧是程序運行最根本的東西。程序運行可以沒有堆,但是不能沒有棧。而堆是為棧進行數據存儲服務,說白了堆就是一塊共享的內存。不過,正是因為堆和棧的分離的思想,才使得Java的垃圾回收成為可能。
Java中,棧的大小通過-Xss來設置,當棧中存儲數據比較多時,需要適當調大這個值,否則會出現java.lang.StackOverflowError異常。常見的出現這個異常的是無法返回的遞歸,因為此時棧中保存的信息都是方法返回的記錄點。
以上就是小編的理解。
 

免責聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,也不承認相關法律責任。如果您發現本社區中有涉嫌抄襲的內容,請發送郵件至:operations@xinnet.com進行舉報,并提供相關證據,一經查實,本站將立刻刪除涉嫌侵權內容。

免費咨詢獲取折扣

Loading
主站蜘蛛池模板: 一个人看免费视频www | 日本aaaa大片免费观看入口 | 欧美日韩一区视频 | 同性男男黄g片免费网站 | 顶级欧美熟妇高清xxxxx | 伊人春色网站 | 台湾性dvd性色av | 欧美性做爰片免费视频看 | 在线视频99 | 中国精品妇女性猛交bbw | 永久免费a级在线视频 | 粉嫩av一区二区在线播放免费 | xxav在线| jiuse九色| 日日躁夜夜摸月月添添添的视频 | 青青草色视频 | 婷婷亚洲综合 | 亚洲区小说区激情区图片区 | 国产成人午夜片在线观看高清观看 | 7788色淫网站免费 | 在线精品观看 | 欧美精品video| 久久久久国产精品一区二区 | 6699嫩草久久久精品影院 | 国产目拍亚洲精品一区二区 | 国产精品aⅴ视频在线播放 欧美精品一区二区三区在线 | 国产亚洲精品俞拍视频 | 少妇裸体淫交免费看片 | 欧美人与性囗牲恔配 | 久久天堂av综合合色 | 熟妇人妻无码中文字幕 | 久久久999国产精品 求免费黄色网址 | 舌头伸进去添的我好爽高潮欧美 | 草裙社区精品视频三区免费看 | 国产夫绿帽单男3p精品视频 | 一级特级黄色片 | 林由奈在线观看 | 国产草草草 | 色婷婷小说 | 丰满少妇好紧多水视频 | 青青草手机视频在线观看 | 欧美mv日韩mv国产网站 | 欧美综合视频在线观看 | 午夜成人无码福利免费视频 | caoporon成人超碰公开网站 | 实拍男女野外做爰视频 | 粉嫩一区二区三区四区公司1 | 久久av无码精品人妻系列试探 | 亚洲色无码中文字幕yy51999 | 久久成人视屏 | 国产成人亚洲影院在线播放 | 亚洲最大色综合成人av | 奇米四色7777中文字幕 | 韩国r级大尺度激情做爰外出 | 白丝爆浆18禁一区二区三区 | 美女扒开腿让男人桶爽久久软件 | 欧美午夜性囗交xxx╳ | 国产午夜鲁丝无码拍拍 | 无码h黄肉动漫在线观看999 | 久久97超碰色中文字幕蜜芽 | 日本男人天堂网 | 性刺激的欧美三级视频中文字幕 | 久精品在线 | 女人与黑拘的毛片 | 成年女人爽到高潮喷视频 | 成人热舞视频一区 | 老司机久久99久久精品播放 | 免费在线观看成年人视频 | 成年轻人网站色直接看 | 日韩麻豆 | 性欧美极品 | 国产亚洲成av片在线观看 | 一区二区三区不卡在线观看 | 又大又粗欧美黑人aaaaa片 | 亚洲成av人综合在线观看 | 一级成人毛片 | 97国产一区二区三区四区久久 | 国产原创av在线 | 6080yy午夜一二三区久久 | 成人无码网www在线观看 | 一区二区三区美女视频 | 亚洲成亚洲成网 | 日韩精品无码久久一区二区三 | 久久久久成人精品 | 欧亚av在线 | 亚洲日韩中文字幕天堂不卡 | jizzjizz日本免费视频 | 免费看一级黄色大片 | 91国内精品久久 | 国产国产人免费视频成69 | 人人做人人妻人人精 | 人人做人人爽 | 亚洲免费视频在线观看 | 香蕉黄色片 | 日韩欧国产精品一区综合无码 | 翔田千里高潮在线播放 | 波多在线视频 | 最近中文字幕 | 久久精品成人av |