真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java高級之內(nèi)存初始化時機

>研究內(nèi)存的初始化時機,有助于設計“降低應用內(nèi)存消耗”方案!

成都創(chuàng)新互聯(lián)公司是專業(yè)的堆龍德慶網(wǎng)站建設公司,堆龍德慶接單;提供成都網(wǎng)站建設、網(wǎng)站建設,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行堆龍德慶網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

public class A {

private Object mObject = new Object();// or static

private static long sStartInitlizeTime;

private static String mClzName;

private static final long sDelayTime = 2000;

static {

sStartInitlizeTime = System.currentTimeMillis();

while (System.currentTimeMillis() - sStartInitlizeTime > sDelayTime) {

break;

}

System.out.println(mClzName + " static塊 " + sDelayTime + "秒延時結(jié)束");

}

public A(String clzName) {

// TODO Auto-generated constructor stub

mClzName = clzName;

}

public void print() {

System.out.println(mClzName + "\t" + mObject.toString());

}

}

先看定義的實例類A,使用“靜態(tài)塊”、“構造器”、“print方法”來監(jiān)控“類何時初始化”!

public class TestAInitialize {

public static void main(String[] args) {

for (int i = 0; i < 5; i++) {

String name = "A" + i;

new Thread(new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub

new A(name).print();

}

}).start();

}

}

}

用這個類,來驗證類A的初始化內(nèi)容

結(jié)果1:

null static塊 2000秒延時結(jié)束

A3 java.lang.Object@6b19c877

A1 java.lang.Object@6695b54d

A4 java.lang.Object@1e6fa5a2

A2 java.lang.Object@8730a97

A0 java.lang.Object@44029c5d

說明兩個問題

第一、“static塊”先于“構造器”執(zhí)行(延時任務就是用來驗證這個結(jié)論的);

第二、非靜態(tài)的Object,每次都被new了一個。

把Ojbect改成static的

結(jié)果2:

null static塊 2000秒延時結(jié)束

A2 java.lang.Object@6695b54d

A0 java.lang.Object@6695b54d

A3 java.lang.Object@6695b54d

A4 java.lang.Object@6695b54d

A1 java.lang.Object@6695b54d

結(jié)果1與結(jié)果2,對比說明:靜態(tài)變量只會被初始化一次。

------------------------------------------------------------------------------------------------------------------------

類何時初始化呢?

public class TestInitialize {

/**

* 類加載

*/

private static void testClassLoad() {

System.out.println("---------testClassLoad--------------");

try {

Class.forName("A", false, TestInitialize.class.getClassLoader());

} catch (ClassNotFoundException e) {

System.out.println("Initalize A is false " + e.getMessage());

}

try {

Class.forName("A", true, TestInitialize.class.getClassLoader());

} catch (ClassNotFoundException e) {

System.out.println("Initalize A is true " + e.getMessage());

}

Class clzA = StaticA.class;

System.out.println(clzA.getName());

}

/**

* 類初始化

*/

private static void testClassInitialize() {

System.out.println("------------testClassInitialize----------");

StaticA.print();

}無錫×××醫(yī)院 https://yyk.familydoctor.com.cn/20612/

public static void main(String[] args) {

testClassLoad();

testClassInitialize();

}

}

只執(zhí)行testClassLoad方法,

結(jié)果1:

---------testClassLoad--------------

Initalize A is false A

Initalize A is true A

com.java.thinking.dalvik.StaticA

說明:不論加載類A,還是調(diào)用A的類方法,都不會執(zhí)行初始化操作。

只執(zhí)行testClassInitliaze方法,

結(jié)果2:

------------testClassInitialize----------

null static塊 2000毫秒延時結(jié)束

null java.lang.Object@7852e922

說明:類的“方法”被調(diào)用時,類才真正初始化。同理可證,類的“變量”被調(diào)用時,類才真正初始化。

PS:被調(diào)用,無論是直接new對象、定義靜態(tài)方法/變量,還是通過反射等操作,都可以。


分享名稱:Java高級之內(nèi)存初始化時機
當前鏈接:http://weahome.cn/article/pscess.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部