JVM 虚拟机

运行时数据区域

线程共享的数据区:Method Area (方法区) ;  Heap(堆) ; 直接内存

线程隔离的数据区:VM Stack(虚拟机栈) ; Native Method Stack (本地方法栈) ; Program  Counter Register (程序计数器)

 

程序计数器:  多线程线程切换并分配处理器,在任何一个确定的时刻,一个处理器都只会执行一条线程中的指令。每条线程有独立的程序计数器,用于线程切换,记录线程的下一条指令,为了线程能恢复到正确的执行位置

VM Stack : java方法执行的内存模型,方法执行的同时都会创建一个栈帧(Stack Frame)。方法的执行对应栈帧在虚拟机的入栈出栈。   栈指的就是java虚拟机中的局部变量表部分。   对这个区域规定了两种异常状态:1.线程请求的栈大于虚拟机所允许的深度,StackOverFlowError  2.如果虚拟机可以动态扩展(也可以固定长度),扩展时无法申请到足够的内存,OutOfMemoryError 

Native Method Stack : 是java虚拟机Native方法服务。与VM Stack 类似,也会抛出异常。

Heap(堆):堆内存是Java虚拟机管理的内存中最大的一块,也是所有线程共享的一块内存区域。主要作用是存放对象的实例。

                 是垃圾收集器的主要区域,因此也被称为GC堆。从内存回收看,分代收集算法;从内存分配看,多个线程私有的分配缓冲区。java heap 可以是物理上的不连续,逻辑上的连续。可以扩展,但是如果在堆中内存没有完成实例分配,并且堆无法扩展时,会抛出 OutOfMemoryError异常。目前常用art虚拟机

                分代收集算法:年轻代(EDen,survivor):复制算法。年老代:标记——整理算法。持久代:静态方法和类

 

               

方法区:永久代,因为把GC分代收集扩展到方法区,但同时容易造成内存泄漏。1.7以后改为Native memory

对象的创建:1.(堆中内存是绝对规整的)指针碰撞:对同一数据修改,解决:同步或者本地线程分配缓冲

                       2.(堆中内存并不是规整的)空闲列表

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值