JVM---内存管理

JVM是一种用于计算设备的规范,他是一个虚构的计算机。是通过在实际的计算机上的仿真模拟各种计算机的功能来实现的。
引入java虚拟机后,java语言在不同的平台上运行时不需要重新编译,运行字节码即可。

五大内存区域
1、方法区

(1)所有线程共享的内存区域
(2)用于存储已被虚拟机加载的类信息、常量、静态常量等。如:被static修饰的常量
(3)方法区中的信息来源于类装载子系统,其加载class信息
(4)这个区域的内存回收目标主要针对于常量池的回收和堆类型的卸载

2、Java堆

(1)是所有线程共享的内存区域
(2)堆在JVM启动的时候会创建,用来存放所有的java对象实例,包括全局变量、属性类的成员变量
(3)java堆可以存在物理上不连续的内存空间

3、Java栈(虚拟机栈)

(1)每一个线程都有一个私有的java栈
(2)在线程被创建的时候被创建,其中保管着帧信息(局部变量、方法参数、方法出口等)
(3)每一个方法从方法调用到执行完成的过程,都对应着一个栈帧在java栈中入栈到出栈的过程
(4)通常所说的栈,一般是指在虚拟机栈中的局部变量部分

4、本地方法栈

(1)是线程私有的
(2)本地方法栈为虚拟机使用的native服务,可能底层调用c或c++

5、程序计数器

(1)是线程私有的
(2)是一块很小的内存空间,可以作为当前线程的信号指示器,也叫指令计数器
(3)如果当前线程执行一个java方法,则程序计数器记录了正在执行的java字节码地址;如果正在执行一个本地方法(native底层方法),那么计数器为空


为什么需要一个程序计数器?

(1)对单核CPU来说,每个时刻只能有一个线程处于运行状态,直到当前线程执行完或者被挂起,让出CPU资源后,才能轮到下一个线程进来运行
(2)如果是多核CPU,是可以同时跑多线程的,线程之间也互不相干。当线程数量大于CPU数量时,也会和单核CPU一样进行一个轮询切换来分配资源。为了确保线程切换后能够恢复正常的位置继续执行,每个线程都要有自己的程序计数器

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值