JVM:堆、栈、方法区

简介: 堆中内存划分Java堆是和Java应用程序关系最密切的内存空间,几乎所有的对象都放在其中,并且Java堆完全是自动化管理,通过垃圾收集机制,垃圾对象会自动清理,不需自己去释放。
  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方法区和堆一样,方法区是一块所有线程共享的内存区域,他保存系统的类信息,比如类的字段,方法,常量池等,方法区的大小决定系统可以保存多少个类,如果系统定义太多个类,导致方法区溢出,虚拟机同样会抛出内存溢出的错误,方法区可以理解为永久区
  • 举例: static int a=10;因为从来不会修改,也称之为永久区的一个概念。
  • Good Luck!
相关文章
|
2月前
|
存储 Java 数据安全/隐私保护
【JVM】Java虚拟机栈(Java Virtual Machine Stacks)
【JVM】Java虚拟机栈(Java Virtual Machine Stacks)
36 0
|
3月前
|
存储 算法 Java
[Java]散列表的数据结构以及对象在JVM堆中的存储过程
[Java]散列表的数据结构以及对象在JVM堆中的存储过程
54 1
[Java]散列表的数据结构以及对象在JVM堆中的存储过程
|
10天前
|
存储 安全 Java
JVM之本地方法栈和程序计数器和堆
JVM之本地方法栈和程序计数器和堆
11 0
|
2月前
|
存储 Java 编译器
【JVM】深入了解JVM方法区
【JVM】深入了解JVM方法区
20 0
|
2月前
|
存储 安全 Java
【JVM】Java堆 :深入理解内存中的对象世界
【JVM】Java堆 :深入理解内存中的对象世界
56 0
|
3月前
|
存储 Java 编译器
深入理解JVM - 栈帧和分派
深入理解JVM - 栈帧和分派
212 0
|
4月前
|
存储 Java
JVM之堆和方法区
JVM堆是Java程序运行时内存管理的核心,它主要用于存储对象实例和数组。堆内存的特点是动态分配和回收,它允许对象的创建和销毁,同时也需要注意内存泄漏和性能问题。
|
4月前
|
存储 安全 Java
JVM之程序计数器和栈
Java虚拟机(JVM)是运行Java程序的关键组件,它负责将Java源代码转换为可执行的字节码,并在运行时管理内存、执行程序等。
|
4月前
|
Java 应用服务中间件
jvm性能调优实战 - 45无限制的调用方法导致栈溢出OOM
jvm性能调优实战 - 45无限制的调用方法导致栈溢出OOM
44 0
|
10天前
|
Java
JVM之本地内存以及元空间,直接内存的详细解析
JVM之本地内存以及元空间,直接内存的详细解析
25 0