首先对之前学习的类的概念进行总结:
- 类里边会放一些变量和方法;
- 类可以看作为一个模板,或图纸,系统根据类的定义来造出对象;
- 类即一个对象的抽象;
之后说一下在java编程是内存是怎么分配的:
java虚拟机可以分为三个区域:栈stack,堆heap,方法区method area;
其中方法区其实就是堆中的其中一块,不过比较特殊因此拿出来单独列出来。
其中简单的可以这样理解,栈存储方法,堆存储对象,方法区存储静方法,字符串常量,代码,静态变量等。
对于栈的特点如下:
- 栈描述的是方法执行的内存模型,当每个方法被调用时都会创建一个栈帧(存储局部变量,操作数,方法出口等)
- jvm为每个线程创建一个栈用于存放该线程执行方法的信息(实际参数,局部变量)
- 栈属于线程私有,不能实现线程间的共享
- 栈的存储特性“先进后出"
- 栈是由系统自动分配的,速度快!栈是一个连续的内存空间
对于堆的特点如下:
- 堆用于存储创建好的对象以及数组(其实数组也是对象)
- jvm只有一个对被所有的线程共有
- 堆是一个不连续的内存空间,分配灵活,速度慢!
对于方法区的特点如下:
- jvm只有一个方法去被所有线程共享
- 方法区实际也是堆,只是用于存储类,常量相关的信息!
- 用来存放程序中永远不变或唯一的内容。
之后是我对这些的理解,当使用某个方式时会在栈中建立一个栈帧给这个方法使用,当new一个对象时,将会在堆中创建一部分给这对象使用,并将随机产生的代表唯一堆块地址传给栈中定义的变量,而且会将最开始的代码,和一些常量存储在堆地方法区中。学艺不精望各位大佬多多批评,我也会靠各位大佬的批评多多借鉴,有很多是在学习中参考的,有什么需要改的可以联系我,我会完善自己努力嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻。