程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> java學習筆記(4):內存管理,java學習筆記

java學習筆記(4):內存管理,java學習筆記

編輯:JAVA綜合教程

java學習筆記(4):內存管理,java學習筆記


  在內存的方面,Java自身帶有垃圾運行機制,表面上好像我們可以忽略不計,但是如果我們對其加以理解的話,說不定有時會達到事半功倍的效果。

  所以自己花些時間整理一些此類的資料。

 

一.基本概念

1.棧

  對於棧的理解,可以把它想象成一個只有一個入口的空桶,有一個原則就是“先進後出”原則,現在往裡面放東西,比如放進的順序是P,I,N,S,I,L,Y,等下如果要把字母拿出來的話,順序就變成了Y,L,I,S,N,I,P,可以想象的話,就簡單很多了。

  在Java程序中,棧的作用主要是存放由基礎類型生成的變量,像int,char等這些基本類型,還有一個作用是存放對象的引用變量,但是這裡不存放生成的對象。

 

2.堆

  堆在Java中的作用,就是存放由程序new出來的對象和數組。比如當把棧中存放的一個變量賦值時,這個值就被放在了堆中,簡單來說,程序的執行,就是棧和堆的相互關聯。

 

3.數據共享

  代碼:int a = 3;  int b = 3;

  處理的時候,先處理a變量。程序在棧中尋找有沒有變量a,沒有的話就創建一個引用變量a,然後在堆中找有沒有3這個值,沒有的話就創建分配內存創建3的空間,a指向3;接下來處理b = 3,棧中創建b,然後在堆中找尋有沒有3,有了,就直接指向3這個地址了。這樣就出現了a,b共用一個地址的情況了,這就是所謂的數據共享了,這樣做的話就節省了內存的空間,提高了Java的運行質量。

  但需要注意的是,上面所描述到的只是堆中的數據共存,也是只有堆中的數據才能實現共享,因為棧中的數據是現成私有的,不能實現共享。

 

4.靜態內存

  靜態內存,指的是確定內存空間大小的內存,所以這樣的內存一開始的時候內存就可以直接根據他的大小直接分配空間了。

 

5.動態內存

  之所以稱之為動態,就是他的大小是隨機的,要用到多少就分配多少,視情況而定,所以,程序一開始運行的時候摸不著頭腦,只能在他要用到的時候才能達到一個確定的值,隨即才分配內存給他。

 

二.內存機制

1.基本理解:可以想象成C語言中的指針來看,從棧中找到變量,指向變量所對應的地址,也就是他們的值。

 

在分配上,靜態變量直接在類的加載中就分配好內存位置給他們,但是動態變量的分配上,就只是在要用到的時候才分配到的。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved