最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA中的引用與對象詳解

 更新時間:2017年02月15日 14:14:35   作者:s小小的我  
本文主要介紹了JAVA中引用與對象的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧

Thinking in Java 一書中提到,引用和對象就像瑤控器和電視機。用瑤控器(引用)來操作電視機(對象),想換頻道什么的直接操作瑤控器就可以了,瑤控器再來調(diào)控電視機。如果你在房間里面走動,同時還想操作電視換頻道,你只需要攜帶瑤控器就可以了。我覺得這個比較非常好,引用是用來操作對象的,對象是由你來創(chuàng)建的。通常用new關(guān)鍵字來創(chuàng)建一個對象。那么這些對象是怎樣存儲的,內(nèi)存又是怎樣分配的呢?

存儲在什么地方?

1.寄存器(register):由于寄存器是在CPU內(nèi)部的,所以它的速度最快,但是數(shù)量有限,所以由編譯器根據(jù)需求進行分配。

2.棧(stack):位于通用RAM中,通過棧指針的移動來分配和釋放內(nèi)存,指針向下移動分配新的內(nèi)存;指針向上移動則釋放內(nèi)存。速度僅次于寄存器。創(chuàng)建程序時,Java編譯器必須知道存儲在棧內(nèi)所有數(shù)據(jù)的確切大小和生命周期,因為它必須生成相應的代碼,以便上下移動棧指針,這就限制了程序的靈活性。所以java中的對象并不存放在棧當中,但對象的引用存放在棧中。

3.堆(heap):也是位于RAM中的內(nèi)存池,用于存放所有的JAVA對象。編譯器不需要知道要從堆里分配多少存儲區(qū)域,也不需要知道存儲的數(shù)據(jù)在堆里面存活多長時間,因此堆要比棧靈活很多。當你new創(chuàng)建一個對象時,編譯器會自動在堆里進行存儲分配。當然,為這種靈活性必須要付出相應的代碼。用堆進行存儲分配比用棧進行存儲存儲需要更多的時間。

4.靜態(tài)存儲(static storage):這里的“靜態(tài)”是指“在固定的位置”(也在RAM里)。靜態(tài)存儲里存放程序運行時一直存在的數(shù)據(jù)。你可用關(guān)鍵字static來標識一個對象的特定元素是靜態(tài)的,即存放類中的靜態(tài)成員,但JAVA對象本身從來不會存放在靜態(tài)存儲空間里。

5. 常量存儲(constant storage):存放字符串常量和基本類型常量(public static final)。常量值通常直接存放在程序代碼內(nèi)部,它們永遠不會被改變。有時,在嵌入式系統(tǒng)中,常量本身會和其他部分分割離開,所以在這種情況下,可以選擇將其放在ROM中。

簡單描述下垃圾回收機制

垃圾回收回收的是無任何引用的對象占據(jù)的內(nèi)存空間(堆)而不是對象本身,要注意以下3點:

1)對象可能不會被回收,即垃圾回收不一定會執(zhí)行;

2)垃圾回收并不等于析構(gòu);

3)垃圾回收只與內(nèi)存有關(guān)。

引用計數(shù)器:一種簡單但是速度很慢的垃圾回收策略。即每個對象都有一個引用計數(shù)器,當有引用連接至對象時計數(shù)器加1;當引用離開時計數(shù)器減1。垃圾回收器會在含有全部對象的列表中遍歷,發(fā)現(xiàn)某個對象的引用計數(shù)器為0時,就釋放其占用的內(nèi)存。

優(yōu)點:引用計數(shù)收集器可以很快的執(zhí)行,交織在程序運行中。對程序不被長時間打斷的實時環(huán)境比較有利。

缺點:無法檢測出循環(huán)引用。如父對象有一個對子對象的引用,子對象反過來引用父對象。這樣,他們的引用計數(shù)永遠不可能為0。

自適應、分代的、停止——復制、標記——清掃 垃圾回收方法:

停止——復制:先暫停程序的運行,然后將所有活的對象從當前堆復制到另一個堆,沒有被復制的都是垃圾。當對象從一個堆復制到另一個堆,它們的排列是一個挨著一個的,所以新堆保持緊湊排列。

標記——清掃:遍歷所有的引用,找出所有活的對象,然后對它們進行標記,這個過程不會回收任何對象,只有全部標記工作完成時才開始清除工作。沒有被標記的對象將會被釋放,不發(fā)生任何復制動作,所以剩下的堆空間不是連續(xù)的。

創(chuàng)建了幾個對象?

String s="abc"; 創(chuàng)建了幾個對象?

毫無疑問,這里面只創(chuàng)建了一個對象——“abc";

String s1="abc"; String s2=s1;創(chuàng)建了幾個對象?

仍然只有一個對象——“abc";

