摘要:堆棧位于通用隨機訪問存儲器中,但通過堆棧指針可以從處理器那里獲得直接支持。堆棧指針若向下移動,則分配新的內存若向上移動,則釋放那些內存。創(chuàng)建程序時,系統(tǒng)必須知道存儲在堆棧內所有項的確切聲明周期,以便上下移動堆棧指針。
寫在前面
首先我想說的是 Java編程思想——知識卡片 將是一系列文章,文章的內容是我閱讀《Java編程思想》這本書的心得體會,那么我為什么要寫這一系列的文章呢?原因有一下幾個方面:
重拾Java,因工作項目的特殊性,我已經一年多沒使用Java語言了。
想利用自己的業(yè)余時間寫點東西幫助那些需要幫助的人。
將整本書的知識碎片化,充分利用自己零碎的時間。
一般情況下,最新文章會在我的微信公眾號:Java編程社區(qū) 更新,感興趣的話呢,可以加加關注。
好了,我們開始進入正題:
學Java的人都知道,Java是一門面向對象的語言(OOP),盡管Java是基于C++的,但是相比之下,Java是一種更“純粹”的面向對象程序設計語言。正所謂“萬物皆對象”,Java語言假設我們只進行面向對象的程序設計,也就是說,我們開始使用Java進行設計之前必須轉換思想,將我們的注意力轉換到對象上來。這個是我們使用Java語言的基本功。
每種編程語言都有自己的數據處理方式。有些時候,程序員必須時刻留意準備處理的是什么類型,是直接操縱元素,還是用某種基于特殊語法的間接表示來操縱對象?在C和C++里我們使用的是指針。在Java里這一切都得到了簡化,因為“萬物皆對象”,一切都被視為對象。盡管一切都看作對象,但操縱的標識符實際上是對象的一個引用。這里通過一個生活中的例子來幫助理解。生活中我們使用遙控器(引用)來操縱電視機(對象)。當要改變電視機的頻道或音量時,實際操縱的是遙控器(引用),再由遙控器來控制電視(對象)。如果想在房間里四處走走,同時又能操縱電視機,那么只需攜帶遙控器(引用)而不是電視機(對象)。
我們來創(chuàng)建一個String引用:
String str;
這里的str只是一個引用,并非對象,引用是可以獨立存在的,并不一定需要一個對象與之關聯(lián),就如即使沒有電視機,遙控器也可以獨立存在。但是上面這種創(chuàng)建并不安全,安全的做法是,我們創(chuàng)建引用的同時進行初始化。比如:
String str = "hello";卡片02、程序運行時,內存是怎樣分配的呢?
程序在運行時,有五個不同的地方可以存儲數據:
1、寄存器:這是最快的存儲區(qū),因為他位于不同于其他存儲區(qū)的地方--處理器內部。但是寄存器的數量及其有限,所以寄存器根據需求進行分配,你不能直接控制,也不能在程序中感覺到寄存器存在的任何跡象。
2、堆棧:位于通用RAM(隨機訪問存儲器)中,但通過堆棧指針可以從處理器那里獲得直接支持。堆棧指針若向下移動,則分配新的內存;若向上移動,則釋放那些內存。這是一種快速有效的分配存儲的方法,僅次于寄存器。創(chuàng)建程序時,Java系統(tǒng)必須知道存儲在堆棧內所有項的確切聲明周期,以便上下移動堆棧指針。這一約束限制了程序的靈活性,所以雖然有些Java數據存儲在堆棧中--特別是對象引用,但是Java對象并不存儲于其中。
3、堆:一種通用的內存池(也位于RAM區(qū)),用于存放所有的Java對象。堆不同于堆棧的好處是:編譯器不需要知道存儲的數據在堆里存活多長時間。因此,在堆里分配有很大的靈活性。當需要一個對象時,只需用new寫一行簡單的代碼,當執(zhí)行這行代碼時,會自動在堆里進行存儲分配。當然,為這種靈活性必須要付出相應的代價:用堆進行存儲分配和清理可能比用堆棧進行存儲分配需要更多的時間
4、常量存儲:常量值通常直接存放在程序代碼內部,這樣做是安全的,因為他們永遠不會被改變。有時在嵌入式系統(tǒng)中,常量會和其他部分隔離開,所以,在這種情況下,可以選擇將其存放在ROM(只讀存儲器)中。
5、非RAM存儲:如果數據完全存活于程序之外,那么他可以不受程序的任何限制,在程序沒有運行時也可以存在。其中兩個基本的例子是:流對象和持久化對象,在“流對象”中,對象轉化成字節(jié)流,通常被發(fā)送給另一臺機器,在“持久化對象”中,對象被存放于磁盤上,因此即使程序終止,他們仍可以保持自己的狀態(tài)。這種存儲方式的技巧在于:把對象轉化成可以存放在其他媒介上的事物,在需要時,可以恢復成常規(guī)的、基于RAM的對象。Java提供了對輕量級持久化的支持,而諸如JDBC和hibernate這樣的機制提供了更加復雜的對在數據庫中存儲和讀取對象信息的支持。
今天就到這了。。。
歡迎大家關注我的微信公眾號 Java編程社區(qū) 一起交流學習
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76604.html
摘要:知識圖譜開源庫或簡稱是一個用于構建語義和關聯(lián)數據應用程序的自由和開源的框架。垂直行業(yè)應用下面將以金融醫(yī)療電商行業(yè)為例,說明知識圖譜在上述行業(yè)中的典型應用。 知識圖譜構建的關鍵技術1 知識提取2 知識表示3 知識融合4 知識推理知識推理則是在已有的知識庫基礎上進一步挖掘隱含的知識,從而豐富、擴展知識庫。在推理的過程中,往往需要關聯(lián)規(guī)則的支持。由于實體、實體屬性以及關系的多樣性,人們很難窮舉所有...
摘要:我們繼續(xù)看代碼的意思是這個是一段內嵌匯編代碼。也就是在語言中使用匯編代碼。就是匯編版的比較并交換。就是保證在多線程情況下,不阻塞線程的填充和消費。微觀上看匯編的是實現操作系統(tǒng)級別的原子操作的基石。 原文地址:https://www.xilidou.com/2018/02/01/java-cas/ CAS 是現代操作系統(tǒng),解決并發(fā)問題的一個重要手段,最近在看 eureka 的源碼的時候。...
摘要:基礎知識之日期操作簡介中的時間使用標準類庫的其表示特定的瞬間,精確到毫秒。常用的方法實例化對象簡介是一個以與語言環(huán)境有關的方式來格式化和解析日期的具體類。它允許進行格式化日期文本解析文本日期和規(guī)范化。 Java基礎知識之日期操作 1. Date 簡介 Java中的時間使用標準類庫的java.util.Date,其表示特定的瞬間,精確到毫秒。 是用距離一個固定時間點的毫秒數(可正可負,l...
摘要:全棧數據之門前言自強不息,厚德載物,自由之光,你是我的眼基礎,從零開始之門文件操作權限管理軟件安裝實戰(zhàn)經驗與,文本處理文本工具的使用家族的使用綜合案例數據工程,必備分析文件探索內容探索交差并補其他常用的命令批量操作結語快捷鍵,之門提高效率光 showImg(https://segmentfault.com/img/bVK0aK?w=350&h=350); 全棧數據之門 前言 自強不息,...
閱讀 2181·2021-11-24 10:26
閱讀 2792·2021-11-23 09:51
閱讀 2907·2021-10-08 10:05
閱讀 1683·2021-09-22 15:18
閱讀 1619·2019-08-29 18:45
閱讀 2143·2019-08-29 18:40
閱讀 3332·2019-08-29 16:16
閱讀 2849·2019-08-29 14:21