JVM总结

JVM总结

一,JVM内存区域

    


    方法区(method area):

        
该区域属于线程共享的内存区域,又称Non-Heap(非堆),主要用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据,当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常;

    JVM堆(java heap)

        
该区域属于线程共享的内存区域,它在虚拟机启动时创建,是java虚拟机所管理的内存中最大的一块,主要用于存放对象实例,几乎所有的对象实例都在这里分配内存,注意java堆是垃圾收集器管理的主要区域,因此很多时候也被称作GC堆,如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError异常.

    程序计数器(program counter register)

        
该区域属于线程私有的数据区域,是一小块内存空间,主要代表当前线程所执行的字节码行号指示器.字节码解释器工作时,通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等基础功能都需要依赖这个计数器来完成;

    虚拟机栈(java virtual machine stacks)

        
该区域属于私有的数据区域,与线程同时创建,总数与线程关联,代表java 方法执行的内存模型.每个方法执行时都会创建一个栈桢来存储方法的变量表,操作数栈,动态链接方法,返回值,返回地址等信息;

    本地方法栈(native method stacks)

        
该区域属于线程私有的数据区域,这部分主要与虚拟机用到的native方法相关,一般情况下,我们无需关心此区域;

二,GC算法

  • 复制算法:两个区域A和B,初始对象在A,继续存活的对象呗转移到B,此为新生代最常用的算法;
  • 标记清除法:首先标记处所有需要回收的对象,在标记完成后统一回收所有被标记的对象;不良后果,效率不高且容易产生内存碎片.
  • 标记整理算法:前期是标记清除法,但是后续步骤不是直接对可回收对象进行清理,而是让存活的对象都向一端移动,然后直接清理掉端边界以外的内存;老年代采用该算法;

三,JVM堆

    



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值