JAVA中堆,栈,解释

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38403590/article/details/84900589

JVM将JAVA存储内容在内存中分为5个区,现在讲最重要的3个区:

例子: int a  = 1; int b = a; b = 3;

class dog {

private String name;



}

dog "叮当" = new dog("叮当"); dog 小卷毛 = "叮当"; dog 小卷毛 = new dog("小卷毛")

1.栈

        存储基本类型(byte short int long float double boolean  char)

        引用对象 如 a , b ,叮当,小卷毛;

扫描二维码关注公众号,回复: 4476677 查看本文章

         无垃圾回收机制(不能自动释放内存)

         一个线程对应一个栈,栈之间不能互相调用

1.1线程与栈

         每一个线程都有一个栈,线程是进程的实例,而运行一个程序是需要进程的,所以也需要线程。

         得到你的输入命令后,线程将通过CPU让硬盘把数据写入内存,一个动态缓存的程序诞生了。

为什么栈不能自动释放内存,要占用内存?

        如果栈能自动释放内存,你想想你的游戏,你正打着LOL排位呢,突然释放内存了

        也就是结束进程。游戏突然闪退了,那种感觉,简直极致影响用户体验。

如果栈之间内互相调用?

          那么我打开了一个酷狗音乐,我能调用QQ音乐,那我把QQ音乐关了,你只能听酷狗音乐

         那样多么?多么?混蛋。

2,堆

     存放对象,如Scanner a = new Scanner(),存放的是Scanner,有辣鸡回收机制。

     栈中的引用对象以地址的形式引用堆中的对象

     被线程共享

方法区

存放 类 和 静态方法 

方法区被线程共享

只有当你写好的类被调用后才会储存调用的类,并且调用一次将永远存在直到你结束项目释放所有内存

静态方法添加static的方法,静态方法不能调用普通方法,普通方法可以调用静态方法

因为静态方法是在方法区可以被其它的线程调用

没调用之前的默认构造方法也在方法区

猜你喜欢

转载自blog.csdn.net/qq_38403590/article/details/84900589