<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          面試官:為什么 Java 不把基本類型放在堆中?我竟然答不上來。。

          共 1474字,需瀏覽 3分鐘

           ·

          2021-11-21 00:32

          往期熱門文章:
          1、IDEA 注釋模板這樣搞!
          2、后端開掛:3行代碼寫出8個接口!
          3、推薦一款可視化配置 Nginx 的神器
          4、一款性能調優(yōu)利器 — 火焰圖
          5、Redis 實現限流的三種方式

          為什么要把堆和棧區(qū)分出來呢?

          第一,從軟件設計的角度看,棧代表了處理邏輯,而堆代表了數據。這樣分開,使得處理邏輯更為清晰。分而治之的思想。這種隔離、模塊化的思想在軟件設計的方方面面都有體現。
          第二,堆與棧的分離,使得堆中的內容可以被多個棧共享(也可以理解為多個線程訪問同一個對象)。這種共享的收益是很多的。一方面這種共享提供了一種有效的數據交互方式(如:共享內存),另一方面,堆中的共享常量和緩存可以被所有棧訪問,節(jié)省了空間。
          第三,棧因為運行時的需要,比如保存系統運行的上下文,需要進行地址段的劃分。由于棧只能向上增長,因此就會限制住棧存儲內容的能力。而堆不同,堆中的對象是可以根據需要動態(tài)增長的,因此棧和堆的拆分,使得動態(tài)增長成為可能,相應棧中只需記錄堆中的一個地址即可。
          第四,面向對象就是堆和棧的完美結合。其實,面向對象方式的程序與以前結構化的程序在執(zhí)行上沒有任何區(qū)別。
          但是,面向對象的引入,使得對待問題的思考方式發(fā)生了改變,而更接近于自然方式的思考。當我們把對象拆開,你會發(fā)現,對象的屬性其實就是數據,存放在堆中;而對象的行為(方法),就是運行邏輯,放在棧中。我們在編寫對象的時候,其實即編寫了數據結構,也編寫的處理數據的邏輯。不得不承認,面向對象的設計,確實很美。
          在 Java 中,Main 函數就是棧的起始點,也是程序的起始點。
          程序要運行總是有一個起點的。同 C 語言一樣,java 中的 Main 就是那個起點。無論什么 java 程序,找到 main 就找到了程序執(zhí)行的入口。

          堆中存什么?棧中存什么?

          堆中存的是對象。棧中存的是基本數據類型和堆中對象的引用。一個對象的大小是不可估計的,或者說是可以動態(tài)變化的,但是在棧中,一個對象只對應了一個 4 btye 的引用(堆棧分離的好處)。

          為什么不把基本類型放堆中呢?

          因為其占用的空間一般是 1~8 個字節(jié)——需要空間比較少,而且因為是基本類型,所以不會出現動態(tài)增長的情況——長度固定,因此棧中存儲就夠了,如果把他存在堆中是沒有什么意義的(還會浪費空間,后面說明)。
          可以這么說,基本類型和對象的引用都是存放在棧中,而且都是幾個字節(jié)的一個數,因此在程序運行時,他們的處理方式是統一的。但是基本類型、對象引用和對象本身就有所區(qū)別了,因為一個是棧中的數據一個是堆中的數據。最常見的一個問題就是,Java 中參數傳遞時的問題。
          來源:https://pengjiaheng.iteye.com

          最近熱文閱讀:

          1、IDEA 注釋模板這樣搞!
          2、后端開掛:3行代碼寫出8個接口!
          3、推薦一款可視化配置 Nginx 的神器
          4、一款性能調優(yōu)利器 — 火焰圖
          5、Redis 實現限流的三種方式
          6、推薦 15 款常用開發(fā)工具
          7、一次 QPS 翻倍的 Java 服務性能優(yōu)化
          8、Maven 劃分模塊最佳實踐
          9、面試官問:select......for update會鎖表還是鎖行?
          10、Spring Boot + GraphQL 才是 API 的未來!
          關注公眾號,你想要的Java都在這里

          瀏覽 86
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  直接能看的黄色网址 | 亚洲国产日韩一区无码精品久久久久 | 一级无码高清 | 丁香色婷婷五月天 | 国内精品一区二区三区 |