国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Java內(nèi)存模型描述及變量運(yùn)用分析

2019-09-10 07:22:44王茂鋼
現(xiàn)代信息科技 2019年4期

摘 要:在使用Java編程的過(guò)程中,內(nèi)存是保障編程程序順利進(jìn)行的重要資源,而加強(qiáng)對(duì)內(nèi)存的合理、有效運(yùn)用,有助于編程效率的極大提升,并且在大量的研究和探索中,挖掘出其更加全面的功能。本文主要對(duì)Java內(nèi)存模型的概念、Java的內(nèi)存分配及相關(guān)功能進(jìn)行了介紹,最后通過(guò)對(duì)Java內(nèi)存的詳細(xì)分析,明確了Java內(nèi)存分配機(jī)制的具體應(yīng)用,以供相關(guān)研究工作者參考。

關(guān)鍵詞:Java內(nèi)存模型;Java堆;內(nèi)存分配;Java虛擬機(jī)棧

中圖分類(lèi)號(hào):TP311.11 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2019)04-0098-02

Java Memory Model Description and Variable Utilization Analysis

WANG Maogang

(Guangdong Industry and Trade College,F(xiàn)oshan 528237,China)

Abstract:In the process of using Java programming,memory is an important resource to ensure the smooth progress of programming program,and strengthening the rational and effective use of memory will help greatly improve the efficiency of programming,and in a large number of research and exploration,excavate its more comprehensive functions. In this paper,the concept of Java memory model,Java memory allocation and related functions are introduced. Finally,through the detailed analysis of Java memory,the specific application of Java memory allocation mechanism is clarified for the reference of relevant researchers.

Keywords:Java memory model;Java heap;memory allocation;Java virtual machine stack

0 引 言

運(yùn)用具有特定體系結(jié)構(gòu)的計(jì)算機(jī)來(lái)開(kāi)發(fā)和設(shè)計(jì)各種編程程序時(shí),需加強(qiáng)對(duì)計(jì)算機(jī)內(nèi)存的管理和合理運(yùn)用。在保存和運(yùn)行各種程序時(shí),需要依靠?jī)?nèi)存的作用來(lái)實(shí)現(xiàn),此外,在保存執(zhí)行結(jié)果時(shí),也需發(fā)揮內(nèi)存的作用。Java語(yǔ)言是面向?qū)ο?、服?wù)于對(duì)象的,在它的內(nèi)部結(jié)構(gòu)中,具備完善的自動(dòng)管理能力和設(shè)計(jì)內(nèi)存模型的作用。開(kāi)發(fā)者在編制相應(yīng)的代碼,創(chuàng)建一定的應(yīng)用程序時(shí),既需要確保算法的科學(xué)和合理,又要對(duì)Java的內(nèi)存模型及相關(guān)的管理策略進(jìn)行深入理解,從而在編程的過(guò)程中,充分發(fā)揮它們的作用來(lái)促進(jìn)編程工作的順利進(jìn)行。本文主要分析了Java內(nèi)存模型的含義、Java內(nèi)部組成情況及編程過(guò)程中的應(yīng)用機(jī)制等,希望可為Java編程教學(xué)工作提供有利參考。

1 Java內(nèi)存模型概述

1.1 Java內(nèi)存模型的概念

相比于以往Java對(duì)計(jì)算機(jī)語(yǔ)言的生成,Java平臺(tái)的應(yīng)用有助于集成多處理器及線程技術(shù),該語(yǔ)言主要被具有獨(dú)立性的多種異構(gòu)平臺(tái)所使用。由此可知,Java語(yǔ)言主要運(yùn)用在不同的平臺(tái)之間,具有跨平臺(tái)的性質(zhì),它的這種性質(zhì)主要表現(xiàn)為當(dāng)對(duì)*.java源程序進(jìn)行編譯,使其變?yōu)?.class的字節(jié)碼后,該字節(jié)碼文件具有跨平臺(tái)性質(zhì)。然而,在對(duì)該字節(jié)碼文件進(jìn)行執(zhí)行時(shí),還需利用Java虛擬機(jī)即JVM(Java Virtual Machine)來(lái)加載、解釋、校驗(yàn)、運(yùn)行等字節(jié)碼文件,從而來(lái)更好的執(zhí)行該文件,Java虛擬機(jī)與各項(xiàng)操作系統(tǒng)都有很大關(guān)聯(lián)。通過(guò)Java程序在執(zhí)行時(shí)的具體流程可知,在內(nèi)存中,加載完字節(jié)碼文件后,需依靠JVM對(duì)內(nèi)存的管理作用,來(lái)有效的執(zhí)行該程序。Java內(nèi)存模型對(duì)于程序中的數(shù)組元素、實(shí)例域等變量之間的關(guān)系進(jìn)行了描述,并且在進(jìn)行編程時(shí),利用計(jì)算機(jī)系統(tǒng),完成在內(nèi)存中儲(chǔ)存相關(guān)變量、然后再次取出變量等工作,對(duì)象始終被存儲(chǔ)在內(nèi)存里面,然而,利用處理器、運(yùn)行庫(kù)或者編譯器,可以隨意將位于內(nèi)存中的變量進(jìn)行存儲(chǔ)或者取出。

