JVM内存模型

jvm内存模型

jvm内存有,方法区,堆,栈,本地方法栈,程序计数器五块。如下图:

这里写图片描述

方法区

1,方法区是线程共享的区域。在方法区中,存储了每个类的信息、静态变量、常量等。
2,运行时常量池,它是每一个类或接口的常量池的运行时表示形式
3,方法区域,又被称为“永生代”,当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常。

1,堆是线程共享的区域。Java中的堆是用来存储对象本身的以及数组(数组引用是存放在Java栈中的)。在JVM中只有一个堆。
2,如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError 异常。
3,Java 堆是垃圾收集器管理的主要区域,因此很多时候也被称做“GC 堆”(Garbage Collected Heap)。从内存回收的角度看,由于现在
收集器基本都是采用的分代收集算法,所以Java 堆中还可以细分为:新生代(Eden,s0,s1)和老年代;
这里写图片描述

在进多次拷贝后还存活的将会进入老年代。老年
代发生GC会进入永生代

Java栈中存放的是一个个的栈帧,每个栈帧对应一个被调用的方法,在栈帧中包括局部变量表、操作数栈、指向当前方法所属的类的运行时常量池的引用、方法返回地址和一些额外的附加信息。当线程执行一个方法时,就会随之创建一个对应的栈帧,并将建立的栈帧压栈。当方法执行完毕之后,便会将栈帧出栈。
这里写图片描述

本地方法栈

本地方法栈与Java栈的作用和原理非常相似。区别只不过是Java栈是为执行Java方法服务的,而本地方法栈则是为执行本地方法(Native Method)服务的。

程序计数器

程序计数器中存储的数据所占空间很小,程序计数器是用来记录线程运行的位置,当线程切走后回来能够继续执行。

关于内存溢出和泄露

说到内存模型想到的,就蛮写一下

内存溢出

是指程序在申请内存时,没有足够的内存空间供其使用!

内存泄露

内存泄漏是指你向系统申请分配内存进行使用,可是使用完了以后却不归还,结果你申请到的那块内存你自己也不能访问到,而系统也不能再次将它分配给需要的程序。

由内存泄漏可以想到垃圾回收机制。。。。

只是的联想没有止境。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值