成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

談JVM移植到ARM環(huán)境中

開發(fā) 后端
JVM是Java Virtual Machine(Java虛擬機(jī))的縮寫,JVM是一種用于計(jì)算設(shè)備的規(guī)范,它是一個(gè)虛構(gòu)出來的計(jì)算機(jī),是通過在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來實(shí)現(xiàn)的。本文主要介紹的是把JVM移植到ARM環(huán)境中,一起來看。

Java,是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計(jì)語言和Java平臺(tái)的總稱。在做Java開發(fā)的時(shí)候常用的JVM內(nèi)存管理有兩種,一種是堆內(nèi)存,一種是棧內(nèi)存。堆內(nèi)存主要用來存儲(chǔ)程序在運(yùn)行時(shí)創(chuàng)建或?qū)嵗膶?duì)象與變量,例如:我們通過new MyClass()創(chuàng)建的類MyClass的對(duì)象。而棧內(nèi)存則是用來存儲(chǔ)程序代碼中聲明為靜態(tài)(或非靜態(tài))的方法。下面我給大家舉個(gè)例子:

例子

就拿上面的例子來說,放在棧內(nèi)存中的有:main,makeThings,放在堆內(nèi)存中有:Test,list,object.

JVM中對(duì)象的生命周期大致可以分為7個(gè)階段:創(chuàng)建階段、應(yīng)用階段、不可視階段、不可到達(dá)階段、可收集階段、終結(jié)階段與釋放階段。

1.創(chuàng)建階段:

(1)為對(duì)象分配存儲(chǔ)空間。

(2)開始構(gòu)造對(duì)象。

(3)遞歸調(diào)用其超類的構(gòu)造方法。

(4)進(jìn)行對(duì)象實(shí)力初始化與變量初始化。

(5)執(zhí)行構(gòu)造方法體。

還有就是你在創(chuàng)建對(duì)象的時(shí)候需要注意的地方:

(1)避免在循環(huán)體中創(chuàng)建對(duì)象,即使該對(duì)象占用內(nèi)存空間不大。

(2)盡量及時(shí)使對(duì)象符合垃圾回收標(biāo)準(zhǔn)。

(3)不要采用過深的繼承層次。

(4)訪問本地變量優(yōu)于訪問類中的變量。

2.應(yīng)用階段:

在應(yīng)用階段涉及到4個(gè)引用:

(1)強(qiáng)引用:是指JVM內(nèi)存管理器從根引用集合出發(fā)遍尋堆中所有到達(dá)對(duì)象的路徑。

(2)軟引用:是具有較強(qiáng)的引用功能,只有當(dāng)內(nèi)存不夠的時(shí)候,才回收這類內(nèi)存,因此內(nèi)存足夠的時(shí)候,不會(huì)被回收。

(3)弱引用:弱引用與軟引用對(duì)象的***不同在于:GC在進(jìn)行回收時(shí),需要通過算法檢查是否回收軟引用對(duì)象,而對(duì)于弱引用來說,GC總是進(jìn)行回收。

(4)虛引用:主要用于輔助finalize函數(shù)的使用。虛引用主要適用于以某種比Java終結(jié)機(jī)制更靈活的方式調(diào)度pre-mortem清除操作。

3.不可視階段:

如果一個(gè)對(duì)象已使用完了,應(yīng)該主動(dòng)將其設(shè)置為null,可以在上面的代碼行obj.doSomething();下添加代碼行obj=null;這樣一行代碼強(qiáng)制將obj對(duì)象置為空值,這樣做的意義就是幫助JVM及時(shí)的發(fā)現(xiàn)這個(gè)垃圾對(duì)象,并且可以及時(shí)的回收該對(duì)象占用的系統(tǒng)資源。

4.不可到達(dá)階段:

處于不可到達(dá)階段的對(duì)象,在虛擬機(jī)所管理的對(duì)象引用根集合中再也找不到直接或間接的強(qiáng)引用,這些對(duì)象通常是指多有線程棧中的臨時(shí)變量,所有已裝載的類的靜態(tài)變量或者對(duì)本地代碼接口(JNI)引用。

5.可收集階段、終結(jié)階段與釋放階段:

當(dāng)對(duì)象處于這個(gè)階段的時(shí)候,可能處于下面三種情況:

(1)垃圾回收器發(fā)現(xiàn)該對(duì)象已經(jīng)不可到達(dá)。

(2)finalize方法已經(jīng)被執(zhí)行。

(3)對(duì)象空間已被重用。

當(dāng)對(duì)象處于上面三種清空的時(shí)候,虛擬機(jī)就可以直接將該對(duì)象回收了。

#p#

析構(gòu)方法finalize