1.2 Java主要內(nèi)部結(jié)構(gòu)及作用

在對(duì)Java虛擬機(jī)(JVM)的內(nèi)部結(jié)構(gòu)進(jìn)行劃分時(shí),可將其分為幾個(gè)不同的區(qū)域,而且每個(gè)區(qū)域都具有特定的功能,它們對(duì)各自的數(shù)據(jù)類(lèi)型進(jìn)行存儲(chǔ),大多數(shù)內(nèi)存區(qū)會(huì)在JVM和線程的創(chuàng)建和消亡狀態(tài)下發(fā)生相應(yīng)改變。根據(jù)內(nèi)存區(qū)域的不同,它們的生命周期和存儲(chǔ)類(lèi)型也有所差別,但是它們卻可以對(duì)程序在運(yùn)用時(shí)所具有的數(shù)據(jù)進(jìn)行存儲(chǔ)。在處于運(yùn)行狀態(tài)時(shí),JVM可將數(shù)據(jù)區(qū)域進(jìn)行劃分,而且有一些內(nèi)存區(qū)域和子系統(tǒng)被包含在JVM的內(nèi)部結(jié)構(gòu)中,JVM的子系統(tǒng)為類(lèi)加載器,執(zhí)行引擎位于內(nèi)存區(qū)域中。

1.2.1 程序計(jì)數(shù)器

程序計(jì)數(shù)器作為一個(gè)內(nèi)存區(qū)域,具有較小的空間和較快的速度,該區(qū)域處于CPU的內(nèi)部位置,具有有限的數(shù)量。它作為指示指令地址的功能區(qū)域,可以用來(lái)指示字節(jié)碼的行號(hào)。在對(duì)該區(qū)域進(jìn)行控制時(shí),無(wú)法由Java的內(nèi)部應(yīng)用程序來(lái)直接完成,需要字節(jié)碼解釋器在對(duì)程序計(jì)數(shù)器的數(shù)值進(jìn)行改變的情況下,對(duì)將執(zhí)行的字節(jié)碼指令進(jìn)行選擇,因此,程序計(jì)數(shù)器與線程具有相同的生命周期。

1.2.2 Java虛擬機(jī)棧

Java虛擬機(jī)棧一般存在于通用RAM中,程序指令在進(jìn)行操作時(shí),需要由出入棧配合來(lái)完成。有較多的線程被保存在Java棧中,而且其方法又在棧幀中被存儲(chǔ)。在本地方法棧中,保存著有關(guān)本地方法的調(diào)用狀態(tài),并且與Java棧處于相互分離的狀態(tài)。對(duì)于線程中的方法,需要在多個(gè)組合棧幀的作用下來(lái)進(jìn)行調(diào)用,伴隨著方法的調(diào)用和完成,JVM對(duì)于新棧幀的處理狀態(tài)也不同,可以完成對(duì)棧幀的入棧和出棧。因此,在分配Java棧的存儲(chǔ)空間時(shí),可以使內(nèi)存空間在移動(dòng)棧指針的作用下,來(lái)進(jìn)行動(dòng)態(tài)調(diào)整,這對(duì)于程序的運(yùn)行具有較大的限制作用,促使其靈活性大大降低。但這種方法只對(duì)Java的基本數(shù)據(jù)類(lèi)型適用,可用來(lái)存儲(chǔ)Java對(duì)象的引用信息。

1.2.3 Java堆

