方法:—》把重复且有效的代码抽取出的形式就是方法
重载方法:在一个类中,方法名一致参数列表不一致
方法的重载跟修饰符,返回值,是否静态没有关系,只跟方法名和参数列表有关
方法传值:
- 当实参为基本数据类型时传递的是拷贝值
- 当实参为引用数据类型时传递的是地址的拷贝
如果拷贝的地址值找到原来堆内存的值就有可能会有影响
如果拷贝的地址值没有找到原堆内存做任何操作都不会有任何影响
1)内存分配的策略
按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的.
静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编 译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间需求.
栈式存储分配也可称为动态存储分配,是由一个类似于堆栈的运行栈来实现的.和静态存 储分配相反,在栈式存储方案中,程序对数据区的需求在编译时是完全未知的,只有到运行的时候才能够知道,但是规定在运行中进入一个程序模块时,必须知道该程序模块所需的数据区大小才能够为其分配内存.和我们在数据结构所熟知的栈一样,栈式存储分配按照先进后出的原则进行分配。
静态存储分配要求在编译时能知道所有变量的存储要求,栈式存储分配要求在过程的入口处必须知道所有的存储要求,而堆式存储分配则专门负责在编译时或运行时模块入口处都无法确定存储要求的数据结构的内存分配,比如可变长度串和对象实例.堆由大片的可利用块或空闲块组成,堆中的内存可以按照任意顺序分配和释放.
Java内存分配、管理小结
首先是概念层面的几个问题:
Java中运行时内存结构有哪几种?
Java中为什么要设计堆栈分离?
Java多线程中是如何实现数据共享的?
Java反射的基础是什么?
然后是运用层面:
引用类型变量和对象的区别?
什么情况下用局部变量,什么情况下用成员变量?
数组如何初始化?声明一个数组的过程中,如何分配内存?
声明基本类型数组和声明引用类型的数组,初始化时,内存分配机制有什么区?
在什么情况下,我们的方法设计为静态化,为什么
Java中运行时内存结构
1.1 方法区:
方法区是系统分配的一个内存逻辑区域,是JVM在装载类文件时,用于存储类型信息的(类的描述信息)。
方法区存放的信息包括:
1.1.1类的基本信息:
每个类的全限定名
每个类的直接超类的全限定名(可约束类型转换)
该类