Linux如何在栈上分配内存,Java堆与栈内存分配及String小记
棧內存?堆內存
基礎類型,對象引用(堆內存地址)
由new創建的對象和數組,
存取速度快
相對于棧內存較慢
數據大小聲明周期必須確定
分配的內存由Java虛擬機自動垃圾回收器管理。動態分配內存大小
共享特性
棧中如果有字符串,則直接引用
如果沒有,開辟新的空間存入值
每new一次在堆內存中生成一個新的對象。
創建之后值可以改變
String類聲明后則不可改變
一、棧內存
基礎類型int, short, long, byte, float, double, boolean, char和對象引用
棧的共享特性
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2); //true
int a=100;
int b=100;
1、編譯器先處理String str1 = "abc";它會在棧中創建一個變量為str1的引用,然后查找棧中是否有abc這個值,如果沒找到,就將abc存放進來,然后將str1指向abc。
2、?? 接著處理String str2 = "abc";在創建完b的引用變量后,因為在棧中已經有abc這個值,便將str2直接指向abc。這樣,就出現了str1與str2同時均指向abc的情況。
二、堆內存
new、newarray、anewarray和multianewarray等指令建立
要注意: 我們在使用諸如String str = "abc";的格式定義類時,總是想當然地認為,創建了String類的對象str。擔心陷阱!對象可能并沒有被創建!而可能只是指向一個先前已經創建的 對象。只有通過new()方法才能保證每次都創建一個新的對象。 由于String類的immutable性質,當String變量需要經常變換其值時,應該考慮使用StringBuffer類,以提高程序效率。
總結
以上是生活随笔為你收集整理的Linux如何在栈上分配内存,Java堆与栈内存分配及String小记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RepeatMasker中如何查找基因组
- 下一篇: linux抓取网络信息,Linux获取所