jvm虚拟机程序员@IT·互联网

JVM:堆、栈、方法区

2017-03-13  本文已影响144人  养码哥
  1. 中内存划分

    • Java堆是和Java应用程序关系最密切的内存空间,几乎所有的对象都放在其中,并且Java堆完全是自动化管理,通过垃圾收集机制,垃圾对象会自动清理,不需自己去释放。

    • 根据垃圾回收机制的不同,Java堆有可能拥有不同的结构,最为常见的就是将整个Java堆分为新生代和老年代。其中新生代存放新生的对象或者年龄不大的对象,老年代则存放老年对象。

    • 新生代分为edn区,s0区,s1区,s0和s1也被称为from和to区域,他们是两块大小相等,并且可以互相转换的空间。

    • 绝大多数情况下,对象首先分配在edn区,在新生代回收后,如果对象还存活,则进入s0或s1区,之后每经过一次新生代回收,如果对象存活则他的年龄就加1,对象达到一定的年龄后,则进入老年代。

    • 举例:A a=new A();首先把对象存放到堆内存当中,发现这个A只用了一次,首先会进入新生代里边去,存放到edn区域里面,因为Java堆自动化管理,垃圾收集机制,发现这个a只用了一次,如果a又被一段代码引用,垃圾回收机制有算法,每引用一次记录一次,就会马上进入到s0或者是s1区域,一旦a这个对象引用次数非常多了,就会存放到老年代里去。

  1. Java、

    • Java栈是一块线程私有的空间,一个栈,一般由3部分组成:局部变量表,操作数据栈,和帧数据区
  1. Java、方法区

    • Java方法区和堆一样,方法区是一块所有线程共享的内存区域,他保存系统的类信息,比如类的字段,方法,常量池等,方法区的大小决定系统可以保存多少个类,如果系统定义太多个类,导致方法区溢出,虚拟机同样会抛出内存溢出的错误,方法区可以理解为永久区
上一篇 下一篇

猜你喜欢

热点阅读