前面我們說了JVM的垃圾回收機(jī)制和JVM中對(duì)象的生命周期,今天給大家講個(gè)方法,叫做析構(gòu)方法finalize,我想搞過C++的人都知道,而且是內(nèi)存管理技術(shù)中相當(dāng)重要的一部分。但是,在Java中好像沒有這個(gè)概念,這是因?yàn)椋碚撋螶VM負(fù)責(zé)對(duì)象的析構(gòu)(銷毀與回收)工作,finalize是Object類中的一個(gè)方法,并且是protected,由于所有的類都繼承了Object對(duì)象,因此,就都隱式的繼承了改方法,不過可以重寫這個(gè)方法,如果重寫此方法,***一句必須寫上super.finalize()語句,因?yàn)閒inalize方法沒有自動(dòng)實(shí)現(xiàn)遞歸調(diào)用。那我們?cè)谑裁磿r(shí)候要重寫它呢?當(dāng)有一些不容易控制并且非常重要的資源時(shí),要放到finalize方法中,例如:一些I/O的操作,數(shù)據(jù)的連接等等,這些資源的釋放對(duì)整個(gè)應(yīng)用程序是非常關(guān)鍵的。

我先讓大家看一段代碼:

例子

finalize方法最終是由JVM中的垃圾回收器調(diào)用的,由于垃圾回收器調(diào)用finalize的時(shí)間是不確定或者不及時(shí)的,調(diào)用時(shí)機(jī)對(duì)我們來說是不可控的,因此我們可以在自己的類中聲明一個(gè)destory()方法,在這個(gè)方法中添加釋放系統(tǒng)資源的處理代碼,但是還是建議你將對(duì)destroy()方法的調(diào)用放入當(dāng)前類的finalize()方法體中,因?yàn)檫@樣做更保險(xiǎn),更安全。靜態(tài)變量

我們知道類中的靜態(tài)變量在程序運(yùn)行期間,其內(nèi)存空間對(duì)所有該類的對(duì)象實(shí)例而言是共享的,為了節(jié)省系統(tǒng)內(nèi)存開銷、共享資源,應(yīng)該將一些變量聲明為靜態(tài)變量。通過下面的例子,你就會(huì)發(fā)現(xiàn)有什么不同。

代碼一:

代碼一

代碼二:

代碼二

代碼一會(huì)在內(nèi)存中保存20000個(gè)weeks的副本,而代碼二則在內(nèi)存中保存1個(gè)weeks的副本,然后共享該副本,這樣的話就不會(huì)造成內(nèi)存的浪費(fèi)。

雖然靜態(tài)的變量能節(jié)約大量的內(nèi)存,但是并不是所有的地方都適合用,建議大家在下列條件都符合的情況下,盡量用靜態(tài)變量:

(1)變量所包含的對(duì)象體積較大,占用內(nèi)存較多。

(2)變量所包含的對(duì)象生命周期較長。

(3)變量所包含的對(duì)象數(shù)據(jù)穩(wěn)定。

(4)該類的對(duì)象實(shí)例有對(duì)該變量所包含的對(duì)象的共享需求。

如果變量不具備上述特點(diǎn),建議不要輕易使用靜態(tài)變量,以免弄巧成拙。

***,再提一點(diǎn)內(nèi)存的優(yōu)化,就是有關(guān)對(duì)象的重用,比如:對(duì)象池和數(shù)據(jù)庫連接池等。那樣的話,是很節(jié)約內(nèi)存空間的,不過,在用的時(shí)候要考慮各個(gè)方面,比如:運(yùn)行環(huán)境的內(nèi)存資源的限制等。為了防止對(duì)象池中的對(duì)象過多,要記得清除。

#p#

內(nèi)存管理有許多技巧和方式

其實(shí)內(nèi)存管理有許多技巧和方式,在這,我給大家介紹一下。

(1)要盡早的釋放無用對(duì)象的引用。如果,該對(duì)象不用了,你可以把它設(shè)置為null.但要注意,如果該對(duì)象是某方法的返回值,千萬不要這樣處理,否則你從該方法中得到的返回值永遠(yuǎn)為空,而且這種錯(cuò)誤不易被發(fā)現(xiàn),因此這時(shí)很難及時(shí)抓住、排除NullPointerException異常。

(2)盡量少用finalize函數(shù)。因?yàn)樗鼤?huì)加大GC的工作量,因此盡量少用finalize方式回收資源。

(3)如果需要使用經(jīng)常用到的圖片,可以使用soft應(yīng)用類型(也就是轉(zhuǎn)換為軟引用類型),它可以盡可能將圖片保存在內(nèi)存中,供程序調(diào)用,而不引起OutOfMemory.

