java | 内存分析
java虚拟机内存的分区
Java虚拟机的内存可以分为三个区域:栈 stack 、堆heap 、方法区:method area
栈
栈的特点:
1、栈描述的是方法执行的内存模开型,每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)。
2、JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)。
3、栈属于线程私有,不能实现线程间的共享。
4、栈的存储特性是“先进后出,后进先出”。
5、栈是由系统自动分配,速度快!栈是一个连续的内存空间。
堆
堆的特点如下:
1、堆用于存储创建好的对象和数组。
2、JVM里面只有一个堆,被所有的线程共享。
3、堆是一个不连续的内存空间,所以速度慢,但是分配灵活。
当用new来创建一个对象的时候,在堆里面就会自动为它分配好空间。并且会把这个一个对象的常量和方法都加载到截中去。
方法区
方法区(静态区)的特点:
1、JVM只有一个方法区,被所有线程共享。
2、方法区实际也是堆,只是用于存储类,常量相关的信息。
3、用来存放程中永远是不变或只唯一的内容。(比如:类信息,静态变量,字符串常量等)
比如:
有两个类:
其中一个类是学生类,有id, name, age, comp, study(), play(),这此方法和属性。
另一个类是电脑类,只有一个属性 brand
其实还有两个构造方法,然后因为方法都是存在栈里面,只要对象创建完了,方法就会自己弹出去,最后main方法执行完了,也会被弹出去,然后程序执行完毕。
关注公众号,随时获取最新资讯
细节决定成败!
个人愚见,如有不对,恳请斧正!