亚洲一级免费看,特黄特色大片免费观看播放器,777毛片,久久久久国产一区二区三区四区,欧美三级一区二区,国产精品一区二区久久久久,人人澡人人草

java語(yǔ)言

JAVA對(duì)象創(chuàng)造及內(nèi)存布局介紹

時(shí)間:2025-02-26 23:58:06 java語(yǔ)言 我要投稿
  • 相關(guān)推薦

JAVA對(duì)象創(chuàng)造及內(nèi)存布局介紹

  下面是百分網(wǎng)小編收集整理的關(guān)于JAVA對(duì)象創(chuàng)造及內(nèi)存布局介紹d的相關(guān)內(nèi)容,歡迎閱讀!

  進(jìn)程簡(jiǎn)略介紹:

  計(jì)算機(jī)對(duì)于內(nèi)存的分配是以進(jìn)程為單位的,每個(gè)進(jìn)程在邏輯上是隔離的,每個(gè)進(jìn)程都認(rèn)為自己是這臺(tái)電腦上的唯一程序,自己面對(duì)所有的內(nèi)存空間,(如,你的電腦有2G內(nèi)存,那么一個(gè)進(jìn)程認(rèn)為自己可以申請(qǐng)到2G的內(nèi)存空間)這種技術(shù)叫做進(jìn)程隔離技術(shù),保證了系統(tǒng)不會(huì)因?yàn)橐粋(gè)進(jìn)程的失敗,導(dǎo)致系統(tǒng)崩潰。一個(gè)進(jìn)程可以向操作系統(tǒng)申請(qǐng)內(nèi)存,(操作系統(tǒng)是系統(tǒng)資源的調(diào)度者,進(jìn)程要使用資源必須向操作系統(tǒng)打報(bào)告)進(jìn)程申請(qǐng)到的內(nèi)存一般以?xún)煞N形式使用,一種是棧(stack)的形式,另一種是堆(heap)的形式。一個(gè)進(jìn)程可以有多個(gè)棧,但只有一個(gè)堆。一個(gè)棧對(duì)應(yīng)一個(gè)線(xiàn)程(thread),一個(gè)進(jìn)程至少需要一個(gè)線(xiàn)程,即至少有一個(gè)棧。

  現(xiàn)在有一個(gè)student類(lèi),如下

  class student{

  String name;

  int age;

  void gotoSchool(){

  System.out.print("Let's go to school !");

  }

  void eat(){

  System.out.print("Let's go to eat !");

  }

  }

  現(xiàn)在來(lái)創(chuàng)建一個(gè)學(xué)生對(duì)象 Student stu = new Student();

  該語(yǔ)句實(shí)際是Student stu = new Student student()的縮寫(xiě)版,只是人們發(fā)現(xiàn)那樣寫(xiě)很累,于是就把兩個(gè)student合二為一了。

  下面分析一下該語(yǔ)句是如何執(zhí)行的。 進(jìn)程申請(qǐng)到內(nèi)存空間,按照兩種方式分配,有的內(nèi)存分配給棧,有的分配給堆。?臻g比較狹小,有大小限制,堆空間可以很大,大到和內(nèi)存的容量一致。編譯器是從左到右進(jìn)行編譯的,程序也是如此執(zhí)行。

  首先是碰到Student這樣一個(gè)符號(hào)(token),系統(tǒng)會(huì)馬上看下Student是什么東西,不久它發(fā)現(xiàn)那是一個(gè)類(lèi),然后把整個(gè)類(lèi)的代碼加載(class loading)到內(nèi)存中。程序的代碼必須從磁盤(pán)上加載到內(nèi)存中才能執(zhí)行,其實(shí)cpu只跟內(nèi)存打交道。只是因?yàn)橐粩嚯娛裁炊紱](méi)了,所以后面才發(fā)明了硬盤(pán),軟盤(pán)等。在堆中有一個(gè)代碼區(qū)(code area),用來(lái)存放Student類(lèi)的代碼。因?yàn)闂5目臻g狹小,而類(lèi)代碼可能很大,所以要把類(lèi)代碼加載到堆中。

  然后,遇到stu符號(hào),即創(chuàng)建一個(gè)引用變量(或句柄),其數(shù)據(jù)類(lèi)型是Student,因?yàn)镾tudent類(lèi)已經(jīng)加載了,所以系統(tǒng)也知道了stu是什么東西。因?yàn)橐米兞恐赶蛞粋(gè)地址(說(shuō)白了就是保存地址的變量而已,相當(dāng)于C語(yǔ)言中的指針),所占空間不大,所以把其創(chuàng)建在棧中即可。

  接著從=右邊開(kāi)始,先讀到new Student,即創(chuàng)建一個(gè)裸對(duì)象(naked object),或者說(shuō)空白對(duì)象。因?yàn)轭?lèi)對(duì)象可能很大(如繼承),所以應(yīng)創(chuàng)建在堆中。這個(gè)裸對(duì)象主要保存自己的屬性,代碼區(qū)中的代碼只是指導(dǎo)如何去做,而真正申請(qǐng)內(nèi)存空間是在對(duì)象中。每個(gè)對(duì)象都有一個(gè)隱藏屬性,叫做代碼指針,指向?qū)ο笏幍念?lèi),每個(gè)對(duì)象只要保存自己個(gè)性化的特征就行了,這樣可以減少內(nèi)存的開(kāi)銷(xiāo),。方法可以共用,而屬性不可以,才能體現(xiàn)出個(gè)性化。就像你不想和別人共用一個(gè)名字一樣,但行為可以是一致的,可以一起上學(xué)、一起吃飯。每個(gè)對(duì)象還有另一個(gè)隱藏屬性,this指針,保存了本對(duì)象在內(nèi)存中的位置(俗稱(chēng)為指向自己)。

  ps:一個(gè)對(duì)象的大小只跟屬性的多少有關(guān),而和代碼的數(shù)量無(wú)關(guān)。屬性是主人,方法是仆人,為屬性服務(wù)。一個(gè)裸對(duì)象通過(guò)初始化,使其內(nèi)部的空白對(duì)象屬性獲得對(duì)應(yīng),體現(xiàn)出個(gè)性化,然后才能進(jìn)入正式使用。就像人一樣,有名字、年齡、要上學(xué)等,從嬰兒到成人,其初 始化是一個(gè)漫長(zhǎng)的過(guò)程。

  再接著遇到student ( ),這是一個(gè)構(gòu)造方法(constructor),調(diào)用該方法為空白對(duì)象提供初始化服務(wù)。

  ps:構(gòu)造方法地位重要,所以被特批能使用類(lèi)名作為自己的名字,即與類(lèi)同名。如果一個(gè)類(lèi)沒(méi)有顯示書(shū)寫(xiě)一個(gè)構(gòu)造方法,系統(tǒng)會(huì)自動(dòng)為其添加一個(gè),該方法是一個(gè)無(wú)參空實(shí)現(xiàn)的構(gòu)造方法。構(gòu)造方法不能有返回值,而不是沒(méi)有返回值(沒(méi)有即為void).

  最后把創(chuàng)建完的對(duì)象的地址通過(guò)=賦值給stu,以后對(duì)對(duì)象的的操作,只要通引用變量stu就可以了。我們可以把stu想像成是一根套住對(duì)象的繩子,繩子的數(shù)據(jù)類(lèi)型決定了該繩子能套住什么樣的對(duì)象。通過(guò)繩子對(duì)對(duì)象發(fā)號(hào)施令(就如我們用遙控器[引用]去操控電視機(jī)[對(duì)象]一樣),對(duì)象收到命令后會(huì)訪問(wèn)其的代碼指針,找到代碼區(qū)中相應(yīng)的代碼并執(zhí)行,人只能和棧打交道,而棧再和堆打交道。

  至此語(yǔ)句Student stu = new Student( )就執(zhí)行完了,接下去就是使用stu工作了。

  ps:附件是對(duì)象創(chuàng)建內(nèi)存布局圖。

【JAVA對(duì)象創(chuàng)造及內(nèi)存布局介紹】相關(guān)文章:

java內(nèi)存的詳細(xì)介紹06-04

查看java對(duì)象所占的內(nèi)存大小的方法09-03

Java內(nèi)存回收07-17

Java的內(nèi)存模型09-22

Java 對(duì)象和類(lèi)的介紹07-14

Java內(nèi)存是如何劃分的10-21

C語(yǔ)言程序的內(nèi)存如何布局09-06

Java內(nèi)存回收相關(guān)知識(shí)10-09