日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 基础知识部分提炼

發布時間:2023/12/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 基础知识部分提炼 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.new 對象和 聲明對象區別

People p = new?People (); 和 Poeple p;?

前者是在堆上面創建了內存空間而且p指向了該空間。后者只是一個空指針,沒有指向任何存儲地址。

如果 將上述的p = man;那么前者和后者就都一樣了,只是第一種方式聲明的對象空間被丟棄,在垃圾回收的時候被釋放回收。

2.static修飾類

對于內部類,為了將其對于其他類可見,而且不用先聲明父類,再調用這個子類。那么這樣就可以將這個內部類聲明稱static。

3.private、protected 和public都可以聲明構造方法,對于單例模式一般構造方法為private,而newinstance為public static類型,防止使用者直接使用構造方法構造對象。

4.Java目前有9對應jdk是1.9,那么jdk1.5,1.6,1.7,1.8,對應Java分別是5,6,7,8。

5.Java幾種垃圾回收器

  • Serial Garbage Collector
  • Parallel Garbage Collector
  • CMS Garbage Collector
  • G1 Garbage Collector

  • 這四種垃圾收集器每一種都有自己的優點與不足。最重要的是,我們開發人員可以選擇Java虛擬機使用的垃圾收集器的類型。我們可以通過傳從參數的形式,來選擇它們。每一種垃圾收集器都有非常大的特點,都可以提供完全不同的性能。必須嚴謹而準確地理解這集中垃圾收集器,然后基于應用的使用情況正確選擇。

    1. Serial Garbage Collector

    Serial Garbage Collector通過暫停所有應用的線程來工作。它是為單線程工作環境而設計的。它中使用一個線程來進行垃圾回收。這種暫停應用線程來進行垃圾回收的方式可能不太適應服務器環境。它最適合簡單的命令行程序。

    通過?-XX:+UseSerialGC?參數來選用Serial Garbage Collector。

    2. Parallel Garbage Collector

    Parallel Garbage Collector也被稱為吞吐量收集器(throughput collector)。它是Java虛擬機的默認垃圾收集器。與Serial Garbage Collector不同,Parallel Garbage Collector使用多個線程進行垃圾回收。與Serial Garbage Collector相似的地方時,它也是暫停所有的應用線程來進行垃圾回收。

    3. CMS Garbage Collector

    Concurrent Mark Sweep (CMS) Garbage Collector使用多個線程來掃描堆內存來標記需要回收的實例,然后再清除被標記的實例。CMS Garbage Collector只有在如下兩種情景才會暫停所有的應用線程:

  • 當標記永久代內存空間中的對象時;
  • 當進行垃圾回收時,堆內存同步發生了一些變化。
  • 相比Parallel Garbage Collector,CMS Garbage Collector使用更多的CPU資源來確保應用有一個更好的吞吐量。如果分配更多的CPU資源可以獲得更好的性能,那么CMS Garbage Collector是一個更好的選擇,相比Parallel Garbage Collector。

    通過?XX:+USeParNewGC?參數來選用CMS Garbage Collector。

    4. G1 Garbage Collector

    G1 Garbage Collector用于大的堆內存區域。它將堆內存分割成多個獨立區域(Region),然后并發地對它們進行垃圾回收。在釋放內存后,G1還可以壓縮空閑的堆內存。但是,CMS Garbage Collector是通過“Stop The World (STW)”來進行內存壓縮的。G1優先收集可回收更多內存的區域。

    通過?–XX:+UseG1GC?參數來選用G1 Garbage Collector。

    Java 8 的改進

    在用G1 Garbage Collector時,可以開啟?-XX:+UseStringDeduplication?參數。它通過將重復的字符串移動到同一個?char?數組中來優化堆內存的使用。該選項在Java 8u20時引用進來。

    上面給出了四種垃圾收集器的介紹,至于選用哪個垃圾收集器,這個要根據應用場景、可用的硬件資源以及吞吐量的要求來確定。

    Java虛擬機中的垃圾回收選項

    下面是與Java收集器相關的Java虛擬機選項。

    垃圾收集器選擇

    OptionDescription
    -XX:+UseSerialGC Serial Garbage Collector
    -XX:+UseParallelGC Parallel Garbage Collector
    -XX:+UseConcMarkSweepGC CMS Garbage Collector
    -XX:ParallelCMSThreads= CMS Collector – 使用的線程數
    -XX:+UseG1GC G1 Gargbage Collector

    垃圾回收優化選項

    OptionDescription
    -Xms 堆內存初始化尺寸
    -Xmx 堆內存最大尺寸
    -Xmn 新生代(Young Generation)的尺寸
    -XX:PermSize 永久代(Permanent Generation)初始化尺寸
    -XX:MaxPermSize 永久代(Permanent Generation)最大尺寸

    Java虛擬機垃圾回收選項的使用示例

    java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseSerialGC -jar java-application.jar 對于內存的劃分和管理,一般是操作系統(不管是什么編譯器編譯的程序)。但是對于Java虛擬機需要管理自己的內存堆,那么必然對內存堆有自己的分區,而且不同版本 的jvm對內存的劃分不一樣。

    6.Java 對象數組

    ?Object[] objArr = new?Object[1000]; ?

    String[] strarry = new String[10]; String[] strarry = {"","","","","",""};

    7.java 中四大引用 -- 強引用,軟引用,弱引用和虛引用。

    強引用:無論內存是否足夠,不會回收,即使爆出來oom也不會回收。
    軟引用:內存不足時,回收該引用關聯的對象。
    弱引用:垃圾回收時,無論內存是否足夠,都會回收。
    虛引用:任何時候都可能被垃圾回收器回收。

    強引用只要有指針指向該堆,那么GC就不會回收,即使拋出來oom。這個指針變量可以是局部變量,在所在的方法執行完,已經出棧,那么局部指針就不存在了,那么GC可以回收。但是一個方法內創建很多的局部對象,或者對象數組,那么方法還沒有出棧,那么GC就算oom也不會回收。除非每執行完一個局部指針將指針置為空。 run() { Object obarr = new Object[10000]; Object obarr1 = new Object[10000]; ... }
    軟引用(內存不夠即回收),弱引用(垃圾回收即回收)和虛引用(隨時可能回收)在回收的時候首先GC會判斷能不能使用到,有沒有指向到,指向到肯定不會被回收。沒有指向或者調用,那么就被回收。一般使用這三種引用是在創建較大的存儲空間,如圖片,文件緩存對象,或者較大的對象數組。
    8.transient 和 volatile 關鍵字 ?-- 線程安全和防止序列化

    transient

    transient是類型修飾符,只能用來修飾字段。在對象序列化的過程中,標記為transient的變量不會被序列化。

    示例:

    class Test {
    transient int a; // 不會被持久化
    int b; // 持久化
    }

    當類Test的實例對象被序列化(比如將Test類的實例對象 t 寫入硬盤的文本文件t.txt中),變量 a 的內容不會被保存,變量 b 的內容則會被保存。

    參考:
    把一個對象的表示轉化為字節流的過程稱為串行化(也稱為序列化,serialization),從字節流中把對象重建出來稱為反串行化(也稱為為反序列化,deserialization)。transient 為不應被串行化的數據提供了一個語言級的標記數據方法。

    volatile
    volatile也是變量修飾符,只能用來修飾變量。volatile修飾的成員變量在每次被線程訪問時,都強迫從共享內存中重讀該成員變量的值。而且,當成員變量發生變化時,強迫線程將變化值回寫到共享內存。這樣在任何時刻,兩個不同的線程總是看到某個成員變量的同一個值。

    在此解釋一下Java的內存機制:

    Java使用一個主內存來保存變量當前值,而每個線程則有其獨立的工作內存。線程訪問變量的時候會將變量的值拷貝到自己的工作內存中,這樣,當線程對自己工作內存中的變量進行操作之后,就造成了工作內存中的變量拷貝的值與主內存中的變量值不同。

    9.Java 并發與并發容器 -- Concurrent

    CopyOnWriteArrayList與Copy-On-Write策略

    Copy-On-Write簡稱COW,是一種用于程序設計中的優化策略。其基本思路是,從一開始大家都在共享同一個內容,當某個人想要修改這個內容的時候,才會真正把內容Copy出去形成一個新的內容然后再改,這是一種延時懶惰策略。從JDK1.5開始Java并發包里提供了兩個使用CopyOnWrite機制實現的并發容器,它們是CopyOnWriteArrayList和CopyOnWriteArraySet。CopyOnWrite容器非常有用,可以在非常多的并發場景中使用到。

    CopyOnWrite容器即寫時復制的容器。通俗的理解是當我們往一個容器添加元素的時候,不直接往當前容器添加,而是先將當前容器進行Copy,復制出一個新的容器,然后新的容器里添加元素,添加完元素之后,再將原容器的引用指向新的容器。這樣做的好處是我們可以對CopyOnWrite容器進行并發的讀,而不需要加鎖,因為當前容器不會添加任何元素。所以CopyOnWrite容器也是一種讀寫分離的思想,讀和寫不同的容器。

    CopyOnWrite容器只能保證數據的最終一致性,不能保證數據的實時一致性。所以如果你希望寫入的的數據,馬上能讀到,請不要使用CopyOnWrite容器

    ConcurrentLinkedQueue

    在并發編程中,有時候需要使用線程安全的隊列或列表。通常實現線程安全有兩種方式,一種是使用阻塞算法,一種是使用非阻塞算法。非阻塞算法實現基礎為循環CAS(Compare and Swipe 比較和交換)。

    ConcurrentLinkedQueue技術上的實現與CopyOnWriteArrayList與Copy類似,但是容器只有部分內容而不是整個容器可以被復制和修改。ConcurrentLinkedQueue有head節點和tail節點組成,每個節點由節點元素(item)和指向下一個結點(next)的引用組成。節點之間通過next關聯起來,形成一張鏈表結構的隊列。

    ConcurrentHashMap與鎖分段技術

    ConcurrentHashMap是線程安全且高效的HashMap。多線程環境下,使用非線程安全的HashMap會導致死循環,而如文章中建議的那樣,HashTable這種過時容器效率低下(使用synchronized來保證線程安全)。ConcurrentHashMap使用鎖分段技術,大大提高了并發使用的效率。

    鎖分段技術: 假設容器有多把鎖,每一把鎖用于鎖容器其中一部分數據,當多線程訪問容器不同數據段數據時,線程間就不存在鎖競爭,從而提高并發訪問效率。

    10.public,protected,private 權限修飾詞,默認的條件下,同一個包內是默認public,不在同一個包內是private,protected只允許子類訪問。 11.Java 規則: 高位向地位轉換需要強轉,地位向高位轉化,自動轉化。 short a=1; 這是對的,可以直接賦值,只要數值在short范圍內。 ? short b =a +1; ?這個是不對的,1默認是整型。 short a +=1;這是對的,Java復合運算做了優化,先是加法short a+1;然后轉換short類型。 12.Java switch只能接收 int ,short,byte,char四中數據類型。 13.方法重載(多態):就是在同一個類中,方法的名字相同,但參數個數、參數的類型或返回值類型不同!
    方法重寫:它是指子類和父類的關系,子類重寫了父類的方法,但方法名、參數類型、參數個數必須相同!


    總結

    以上是生活随笔為你收集整理的java 基础知识部分提炼的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。