<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

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

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            java語言

            Java虛擬機垃圾收集算法簡介

            時間:2025-03-03 13:04:28 java語言 我要投稿
            • 相關推薦

            Java虛擬機垃圾收集算法簡介

              一 標記-清除算法(Mark-Sweep)

            Java虛擬機垃圾收集算法簡介

              首先標記出所有需要回收的對象,標記完成后統一回收。

              主要缺點: 1. 標記和清除效率都很低 2. 產生大量不連續的內存碎片,導致后面分配大內存空間失敗

              二 復制算法

              將可用內存劃分為大小相等的兩塊, 每次只使用其中一塊。 當這塊用完后,就將還存活對象復制到另外一塊上面,再把已經使用的內存空間一次清理掉。

              主要缺點: 代價太高,至少一半的內存不能使用。

              三 標記-整理算法

              標記過程和標記-清除算法一致,但是后續步驟是讓所有存活的對象都向一端移動,然后清理掉邊界以外的內存。

              四 分代收集算法

              當前商業虛擬機都采用此算法,分為不同對象代,去進行不同管理。【相關閱讀】

              什么是java位運算

              位運算允許對整數中的單個比特進行操作。位運算會對連個操作數中對應的比特執行布爾代數運算,并產生一個結果。

              java中有3種位運算符:&(與) |(或) ^(異或) ~(非)

              看例子說明位運算的過程:

              public class test{

              public static void main(String[] args){

              int a=12|2; //1100|0010

              System.out.println(a);

              }

              }

              結果是14(1110)

              位移運算操作的目標也是數字的二進制的位。用來操作位數的向左向右移動。

              java種有3種基本的位移操作:

              >>(右移) <<(左移)>>>(無符號右移)

              <<:將操作符左邊的整數按位向左邊移動運算符右邊整數指定的位數,在右邊添加0;

              看例子:

              public class test{

              public static void main(String[] args){

              int a=8<<1;

              System.out.println(a);

              }

              }

              8的二進制表示:00000000 00000000 00000000 00001000

              左移1位后二進制:00000000 00000000 00000000 00010000 -> 14

              結果為14

              tip:左移相當于num*(2^n) 其中num為被移數,n為移動的位數

              >>:右移的道理也是一樣的,注意的是:若最高位為1,移動后最高位用1來填充,否則用0來填充。

              例子:

              int a=-8>>1;

              System.out.println(a);

              -8的二進制:11111111 11111111 11111111 11111000

              右移后的二進制:11111111 11111111 11111111 11111100 -> -4

              結果為-4

              tip:右移相當于num/(2^n) 其中num為被移數,n為移動的位數

              >>>:無符號右移跟右移原理是一樣的,只是覆蓋位的覆蓋規則不同:不管最高位是0還是1,全部用0來填充。

              例子:

              int a=-8>>>1;

              System.out.println(a);

              -8的二進制:11111111 11111111 11111111 11111000

              無符號右移后的二進制:01111111 11111111 11111111 11111100 -> 2147483644

              tip:用無符號右移的時候要注意,絕對值很小的負數移動后都可能成為絕對值很大的正數,這在大多數情況下沒意義。

              奇葩的例外:

              那代碼:

              int a=11>>32;

              long b=12<<64;

              System.out.println(a);

              System.out.println(b);

              int類型占32位,long類型占64位,這樣子的話,上面的例子輸出應該都是0才對,因為剛好將有效位都移走了,但結果并不是這樣的。

              輸出的結果是:11 12

              這跟java對位移的底層操作機制有關:

              從結果可以看出兩個數都沒有變化,這是因為,在進行移位前,java首先將要移動的位數跟被移數的位數求余,然后去移動余數個位數。上面例子中,32對32求余,64對64求余,結果都是0,java系統對被移數進行0個位的移動,也就是沒

              移動啦。

              這樣子的話,看下下面的代碼:

              int c=8>>33;

              System.out.println(c);

              因為int有32位,那么8實際上被移動的位數是:332=1;

              就相當于:int c=8>>1;

              結果自然是:4

            【Java虛擬機垃圾收集算法簡介】相關文章:

            Java虛擬機垃圾收集算法08-13

            java垃圾回收算法講解08-27

            Java虛擬機介紹07-12

            Java排序算法06-17

            Java虛擬機是什么09-14

            java虛擬機的故障處理摘要09-25

            java語言的簡介08-30

            Java語言簡介08-23

            Java語言的簡介09-09

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

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

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院