其他
面试题:Java对象不再使用时,为什么要赋值为null?
# 前言
# 示例代码
public static void main(String[] args) {
if (true) {
byte[] placeHolder = new byte[64 * 1024 * 1024];
System.out.println(placeHolder.length / 1024);
}
System.gc();
}
65536
[GC 68239K->65952K(125952K), 0.0014820 secs]
[Full GC 65952K->65881K(125952K), 0.0093860 secs]
public static void main(String[] args) {
if (true) {
byte[] placeHolder = new byte[64 * 1024 * 1024];
System.out.println(placeHolder.length / 1024);
placeHolder = null;
}
System.gc();
}
65536
[GC 68239K->65952K(125952K), 0.0014910 secs]
[Full GC 65952K->345K(125952K), 0.0099610 secs]
# 运行时栈
典型的运行时栈
public static void main(String[] args) {
int a = 1;
int b = 2;
int c = a + b;
}
| :-: | :-: |
| 1 | a |
| 2 | b |
| 3 | c |
public static void main(String[] args) {
if (true) {
int a = 1;
int b = 2;
int c = a + b;
}
int d = 4;
}
| :-: | :-: |
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
Java的栈优化
| :-: | :-: |
| 1 | a |
| 2 | b |
| 3 | c |
| 1 | d |
提醒
# GC一瞥
提醒
# JVM的“bug”
public static void main(String[] args) {
if (true) {
byte[] placeHolder = new byte[64 * 1024 * 1024];
System.out.println(placeHolder.length / 1024);
}
System.gc();
}
LocalVariableTable:
Start Length Slot Name Signature
0 21 0 args [Ljava/lang/String;
5 12 1 placeHolder [B
public static void main(String[] args) {
if (true) {
byte[] placeHolder = new byte[64 * 1024 * 1024];
System.out.println(placeHolder.length / 1024);
}
int replacer = 1;
System.gc();
}
LocalVariableTable:
Start Length Slot Name Signature
0 23 0 args [Ljava/lang/String;
5 12 1 placeHolder [B
19 4 1 replacer I
65536
[GC 68239K->65984K(125952K), 0.0011620 secs]
[Full GC 65984K->345K(125952K), 0.0095220 secs]
# 总结
---------
最后,趁着双十一活动,给自己的知识星球打个小广告,本星球主作用:
1、与大家一起分析面试中遇到的问题;
2、与大家一起探讨简历该如何写?
3、如何选择offer?
4、建立一个内推渠道。
感兴趣的可加(目前有折扣),没兴趣的可以忽略。