简述JVM内存组成

JVM内存按能不能线程共享分为共享区和私有区。
共享区包括堆和方法区。私有区包括程序计数器、虚拟机栈、本地方法栈。
私有区可以称之为是线程隔离的,而共享区不是线程隔离的。


堆中主要存储程序运行时加载的实例对象。(准确的说,是类加载器classLoader加载所需类的字节码文件)。
堆中的数据也是垃圾回收的重点区域,同时也是JVM内存中最大的一块区域。

方法区
方法区存储的内容包括类信息、常量、静态变量及域信息(Field)和方法信息(Method)。
其中,类信息是由类加载器在加载类的时候从类文件中提取出来的,包括以下几点:

  1. 类的完整有效名
  2. 这个类的直接父类的完整有效名
  3. 类的修饰符
  4. 这个类的直接接口的一个有序列表
    常量存储在方区中的常量池中。
    静态变量是指的除了常量(常量也有static修饰符)以外的静态变量。

注意:对于方法区JVM回收的比较少,而且一般回收的是常量和类卸载的信息。
对于静态变量,是不进行回收的。
(如果定义的静态变量是一个引用类型的话,是有可能被回收的。)

程序计数器
程序计数器是当前线程所执行字节码指令的行号指示器,如分支、跳转、循环、异常处理、线程回复等都需要依赖线程计数器来实现。
对于线程计数器来说,最典型的应用是,在进行分支跳转的时候,用程序计数器记录行号。

虚拟机栈
与程序计数器一样,Java虚拟机栈也是线程私有的,它的生命周期与线程相同。虚拟机描述的是Java方法执行的内存模型。
每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应这一个栈帧在虚拟机栈中入栈到出栈的过程。

本地方法栈
本地方法栈和虚拟机栈所发挥的作用是非常相似的,它们之间的区别不过是虚拟机栈是非虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机执行Native方法服务的。

欢迎各位批评指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值