Java堆一般也在RAM中儲(chǔ)存,它作為一種內(nèi)存池,具有通用性質(zhì),可將Java引用類(lèi)型的實(shí)例如數(shù)組、類(lèi)類(lèi)型、接口等進(jìn)行存放。在創(chuàng)建對(duì)象時(shí),主要由數(shù)組實(shí)例、類(lèi)實(shí)例及派生實(shí)例來(lái)完成。Java堆的創(chuàng)建一般在啟動(dòng)虛擬機(jī)時(shí)進(jìn)行,并且對(duì)于所有的線程具有共享作用。在運(yùn)行時(shí),Java堆可以對(duì)內(nèi)存進(jìn)行動(dòng)態(tài)分配,對(duì)于那些沒(méi)有引用價(jià)值的對(duì)象實(shí)例,可由Java的垃圾收集器(Garbage Collection)來(lái)進(jìn)行自動(dòng)回收。編譯器可以在不知曉堆的生命周期、存儲(chǔ)區(qū)域、對(duì)象存活時(shí)間等問(wèn)題的情況下運(yùn)行。因此,相對(duì)于棧的分配方式,堆具有相對(duì)靈活的分配策略,然而卻具有較慢的存取速度。在棧中存儲(chǔ)的數(shù)據(jù)具有共享性,但是由于棧具有獨(dú)特的結(jié)構(gòu)類(lèi)型,因此,棧的分配不夠靈活,必須確定棧中的生存期及數(shù)據(jù)數(shù)值。因此,與棧相比,在對(duì)存儲(chǔ)空間進(jìn)行分配時(shí),堆需要花費(fèi)較多的時(shí)間。

1.2.4 方法區(qū)

JVM中的所有線程都可以對(duì)方法區(qū)進(jìn)行共享,它的存儲(chǔ)對(duì)象為Java類(lèi)的元數(shù)據(jù)類(lèi)型。例如:類(lèi)的常量池、方法信息、類(lèi)型信息及域信息等,其中類(lèi)型信息又包含類(lèi)型的修飾符、名稱、接口類(lèi)表及父類(lèi)的全名稱等。

2 Java程序內(nèi)存分配

在JVM自動(dòng)管理機(jī)制的作用下,開(kāi)發(fā)者的編程效率可以被極大地提升,然而,在過(guò)度依賴自動(dòng)管理機(jī)制的情況下,就會(huì)使開(kāi)發(fā)者喪失對(duì)問(wèn)題的定位和解決能力。因此,需要充分掌握J(rèn)VM的自動(dòng)管理機(jī)制、內(nèi)存模型及內(nèi)存分配方法。

Java在對(duì)內(nèi)存進(jìn)行分配時(shí),可以選擇在棧上、堆上或者靜態(tài)存儲(chǔ)區(qū)域來(lái)完成。在使用棧上分配時(shí),可以對(duì)Java的引用類(lèi)型變量及基本數(shù)據(jù)類(lèi)型變量進(jìn)行分配,堆上則可將對(duì)象實(shí)例分配給引用類(lèi)型。在程序中創(chuàng)建對(duì)象實(shí)例時(shí),可由new來(lái)完成,然后在堆內(nèi)存中為該對(duì)象分配一定的存儲(chǔ)空間,從而用以存儲(chǔ)對(duì)象中的多個(gè)不同的成員變量。當(dāng)這些對(duì)象實(shí)例不需再被運(yùn)用的情況下,就可在垃圾收集器的作用下,對(duì)其進(jìn)行回收處理。當(dāng)JVM在運(yùn)行程序時(shí),字節(jié)碼就會(huì)在類(lèi)加載器的作用下被加載。方法區(qū)主要用于存儲(chǔ)類(lèi)文件中的一些信息和字節(jié)碼等,Java堆和Java虛擬機(jī)棧則對(duì)一些重要信息進(jìn)行存儲(chǔ)。

Java虛擬機(jī)棧作為線程的特有內(nèi)存區(qū)域,只由一些特定的線程進(jìn)行訪問(wèn)。Java虛擬機(jī)棧與線程具有一致的生命周期,可以對(duì)棧幀進(jìn)行存儲(chǔ)。Java堆作為線程的一種共享區(qū)域,它的存儲(chǔ)對(duì)象為對(duì)象實(shí)例,此外,它也可以作為垃圾收集器在對(duì)垃圾進(jìn)行回收處理的重要區(qū)域。

3 Java編程時(shí)的內(nèi)存分析及具體應(yīng)用

3.1 創(chuàng)建Java對(duì)象

在Java中創(chuàng)建對(duì)象時(shí),可以通過(guò)以下幾種方式來(lái)完成:(1)其一是一種最常見(jiàn)的對(duì)象創(chuàng)建方法,即使用new語(yǔ)句來(lái)創(chuàng)建對(duì)象;(2)通過(guò)反射方式,調(diào)用實(shí)例的方法來(lái)完成;(3)對(duì)對(duì)象的clone()進(jìn)行調(diào)用的方式;(4)采用反序列化手段調(diào)用對(duì)象的方式來(lái)完成。

3.2 對(duì)象內(nèi)存結(jié)構(gòu)及初始化程序

