Day05.JVM(Java虚拟机)内存管理

  • JVM(java虚拟机)主要包括三块内存空间,分别是:栈内存、堆内存、方法区内存。
  • 堆内存和方法区内存各一个,一个线程一个栈内存。
  • 方法调用的时候,该方法所需要的内存空间在栈内存中分配,称为压栈(入栈)。方法执行结束之后,该方法所占的内存空间释放,称为弹栈(出栈)。
  • 栈中主要存储的是方法体中的局部变量。
  • 方法的代码片段以及整个类的代码片段都会存储到方法去内存中,在类加载的时候这些代码片段会被载入。
  • 在程序执行过程中使用new运算符创建的java对象,存储在堆内存当中,对象内部有实例变量,所以实例变量存储在堆内存中。
  • 变量分类:
    • 局部变量【方法体中声明】
    • 成员变量【方法体外声明】:
      - 实例变量【前面修饰符没有static】
      - 静态变量【前面修饰符没有static】
  • 静态变量存储在方法区内存中。
  • 三块内存当中变化最频繁的是栈内存,最先有数据的是方法区内存,垃圾回收器主要针对的是堆内存。
  • 垃圾回收器(自动垃圾回收机制、Gc机制)什么时候会考虑将java对象的内存回收呢?
    • 当堆内存的java对象变成垃圾数据的时候,会被垃圾回收器回收。
    • 什么时候java对象会变成垃圾数据呢?
      - 没有更多地引用指向它的时候(对象只能通过引用的方式访问,所以如果没有引用对象无法访问,变成垃圾数据)。

相关文章: