彻底理解JVM

先来一张神图

jvm运行时数据区,分为这五个部分,让我们来见识下我们的代码是如何飞奔在这几个地方的。

指令:

       程序计数器:记录当前线程的起始地址和偏移量,一看就知道是为了线程挂起后,恢复上下文用的。

       虚拟机栈:栈关键字,先进后出,主要包括用户存储局部变量表、操作栈、动态链接、方法出口等信息。

       本地方法栈:栈关键字,jvm底层实现,native方法。

数据

     方法区:

          线程共享
          用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

 heap:堆

      线程共享

      存储引用对象真实分配的空间,我们说的垃圾回收就是处理这一块。

   堆分为新生代(分为伊甸园和两个存活区)、老生代、永久代(对于hotspot来说,jdk1.7之前都使用永久代来实现方法区,方    法区不等于永久代,永久代只是方法区的一个实现,不同的虚拟机实现方法区有不同的机制。jdk1.8之后没有永久代了)

了解堆内存模型,接下来肯定要讲讲垃圾回收算法

常用算法:引用计数法:标记清除法、标记压缩法、复制清除法、分带算法。

                  主要方法论,GcRoot可达算法。

垃圾回收器:算法的实现

1、Serial (Serial Old) 收集器:

    serial:复制清除算法

   Serial Old: 是单线程收集器,采用标记-整理算法。

2、CMS收集器--低延迟为先(并发的收集器)

    标记清除算法,这样并发,清除最快。

3 ParNew收集器

   复制清除算法

4 、Parallel Scavenge (Parallel Old)收集器--吞吐量为先!

  新生代复制清除算法,老年代标记-压缩算法

 

感谢下列blog,我主要是记录下自己的收获,具体请参考大牛blog:

   https://blog.csdn.net/weixin_30917213/article/details/98988280

  https://blog.csdn.net/focuson_/article/details/81170959?   ops_request_misc=%7B%22request%5Fid%22%3A%22158192533919724835808593%22%2C%22scm%22%3A%22201407   13.130056874..%22%7D&request_id=158192533919724835808593&biz_id=0&utm_source=distribute.pc_search_result.none-  task

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值