<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # ==和equals區別 `==`用來判斷內存地址是否相同;`equals()`用來判斷字符串的內容是否相同 # do...while循環 1、do…while 循環和 while 循環相似,不同的是,do…while 循環至少會執行一次。如果布爾表達式的值為 true,則語句塊一直執行,直到布爾表達式的值為 false。 2、break 主要用在循環語句或者 switch 語句中,用來跳出整個語句塊;break 跳出最里層的循環,并且繼續執行該循環下面的語句。 3、continue 適用于任何循環控制結構中,作用是讓程序立刻跳轉到下一次循環的迭代。 # i++和++i區別 1、i++會先使用i的值,也就是將i的值加載到數據棧,在給i加1,最后使用數據棧中的值。 2、++i會先將i的值加1,再將增加后的值加載到數據棧,再使用數據棧中的值。 3、使用值的時候都是從數據棧頂去取值。 4、`int i = 0;i = i++;`該代碼執行后i的值為0。 # int和Integer的區別 * int 是基本數據類型,Integer 是包裝類 * Java中,會對 -128 到 127 的 Integer 對象進行緩存,當創建新的 Integer 對象時,如果符合這個這個范圍,并且已有存在的相同值的對象,則返回這個對象,否則創建新的 Integer 對象 # 自動裝箱和自動拆箱 1、自動裝箱指 Java 自動將原始數據類型轉換為對應的對象類型,如 int 變量轉為 Integer 對象;將 Integer 對象自動轉換為 int 類型值,叫做自動拆箱 2、自動裝箱時編譯器調用 valueOf 將原始類型值轉換成對象 3、自動拆箱時,編譯器通過調用類似 intValue(), doubleValue() 這類的方法將對象轉換成原始類型值 4、自動裝箱、拆箱主要發生在賦值時、方法調用時 # String、StringBuffer 和StringBuilder 的區別 1、String 是不可變對象,每次對 String 對象進行更改時,都會生成一個新的對象,然后將指針指向新的對象 2、StringBuffer 線程安全,使用時,每次都是直接對 StringBuffer 對象本身進行操作,并不生成新的對象 3、StringBuilder 非線程安全,和 StringBuffer 類似,單線程中性能比 StringBuffer 高 4、StringBuilder 如何避免不可變字符串分配的問題 # Java類型轉換 1、Java中的類型轉換分為基本數據類型轉換和引用數據類型轉換 2、基本數據類型轉換分為自動轉換和強制轉換,自動轉換指從位數低的類型向位數高的類型轉換,強制類型轉換指從位數高的類型向位數低的類型轉換,會導致精度缺失 3、引用數據類型轉換時,子類可以轉換成父類,父類不一定可以轉換為子類,父類引用引用的是子類對象時可以強制轉換為子類,但是父類引用引用的是父類對象時,強制轉換會拋出異常 # 介紹序列化 1、序列化指把應用層的對象或數據結構轉換成一段連續的二進制串,反序列化指把二進制串轉換成應用層的對象或數據結構 2、序列化按可讀性可分為兩類:二進制序列化、文本序列化(如 XML、JSON)以及半文本序列化。 3、文本序列化可讀性、可編輯性好;二進制序列化不具有可讀性,但解析速度更有優勢 4、Java 中,有兩種方式可以實現二進制序列化,既可以實現 Serializable 接口,也可以實現 Parcelable 接口。 5、在 Android 中,我們不應該使用 Serializable 接口。因為 Serializable 接口使用了反射機制,這個過程相對緩慢,而且往往會產生出很多臨時對象,這樣可能會觸發垃圾回收器頻繁地進行垃圾回收。相比而言,Parcelable 接口比 Serializable 接口效率更高,性能方面要高出 10x 多倍。 # Java垃圾回收機制分析 1、JVM棧記錄了當前線程的方法調用,棧幀存儲有方法參數、局部變量、返回地址。但引用的對象存儲在堆中,所以方法調用結束后,對象會依舊存在于堆中,易造成內存泄漏。 2、Java的垃圾回收機制可以自動回收不再使用的對象占用的內存空間。 3、垃圾回收算法 有:引用計數算法、可達性分析算法、標記清除算法、復制算法、標記整理算法、分代回收算法。 a、引用計數算法中,每個對象包含一個計數器,有新的引用指向該對象時計數器加1,引用移除時計數器減1,計數器為0時回收對象,引用計數法有個缺陷是無法檢測出循環引用。 b、可達性分析算法中,每個對象都有一個用于標示該對象是否可到達的標記信息。從根出發跟隨所有的引用,就可以找到所有的可到達對象,不可到達對象就是需要垃圾回收的對象。 c、標記清除算法流程為,垃圾回收啟動時,Java程序暫停運行,JVM從根出發找到所有的可達對象并標記,然后掃描整個堆找到不可達對象并清空。缺點是標記、清除的效率不高;會產生內存碎片。 d、復制算法為,將內存分為大小相等的兩塊,每次使用一塊,使用完時將存活的對象復制到另一塊,清空原來那塊。在對象存活率較低時回收效率高,缺點是內存空間使用率只有一半。 e、標記整理算法下,找到所有的可達對象并標記后,將所有存活對象都向內存區域的一端移動,然后清理掉邊界以外的內存區域。 d-1、分代回收算法下,堆分為三代:永久代、老年代、新生代,新生代又分為三個區域:eden區、from區和to區。 d-3、永久世代主要存放靜態文件如Java靜態類、方法等,對于垃圾回收沒有顯著影響。 d-4、分代回收流程為,上次垃圾回收后創建的對象叫新生對象,存放于eden區,eden區沒有空間存放新生對象時,觸發一次MinorGC,采用復制算法將eden區和from區的可達對象復制到to區,清空eden區和from區空間,此時from區和to區已交換;當to區也放不下eden和from區的可達對象時,將部分對象放到成熟世代;當成熟世代也已滿時觸發MajorGC,采用標記整理算法進行垃圾回收。 d-5、其中,即使to區沒有滿,JVM也會移動生命周期足夠久遠的對象到成熟世代;MinorGC發送頻率較高,MajorGC發生頻率較低。 # Java內存結構 1、堆是用來存儲對象本身和數組的,在JVM中只有一個堆,因此堆是被所有線程共享的。 2、棧中存放著棧幀,每個棧幀分別對應一個被調用的方法,棧是線程私有的。 3、方法區存放著已經加載的類信息、常量池、靜態變量以及方法代碼的內存區域 4、方法的調用過程對應棧幀在虛擬機中入棧到出棧的過程。 5、棧幀中存放著局部變量表、指向運行時常量池的引用、方法返回地址等。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看