【面試官】JVM的堆內(nèi)存你說說看?
- 面試官:JVM的堆內(nèi)存你說說看?
- 面試官:虛擬機(jī)棧呢?
- 面試官:本地方法棧?
- 面試官:方法區(qū)存放什么內(nèi)容知道吧?
- 面試官:程序計數(shù)器有什么作用?
- 面試官:說說Java變量存儲位置?
大家好,我是南哥。
一個Java學(xué)習(xí)與進(jìn)階的領(lǐng)路人,相信對你通關(guān)面試進(jìn)入心心念念的公司有所幫助。
文章目錄
- JVM內(nèi)存布局
- 堆內(nèi)存
- 虛擬機(jī)棧
- 本地方法棧
- 方法區(qū)
- 程序計數(shù)器
- 變量存儲位置
1. JVM內(nèi)存布局
1.1 堆內(nèi)存
面試官:JVM的堆內(nèi)存你說說看?
我們Java程序員相對C語言老哥來說,南友們不需要寫內(nèi)存管理這些東西。具體什么東西呢?不需要為每個對象去寫繁瑣的釋放內(nèi)存代碼。
以下是一個C語言示例,C語言需要顯式地使用free
函數(shù)來釋放內(nèi)存。
#include <stdio.h>
#include <stdlib.h>
int main() {
// 分配內(nèi)存以存儲一個整數(shù)
int *ptr = malloc(sizeof(int));
if (ptr == NULL) {
printf("內(nèi)存分配失敗\n");
return 1;
}
// 使用分配的內(nèi)存
*ptr = 123;
printf("存儲的整數(shù)是: %d\n", *ptr);
// 完成使用后釋放內(nèi)存
free(ptr);
return 0;
}
我們把重要的內(nèi)存管理最高權(quán)力交給了JVM虛擬機(jī),總得多多了解JVM虛擬機(jī)是如何處理內(nèi)存管理的、包括JVM內(nèi)存區(qū)域包含了什么,否則線上出了什么故障,不了解原理連解決的思路都沒有。
JVM內(nèi)存布局包含了五部分,分別是堆內(nèi)存、本地方法棧、虛擬機(jī)棧、方法區(qū)、程序計數(shù)器。南哥畫畫圖,給你加深理解。
堆內(nèi)存的作用很方便記憶,它的唯一目的就是存放對象實(shí)例。成員變量的變量值無論是基本類型、還是引用類型都存儲在堆內(nèi)存中,而局部變量的變量值如果是引用類型則存儲在堆內(nèi)存中。這點(diǎn)下文南哥會繼續(xù)講到。
public class JavaSouth {
// 成員變量:無論是基本類型、還是引用類型都存儲在堆內(nèi)存中
private int memberInt = 10;
// 成員變量:無論是基本類型、還是引用類型都存儲在堆內(nèi)存中
private String memberString = "Hello, World!";
public void displayInfo() {
// 局部變量:如果是引用類型則存儲在堆內(nèi)存中
String localString = new String("Local String");
System.out.println("Member int: " + memberInt);
System.out.println("Member String: " + memberString);
System.out.println("Local String: " + localString);
}
}
JVM的堆內(nèi)存,在國內(nèi)也被稱為GC堆。說到GC回收,目前主流垃圾回收器都使用了分代收集算法,GC堆被分為了新生代、老年代。
新生代、老年代又使用了不同的垃圾回收算法,如新生代的對象特點(diǎn)就是存活時間短,更適合把內(nèi)存一分為二的復(fù)制算法;而老年代的對象存活時間就相對較長了,各種大對象、小對象也比較復(fù)雜,可以使用標(biāo)
剩余60%內(nèi)容,訂閱專欄后可繼續(xù)查看/也可單篇購買
??以面試官面試的形式,涵蓋了你怒懟大廠面試官、拿下大廠面試所需掌握的核心知識、面試重點(diǎn)! ??相信一定對你順利通關(guān)面試、拿到理想Offer有所幫助! ??花費(fèi)大量精力去制作本專欄,創(chuàng)作不易,各位的支持就是我創(chuàng)作的最大動力!