在Java內(nèi)存模型中,需在完成相應(yīng)的初始化操作之后,再對(duì)類(lèi)的成員變量加以使用,在依靠自動(dòng)化設(shè)計(jì)對(duì)每一個(gè)基本數(shù)據(jù)類(lèi)型進(jìn)行初始化操作時(shí),它們都可以擁有一個(gè)相應(yīng)的初始數(shù)值,例如:引用類(lèi)型中的各個(gè)元素,它的初始數(shù)值為NULL。在對(duì)成員變量采取初始化操作時(shí),可以依據(jù)第二種初始化方式即是指在類(lèi)的構(gòu)造方法里對(duì)成員變量進(jìn)行初始化,在對(duì)成員變量進(jìn)行初值確定時(shí),可在定義類(lèi)成員變量的區(qū)域來(lái)完成。第三種對(duì)變量進(jìn)行初始化的方式,是指在初始化塊中對(duì)已經(jīng)聲明的成員變量進(jìn)行初始化,它是指是在對(duì)某一種方法進(jìn)行調(diào)用的情況下,來(lái)初始化其中各個(gè)成員的變量。在類(lèi)的內(nèi)部,初始化的順序與對(duì)變量的定義順序密切相關(guān)。即使在方法定義的過(guò)程中,存在有一些變量定義,在對(duì)這些變量定義進(jìn)行初始化時(shí),也可以在調(diào)用任何方法之前來(lái)進(jìn)行。

4 結(jié) 論

為了更好的掌握J(rèn)ava的編程功能,了解Java的具體應(yīng)用方法,需加強(qiáng)對(duì)Java內(nèi)存模型結(jié)構(gòu)的理解,并且熟悉Java功能的分配情況。在編程程序運(yùn)行的過(guò)程中,JVM的核心區(qū)域即是數(shù)據(jù)區(qū),此外,編程過(guò)程也同樣涉及到了方法區(qū)、Java堆及JVM棧,而且它們分別具有相應(yīng)的存儲(chǔ)內(nèi)容,即方法區(qū)存儲(chǔ)的內(nèi)容為對(duì)象類(lèi)型數(shù)據(jù),Java堆對(duì)對(duì)象實(shí)例進(jìn)行存儲(chǔ),而JVM棧則主要存儲(chǔ)引用變量及基本數(shù)據(jù)類(lèi)型的變量等。在創(chuàng)建對(duì)象、處理對(duì)象的基礎(chǔ)上,進(jìn)一步展示了內(nèi)存模型的相關(guān)功能,促使人們了解了Java內(nèi)存模型中各個(gè)功能的分配情況,并且對(duì)成員變量的初始化問(wèn)題有了一個(gè)更加深入的了解。相信在具體的實(shí)踐和創(chuàng)新條件下,Java內(nèi)存模型也會(huì)有所改進(jìn)和更新,并通過(guò)對(duì)各項(xiàng)功能的合理分配,來(lái)促進(jìn)編程的順利進(jìn)行。

參考文獻(xiàn):

[1] 張紅,王曉明,曹潔,等.Hadoop云平臺(tái)MapReduce模型優(yōu)化研究 [J].計(jì)算機(jī)工程與應(yīng)用,2016,52(22):22-25.

[2] Zhang Y,F(xiàn)eng X. An operational happens-before memory model [J]. Frontiers of Computer Science,2016,10(1):54-81.

[3] 楊蘭.計(jì)算機(jī)軟件開(kāi)發(fā)的JAVA編程語(yǔ)言及其實(shí)際應(yīng)用 [J].電子設(shè)計(jì)工程,2017,25(21):49-52+56.

[4] 陳夢(mèng)凱,李小雅.基于JAVA編程的危險(xiǎn)化學(xué)品事故預(yù)測(cè)管理模型的建立 [J].赤峰學(xué)院學(xué)報(bào)(自然科學(xué)版),2016,32(19):30-32.

作者簡(jiǎn)介:王茂鋼(1963.3-),男,漢族,四川渠縣人,講師,畢業(yè)于華南師范大學(xué),本科,研究方向:計(jì)算機(jī)教學(xué)及應(yīng)用。

察雅县| 什邡市| 海伦市| 博罗县| 大同县| 施秉县| 珲春市| 奎屯市| 天台县| 咸丰县| 通河县| 桂东县| 巫山县| 高要市| 南华县| SHOW| 静乐县| 元氏县| 元江| 门源| 靖边县| 若尔盖县| 桃江县| 广昌县| 通州市| 三门县| 沿河| 清水河县| 凉山| 孟州市| 余干县| 隆尧县| 荣成市| 陆良县| 高清| 通河县| 洪江市| 吴堡县| 中宁县| 温泉县| 黄大仙区|