这几天任务量比较少,有很多充裕的时间用来看书学习,于是把JVM了解了一下,通过学习,做了一点笔记。记录出来,有一部分是自己的理解,如果有误,请各位指出。

1. 运行时数据区域

Java虚拟机在运行时,可将数据区分为以下几个区,按线程共享与私有,可分为:
线程私有:程序计数器、虚拟机栈、本地方法栈
线程共享:方法区、堆
一、Java内存区域
一、Java内存区域
2. 虚拟机栈
虚拟机栈,线程私有,它的生命周期和线程相同。
在虚拟机栈中,主要存放:局部变量表,操作数栈,动态链接,方法出口等信息。每个方法的调用,都会创建一个帧栈,基本等于一次进栈和出栈的过程,每个帧栈的大小在编译时期即确定了下来。
局部变量表存储了基本类型、对象引用(Object o,这儿的o)。
3. 堆
堆中主要存放创建出来的实体对象,它是线程所共享的一块区域。如果一个程序运行时间久了,创建出来的对象也会越来越多,如果不对堆中的无用对象进行回收,那么内存迟早会溢出,所以,所谓的垃圾回收,主要是用来回收堆中存放的实体对象。所以,根据垃圾回收机制,堆又可以分为新生代和老年代(垃圾回收机制),这儿指的虚拟机为用的最多的Hot Spot。
4. 方法区
方法区和堆一样,它是线程共享的。它里面主要存储已被虚拟机加载的类信息、常量、静态变量等数据。
5. 运行时常量池
运行时常量池是方法区的一部分,class文件中除了有类的版本、字段、方法、接口之外,还有一个即运行时常量池,它主要用来存放编译时生成的各种字面量和符号引用。

相关文章:

  • 2021-12-12
  • 2021-09-27
猜你喜欢
  • 2021-08-26
  • 2021-08-10
  • 2022-12-23
  • 2021-09-26
相关资源
相似解决方案