(4)注意集合數(shù)據(jù)類型,包括數(shù)組、樹、圖、鏈表等數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)對(duì)于GC來說,回收更為復(fù)雜。另外,要注意那些全局變量,靜態(tài)變量,這些對(duì)象往往容易引起懸掛對(duì)象,造成內(nèi)存浪費(fèi)。

(5)盡量避免在類的默認(rèn)構(gòu)造器中創(chuàng)建、初始化大量的對(duì)象,防止在調(diào)用其子類的構(gòu)造器時(shí)造成不必要的內(nèi)存資源浪費(fèi)。

(6)盡量避免強(qiáng)制系統(tǒng)做垃圾內(nèi)存回收(通過顯式調(diào)用方法System.gc()),增長系統(tǒng)做垃圾回收的最終時(shí)間,降低系統(tǒng)性能。

(7)盡量避免顯式申請(qǐng)數(shù)組空間,當(dāng)不得不顯式申請(qǐng)數(shù)組空間時(shí)盡量準(zhǔn)確的估計(jì)出其合理值,以免造成不必要的系統(tǒng)內(nèi)存開銷。

(8)盡量在做遠(yuǎn)程方法調(diào)用(RMI)類應(yīng)用開發(fā)時(shí)使用瞬間值變量,除非遠(yuǎn)程調(diào)用端需要獲取該瞬間值變量的值。

(9)盡量在合適的場景下使用對(duì)象池技術(shù)以提高系統(tǒng)的性能,縮減系統(tǒng)內(nèi)存開銷,但是要注意對(duì)象池的尺寸不易過大,及時(shí)清除無效對(duì)象釋放內(nèi)存資源,綜合考慮應(yīng)用運(yùn)行環(huán)境的內(nèi)存資源限制,避免過高估計(jì)運(yùn)行環(huán)境所提供內(nèi)存資源的數(shù)量。

雖然,這些技巧提高不了多少性能,但是,在嵌入式開發(fā),或者要求性能比較高的系統(tǒng)中卻很有用。

【編輯推薦】

  1. JAVA語言關(guān)于字符串替換的思考
  2. Java為什么如此深受廣大開發(fā)者的青睞?
  3. 菜鳥入門 java語言學(xué)習(xí)六大要點(diǎn)
  4. JAVA虛擬機(jī)內(nèi)存分配與回收機(jī)制
  5. JAVA技巧心得 學(xué)Java切忌浮躁
責(zé)任編輯:于鐵 來源: 中國教育在線
相關(guān)推薦

2010-09-27 16:26:09

JVMarm

2021-10-14 15:48:28

鴻蒙HarmonyOS應(yīng)用

2011-06-14 14:18:08

可移植性測試

2010-09-07 14:05:15

Arm移植pppoe

2014-03-18 15:23:58

星際爭霸ARM平臺(tái)

2015-05-05 13:57:12

AndroidWindows

2010-04-14 10:41:40

Oracle移植

2010-04-16 15:32:03

Oracle移植

2009-07-10 09:03:03

GoogleChromeARM

2009-06-30 11:03:09

VxWorksMiniGUI

2011-01-13 14:19:41

solarisLinux

2011-06-28 13:02:06

Qt Qt 4.7.3 ARM

2010-04-30 09:52:07

Oracle移植

2009-08-14 14:50:41

util.concur

2019-12-09 14:13:41

awkPython編程語言

2010-07-23 16:08:38

OPhone平臺(tái)

2013-05-13 09:28:38

移植

2010-10-18 13:53:58

2012-05-18 10:56:40

TitaniumAndroid模塊

2019-06-06 08:55:09

華為禁令開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美视频网 | 男人影音 | 国产视频一区二区 | 亚洲成人av在线播放 | 国产精品久久久免费 | 国产精品成人一区二区三区夜夜夜 | 国产精品a一区二区三区网址 | 日韩综合在线 | 国产精品视频一区二区三区不卡 | 毛片毛片毛片毛片 | 久久久av一区 | 97精品超碰一区二区三区 | 一区二区三区四区av | 成人免费久久 | 国产精品亚洲第一 | 亚洲精品一区国语对白 | 一区二区三区电影在线观看 | 日韩电影中文字幕 | 色综合区| 中文字幕亚洲一区二区三区 | 免费一级黄色电影 | 成人精品一区 | 在线成人| 精品久久久久久久人人人人传媒 | 黄视频网址 | 中文字幕亚洲一区二区va在线 | 久久久久亚洲精品 | 久久国产传媒 | 亚洲欧美日韩精品 | 色综久久 | 视频一区中文字幕 | 亚洲欧洲精品一区 | 日日操夜夜操天天操 | 亚洲欧美综合精品久久成人 | 在线免费av电影 | 免费黄色日本 | 久久人人爽人人爽 | 国产亚洲精品综合一区 | 国产精品国产a级 | 麻豆国产精品777777在线 | 欧美在线视频二区 |