合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
>[success] # java 内存图 1. 计算机在运行的时候,不同程序都会运行自己进程,然后分配自己的内存空间,java 运行在jvm 中,jvm 在运行时候也会创建不同的内存分配 ![](https://img.kancloud.cn/1f/da/1fda8ce1a15d2f7fb78e9b6a4b5760e9_562x419.png) * 在jdk 8.0 之前堆和方法区在一起 ![](https://img.kancloud.cn/83/a8/83a8b356ed771280ea0baadc49634369_552x503.png) * 在JDK8开始,取消方法区,新增元空间。把原来方法区的多种功能进行拆分,有的功能放到了堆中,有的功能放到了元空间中。 ![](https://img.kancloud.cn/63/65/6365e0cbf33ab9def363e774429adae2_516x467.png) 2. 以 jdk8.0 之前分析为例 * **方法区** 用来存放字节码文件加载时进入的内存存储空间,也就是存放 `.java` 文件存放为 `.class `文件 ![](https://img.kancloud.cn/28/12/2812ead103f7d8a195ef47785b463612_326x212.png) * **栈内存区** 方法运行时会进入栈区进行压栈等待执行,变量也是保存在这个空间中 * **堆内存** ,`new`来的东西会在这块内存中开辟空间并产生地址 3. 当创建对象时候会进行一下几步 * 加载`class`文件 * 申明局部变量 * 在堆内存中开辟一个空间 * 默认初始化 * 显示初始化 * 构造方法初始化 * 将堆内存中的地址值赋值给左边的局部变量 >[danger] ##### 分析案例 数据各自属于所创建的对象,方法共享(减少内存) ![](https://img.kancloud.cn/be/75/be75c2a63643fb35fb81d0f09bd1b377_1650x719.png)