虚拟机内存特点
概述:Java程序在运行时,需要在内存中分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
栈
- 栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧,用来存储局部变量、操作数、方法出口等
- 每个线程都有一个栈,用于存放该线程执行方法的信息
- 栈属于线程私有,不能实现线程间共享
- 栈的存储特点是先进后出(FILO)、后进先出(LIFO)
- 栈是由系统自动分配,访问速度快。
- 栈是一个连续的内存空间
栈内存空间内的变量执行完就会立刻被清理
堆
- 用于存储创建好的对象(所有new出来的东西)
- JVM中只有一个堆,被所有线程共享
- 堆是一个不连续的内存空间,分配灵活,但是访问速度慢
- 每一个new出来的东西都有地址值 0x0000
- 每一个变量都有默认值
- 使用完之后就变成了垃圾,但是并没有立即回收,而是在垃圾回收器(Garbage Collect)空闲的时候自动回收。