奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

java語言

JAVA對象創造及內存布局介紹

時間:2024-10-09 21:50:14 java語言 我要投稿
  • 相關推薦

JAVA對象創造及內存布局介紹

  下面是百分網小編收集整理的關于JAVA對象創造及內存布局介紹d的相關內容,歡迎閱讀!

  進程簡略介紹:

  計算機對于內存的分配是以進程為單位的,每個進程在邏輯上是隔離的,每個進程都認為自己是這臺電腦上的唯一程序,自己面對所有的內存空間,(如,你的電腦有2G內存,那么一個進程認為自己可以申請到2G的內存空間)這種技術叫做進程隔離技術,保證了系統不會因為一個進程的失敗,導致系統崩潰。一個進程可以向操作系統申請內存,(操作系統是系統資源的調度者,進程要使用資源必須向操作系統打報告)進程申請到的內存一般以兩種形式使用,一種是棧(stack)的形式,另一種是堆(heap)的形式。一個進程可以有多個棧,但只有一個堆。一個棧對應一個線程(thread),一個進程至少需要一個線程,即至少有一個棧。

  現在有一個student類,如下

  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 !");

  }

  }

  現在來創建一個學生對象 Student stu = new Student();

  該語句實際是Student stu = new Student student()的縮寫版,只是人們發現那樣寫很累,于是就把兩個student合二為一了。

  下面分析一下該語句是如何執行的。 進程申請到內存空間,按照兩種方式分配,有的內存分配給棧,有的分配給堆。棧空間比較狹小,有大小限制,堆空間可以很大,大到和內存的容量一致。編譯器是從左到右進行編譯的,程序也是如此執行。

  首先是碰到Student這樣一個符號(token),系統會馬上看下Student是什么東西,不久它發現那是一個類,然后把整個類的代碼加載(class loading)到內存中。程序的代碼必須從磁盤上加載到內存中才能執行,其實cpu只跟內存打交道。只是因為一斷電什么都沒了,所以后面才發明了硬盤,軟盤等。在堆中有一個代碼區(code area),用來存放Student類的代碼。因為棧的空間狹小,而類代碼可能很大,所以要把類代碼加載到堆中。

  然后,遇到stu符號,即創建一個引用變量(或句柄),其數據類型是Student,因為Student類已經加載了,所以系統也知道了stu是什么東西。因為引用變量指向一個地址(說白了就是保存地址的變量而已,相當于C語言中的指針),所占空間不大,所以把其創建在棧中即可。

  接著從=右邊開始,先讀到new Student,即創建一個裸對象(naked object),或者說空白對象。因為類對象可能很大(如繼承),所以應創建在堆中。這個裸對象主要保存自己的屬性,代碼區中的代碼只是指導如何去做,而真正申請內存空間是在對象中。每個對象都有一個隱藏屬性,叫做代碼指針,指向對象所處的類,每個對象只要保存自己個性化的特征就行了,這樣可以減少內存的開銷,。方法可以共用,而屬性不可以,才能體現出個性化。就像你不想和別人共用一個名字一樣,但行為可以是一致的,可以一起上學、一起吃飯。每個對象還有另一個隱藏屬性,this指針,保存了本對象在內存中的位置(俗稱為指向自己)。

  ps:一個對象的大小只跟屬性的多少有關,而和代碼的數量無關。屬性是主人,方法是仆人,為屬性服務。一個裸對象通過初始化,使其內部的空白對象屬性獲得對應,體現出個性化,然后才能進入正式使用。就像人一樣,有名字、年齡、要上學等,從嬰兒到成人,其初 始化是一個漫長的過程。

  再接著遇到student ( ),這是一個構造方法(constructor),調用該方法為空白對象提供初始化服務。

  ps:構造方法地位重要,所以被特批能使用類名作為自己的名字,即與類同名。如果一個類沒有顯示書寫一個構造方法,系統會自動為其添加一個,該方法是一個無參空實現的構造方法。構造方法不能有返回值,而不是沒有返回值(沒有即為void).

  最后把創建完的對象的地址通過=賦值給stu,以后對對象的的操作,只要通引用變量stu就可以了。我們可以把stu想像成是一根套住對象的繩子,繩子的數據類型決定了該繩子能套住什么樣的對象。通過繩子對對象發號施令(就如我們用遙控器[引用]去操控電視機[對象]一樣),對象收到命令后會訪問其的代碼指針,找到代碼區中相應的代碼并執行,人只能和棧打交道,而棧再和堆打交道。

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

  ps:附件是對象創建內存布局圖。

【JAVA對象創造及內存布局介紹】相關文章:

查看java對象所占的內存大小的方法12-04

Java的內存模型11-28

Java內存回收11-25

Java編程節省內存的方法12-16

如何解決java內存泄漏的問題03-03

java面向對象編程講解04-02

Java編程節省內存的方法有哪些11-21

java序列化對象的技巧03-27

java對象持久化的使用技巧03-28

主站蜘蛛池模板: 岳普湖县| 宜昌市| 华坪县| 潍坊市| 平凉市| 崇文区| 招远市| 临朐县| 靖江市| 饶河县| 上蔡县| 虎林市| 西盟| 江孜县| 曲松县| 柳州市| 阳谷县| 无锡市| 星座| 金阳县| 保靖县| 丽水市| 迁西县| 会理县| 宁城县| 弥渡县| 新邵县| 广平县| 梁平县| 定襄县| 兴义市| 密山市| 娄底市| 安西县| 准格尔旗| 灵台县| 和林格尔县| 共和县| 东乡县| 榆中县| 芦溪县|