String s1="abc"; String s2=”abc";創(chuàng)建了幾個對象?

這里仍然只有一個對象——“abc";

String s="abc"+"def";創(chuàng)建了幾個對象?

注意,這里創(chuàng)建了三個對象:“abc"、”def"、“abcdef";

String s=new String("abc");創(chuàng)建了幾個對象?

大家也都知道是兩個對象。實際上是"abc"本身就是文字池中的一個對象,在運行new String()時,把文字池即pool中的字符串"abc"復制到堆中,并把這個對象的應用交給s,所以創(chuàng)建了兩個String對象,一個在pool中,一個在堆中。

String s1=new String("abc");String s2=new String("abc");創(chuàng)建了幾個對象?

三個對象。"abc"是文字池中的一個對象,然后又在堆中用new String()創(chuàng)建了兩個對象。

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • Java設計模式之策略模式的使用(Strategy?Pattern)

    Java設計模式之策略模式的使用(Strategy?Pattern)

    策略模式是一種行為型設計模式,用于定義一系列算法并將每個算法封裝起來,使它們可以互相替換,從而實現(xiàn)代碼的可維護性和靈活性,策略模式包含策略接口、具體策略類和上下文類,并通過將算法的選擇與使用分離,使得算法可以獨立變化
    2025-03-03
  • 關(guān)于RedisTemplate常用方法封裝

    關(guān)于RedisTemplate常用方法封裝

    文章總結(jié)了RedisTemplate的常用方法封裝,包括序列化配置、基礎常量和接口實現(xiàn),這些內(nèi)容是個人經(jīng)驗分享,旨在為讀者提供參考和支持
    2024-12-12
  • SpringBoot中整合MyBatis-Plus-Join使用聯(lián)表查詢的實現(xiàn)

    SpringBoot中整合MyBatis-Plus-Join使用聯(lián)表查詢的實現(xiàn)

    本文主要介紹了SpringBoot中整合MyBatis-Plus-Join使用聯(lián)表查詢的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • maven子模塊相互依賴打包時報錯找不到類的解決方案

    maven子模塊相互依賴打包時報錯找不到類的解決方案

    本文主要介紹了maven子模塊相互依賴打包時報錯找不到類的解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • idea中使用SonarLint進行代碼規(guī)范檢測及使用方法

    idea中使用SonarLint進行代碼規(guī)范檢測及使用方法

    這篇文章主要介紹了idea中使用SonarLint進行代碼規(guī)范檢測,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • SpringBoot 集成 Kettle的實現(xiàn)示例

    SpringBoot 集成 Kettle的實現(xiàn)示例

    本文主要介紹了SpringBoot 集成 Kettle的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-01-01
  • Java之Default關(guān)鍵字的兩種使用方式

    Java之Default關(guān)鍵字的兩種使用方式

    Java關(guān)鍵字default主要有兩種使用場景:一是在switch語句中作為默認執(zhí)行的分支;二是在接口中定義默認方法,這是Java 8新增的特性,允許接口包含具體實現(xiàn)的方法,在switch中,當沒有匹配的case時,執(zhí)行default分支
    2024-09-09
  • Spring實現(xiàn)Quartz自動配置的方法詳解

    Spring實現(xiàn)Quartz自動配置的方法詳解

    這篇文章主要介紹了Spring實現(xiàn)Quartz自動配置的方法詳解,如果想在應用中使用Quartz任務調(diào)度功能,可以通過Spring Boot實現(xiàn)Quartz的自動配置,以下介紹如何開啟Quartz自動配置,以及Quartz自動配置的實現(xiàn)過程,需要的朋友可以參考下
    2023-11-11
  • Java編程實現(xiàn)月食簡單代碼分享

    Java編程實現(xiàn)月食簡單代碼分享

    這篇文章主要介紹了Java編程實現(xiàn)月食簡單代碼分享,程序很簡單,喜歡的朋友可以拿過去玩玩。
    2017-11-11
  • SpringBoot?AOP?Redis實現(xiàn)延時雙刪功能實戰(zhàn)

    SpringBoot?AOP?Redis實現(xiàn)延時雙刪功能實戰(zhàn)

    本文主要介紹了SpringBoot?AOP?Redis實現(xiàn)延時雙刪功能實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08

最新評論

万年县| 景洪市| 无为县| 武强县| 靖边县| 修水县| 日喀则市| 金平| 赣州市| 京山县| 太康县| 象州县| 潮安县| 盐源县| 临澧县| 东明县| 辽中县| 湘西| 碌曲县| 通州区| 福建省| 安陆市| 夏津县| 沙洋县| 南靖县| 来安县| 苏州市| 永福县| 泽普县| 海伦市| 崇信县| 平江县| 洛川县| 贵阳市| 凤山市| 嘉善县| 五指山市| 和田县| 全椒县| 谷城县| 清徐县|