日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java 内存类_Java学习——类的生命周期和内存

發布時間:2025/4/5 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 内存类_Java学习——类的生命周期和内存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

常識是本能,有足夠的常識便是天才。——肖伯納

一、類的生命周期

類的生命周期:1.加載:將二進制流加載進來.class

2.連接:

驗證:確保加載進來的數據不會損害虛擬機

準備:為類變量分配內存,附默認值

解析:符號引用轉化為直接引用3.初始化:將靜態信息賦值

靜態代碼塊在類初始化時執行,類初始化只初始化一次

4.對象實例化:

4種方法:

new()創建

clone()創建,需要類實現 Cloneable 接口

通過反射機制創建

將一個對象實例化后,進行序列化,再反序列化

創建對象的過程:

Student s1=new Student();

1.加載類

2.在堆中為對象分配一塊內存

3.為各個屬性賦默認值

4.為各個屬性附具體的值

5.執行構造塊

6.執行構造器

7.s1與對象連接上

5.垃圾收集(GC):

發現無用信息對象;

回收被無用對象占用的內存空間,使該空間可被程序再次使用。

finalize():垃圾回收前做一些重要工作

System.gc():啟動一個垃圾回收器,但是java語言規范并不保證GC一定會執行

6.卸載:

當類對象不再被引用,對象就會結束生命周期,類在方法區內的數據也會被卸載, 從而結束類的聲明周期。

這里著重看一下類的初始化:

靜態代碼塊(類加載時就執行)

初始化塊(類對象創建后,就執行)

構造方法(創建相對應類對象·,就執行)

實踐代碼,搓搓小手動起來(=!=):

public class ChuShiHua {

int c;

static int a=10;//靜態屬性

//靜態代碼塊(類加載時就執行)

static {

System.out.println("hello"+a);//hello10

a++;

}

static int b=9;

//初始化塊(類對象創建后,就執行)

{

System.out.println("b++:"+ b++);

System.out.println("b:"+b);

System.out.println("++b:" + ++b);

System.out.println("d:"+d);

}

static int d=11;

//無參構造方法(創建無參類對象·,就執行)

public ChuShiHua(){

System.out.println("c+a :" + c+a);

}

//主函數

public static void main(String[] args) {

System.out.println("ChuShiHua.a :"+ ChuShiHua.a);

ChuShiHua t1=new ChuShiHua();

}

}

輸出結果圖片:

二、內存

不管你是要創建變量還是對象在內存里面都會開辟內存空間。

JVM的內存可分為:堆(heap)、虛擬機棧(stack)和方法區(靜態區),程序計數器,本地方法棧堆:

1.存儲的全部是對象,每個對象都包含一個與之對應的class的信息(class的目的是得到操作指令)

2.jvm只有一個堆區(heap),且被所有線程共享,堆中不存放基本類型和對象引用,只存放對象本身和數組本身;

虛擬機棧區:

1.每個線程包含一個棧區,棧中只保存基礎數據類型本身和自定義對象的引用;

2.每個棧中的數據(原始類型和對象引用)都是私有的,其他棧不能訪問;

3.棧分為3個部分:局部變量表、執行環境上下文、操作指令區(存放操作指令);

方法區(靜態區):

被所有的線程共享,方法區包含對Class的引用,

類變量,常量,方法。常量池和運行時常量池。

本地方法棧:

功能與虛擬機棧類似,不過虛擬機棧是為java服務的,而本地方法棧是為native方法服務的。

程序計數器:

記錄的是當前線程所執行的字節碼的行號指示器。

不管你是要創建變量還是對象在內存里面都會開辟內存空間

他們之間的關聯是通過內存地址進行關聯的

變量:

int a = 10;

1.為變量a在棧區開辟一個內存空間

2.將常量10存放在常量池中并創建內存地址0x0031

3.將常量10的內存地址賦值給變量a的內存空間

4.變量a指向常量10

如下圖:

對象:

Student s = new Student();

1.將Student.class文件加載進內存

2.為變量a在棧中開辟一個內存空間

3.為對象在堆中開辟內存空間并分配內存地址

4.將屬性放到堆中,并進行默認初始化

5.調用對應的構造方法進行對象初始化,并初始化完畢

6.將對象的內存地址賦值給a,讓變量a指向對象

如下圖:

今天學習分享的內容到此為止了,本是想要激勵自己學下去,但發現快樂更是知識在于分享!

作為初學者對于Java的理解實在淺薄,如有錯誤請指正,萬分感謝!

總結

以上是生活随笔為你收集整理的java 内存类_Java学习——类的生命周期和内存的全部內容,希望文章能夠幫你解決所遇到的問題。

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