一.JVM概念
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。存在与jdk中。
二.JVM中内存分类
Ⅰ.栈区(stacksegment)
栈区(stacksegement)存放函数的参数值,局部变量的值等,在超过这个变量的作用域时就会被系统自动释放掉在于JVM内存的资源。
①优点:存取速度比堆快
②缺点:存在栈中的数据大小,与生存期必须是确定的,无灵活性
③存储类型:
a)基础类型 (int、double、float、char、string)
b)引用类型(需要new类创建对象)的变量
实例a:
for(int i=0;i<43;i++){
System.out.println(i); //局部变量只作用在局部作用域中
}
System.out.println(i); //不打印输出i
实例b:
Scanner in=new Scanner(System.in); //引用类型的变量in存储在堆内存中
Ⅱ.堆区(heapsegement)
堆区(heapsegement)存放由new创建的对象和数组,JVM不定时查看这个对象,如果没有引用指向这个对象就回收。
①优点:可以动态分配JVM内存
②缺点:要在运行时分配JVM内存;速度慢
实例:
Scanner in=new Scanner(System.in); //如果in没有被引用就被回收
Ⅲ.静态区
Ⅳ.代码区
三.堆、栈示意图
Ⅰ.说明
a)图中如果int b=9;那么b、a指向同一个对象
b)引用类型的对象in存放在栈中,new出来的Scanner(System.in)存储在堆内存中。访问Scanner(System.in)路径:通过引用类型的对象in→指向Scanner(System.in)