栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础之《JVM性能调优(3)—堆》

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础之《JVM性能调优(3)—堆》

一、什么是堆,它和栈有什么区别?
1、变量和堆的关系 

package heap;

public class Test01 {
    public static void test() {
        int j = 100;
    }

    public static void main(String[] args) {
        int i = 10;
        test();
    }
}

以上代码的执行顺序:
(1)main方法,java虚拟机栈开辟了一个栈帧,存放变量int i = 10
(2)执行到test方法时,java虚拟机栈新开辟一个栈帧,存放变量int j = 100
(3)test方法执行完后,test栈帧被回收(后进先出),但是main栈帧没执行完就没回收

方法的变量和堆没有关系,存储在栈帧里

2、数组和堆的关系

package heap;

public class Test02 {
    public static void main(String[] args) {
        int[] x = new int[5];
        x[0] = 100;
        x = null;
    }
}

以上代码的执行顺序:
(1)执行main方法,java虚拟机栈开辟了一个栈帧。
当执行int[] x = new int[5]时,栈开辟了x变量空间,该变量存放的是堆的引用地址。
堆开辟了x数组空间,例如0x0001,存放数组的值。数组的元素都设置默认值0.
栈里的x存放的是堆的引用地址,例如x = 0x0001。
(2)执行x[0]=100时,
堆会为x[0]=100,栈的x变量不会变,继续引用堆的地址。 

(3)当执行x=null时,x引用的内存地址被删除,例如栈帧删除了0x0001。而堆中的数组不再被x使用后,就会变成垃圾,堆不会立即删除,它是采用垃圾回收算法删除。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/708542.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号