【温故而知新】Jvm与gc深入理解

学习了很久,作出以下总结,来温故而知新

一、Jvm内存模型规范(jmm)

1.cpu、高速缓存、主内存

cpu读写磁盘速度较慢。

cup读写朱内存速度目前也有瓶颈。

cpu读写告诉缓存目前最快。

但是遇到一个问题,就是高速缓存的一致性问题。

各个高速缓存与朱内存都存在可见性、一致性问题。

 

2.内存屏障——volatile 关键字

作用:(1)阻止屏障两侧的指令重排序——c与汇编在高并发情况下,排序问题。

             (2)强制保持一致性——将高速缓存数据写入主内存。

 

3.底层原理:

volatile底层使用汇编指令,mesi协议。即总线嗅探机制,cpu会立即情况高速缓存数据,去拿主内存数据。

 

4.JVM设计

用JMM规范来屏障各个硬件和system的访问差异,保证各个平台数据一致性。

(这里就注意,c是直接访问硬件的内存,不安全,会指令重排序)

但是Java就可以保证任意时间数据的可见性、有序性

 

 

二、JVM分区

 

1.程序计数器:

JMM规范中,唯一没有OOM的区域。程序行号计数器,线程私有,记录程序读取行号的位置。

 

2.栈:

Java方法执行的内存模型。

栈帧构成:(1)局部变量

                    (2)操作

                     (3)动态链表

                               1.栈的功能主要是进栈和出栈
                               2.栈实现先进后出

                      (4)方法出口(返回地址)

 

OOM异常根本原因:

(1)线程请求栈深度超过了栈深度

(2)虚拟机空间动态扩展,扩展到了无法申请。

 

3.本地方法栈

存放native方法的地方,c与c++(也叫字节码服务)

 

4.堆

存放大多数对象的实例

为什么说是大多数呢?

因为有两个概念:JIT即时编译器、逃逸设计

 

即时编译器:可以把把Java的字节码,包括需要被解释的指令的程序)转换成可以直接发送给处理器的指令的程序)

逃逸分析:通过逃逸分析来决定某些实例或者变量是否要在堆中进行分配,如果开启了逃逸分析,即可将这些变量直接在栈上进行分配,而非堆上进行分配。这些变量的指针可以被全局所引用,或者其其它线程所引用。


1.JIT即时编译,可以把java的字节码直接执行。。。不需要在堆中创建实例
2.逃逸设计也是如此,直接将实例在栈上分配,且全局引用,也不再堆中。

 

堆得特点是:

1.所有线程共享

2.大多数的对象实例

3.GC的主要区域——收集器(分代算法)

 

 

三、GC垃圾回收机制

 

要搞清楚GC,就要说一说对象,因为GC其实就是在回收对象。

1.对象内存分布

(1)对象头

分为32位和64位;对象头放着Hash码、年代、锁标识

(2)实例数据

(3)对齐填充

(4)对象访问定位

分为句柄和指针

 

2.OOM

(1)请求栈深度大于栈实际深度

(2)动态扩展的内存无法申请足够的资源

重要指标      --verbose

其实对于Java开发来说,gc无需关注,但是c、c++开发需要使用     delete、free来释放

 

3.哪些内存需要回收?哪些不需要回收?

(1)不回收:程序计数器、栈、本地方法栈——线程死即死。

(2)回收:堆、方法区——动态的分配与回收

 

4.分代算法

新生代

老年代

永久代,也叫持久代(jdk1.8以后,叫元空间)

为什么要分代?

因为效率问题

 

5.收集算法:

标记/清除(基础)

复制 (eden空间、From Survivor、To Survivor【保留空间】)

标记/整理

 

6.枚举根节点算法

 

7.垃圾收集器:

年轻带:serial、parNew

老年代:serial old、paralled old 、 cms

特殊:G1收集器

 

8.Minor GC、Major GC、FULL GC、mixed gc

full gc是对新生代、老年代、永久代统一的回收。会停止程序,优化的点也在减少full gc的次数。

full gc的另一个叫法是:stop the world

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 1 University students can understand innovation through learning from the past. 2. Students can better review by breaking down complex concepts into smaller components and studying the material in an organized way. 3. When learning from the past to understand innovation, it is important to focus on understanding the big picture and to not get bogged down in the details. ### 回答2: 1. 大学生如何理解温故而知新温故而知新是一种学习方法,它要求我们在学习新知识之前先回顾和巩固已经学过的知识。大学生理解温故而知新意味着要在学习新知识之前,先回顾和复习以前学过的相关知识或基础知识。通过温故,我们能够加深对已有知识的理解和记忆,从而更好地理解和掌握新的知识。 2. 学生如何更好地去复习? 学生要更好地复习,可以采取以下策略: 首先,制定一个合理的复习计划,将要复习的内容分配到不同的时间段,确保每个科目都有足够的时间。 其次,采用多种复习方法,如阅读教材、做练习题、参加讨论等,以帮助加深理解和牢固记忆。 另外,与同学或老师一起讨论复习内容,通过讲解和互动来加深理解。 此外,保持良好的学习习惯,比如及时复习、做好笔记等,能够帮助学生更好地掌握和复习知识。 3. 温故而知新的过程需要注意什么? 在温故而知新的过程中,需要注意以下几点: 首先,要有针对性,根据自己的学习需求和复习目标,选择性地回顾和复习相关知识点。 其次,要有系统性,将复习内容进行分类整理,形成一个清晰的知识框架,有助于加深理解和记忆。 另外,要关注重难点,重点复习那些相对较难或容易遗忘的知识点,加强对这些内容的学习和理解。 还要有耐心和恒心,温故而知新是一个持续的过程,需要长期坚持和不断巩固。 最后,要善于总结和归纳,通过整理和回顾复习过程中的笔记和练习,提炼出关键概念和思维模式,便于记忆和应用。 ### 回答3: 1. 大学生如何理解温故而知新? 大学生可以理解为通过回顾过去的知识和经验,来获取新的见解和理解。温故是指回顾已经学过的知识,了解其中的原理、概念和重要点。而知新则是指通过对新知识的学习,扩展和更新自己的知识体系。温故而知新相辅相成,是一个持续学习和发展的过程。 2. 学生如何更好地去复习? 学生可以通过以下方式更好地进行复习: - 制定合理的复习计划:根据时间安排和课程难度,合理分配复习时间,确保每个学科都有足够的复习时间。 - 多种复习方法结合:采用不同的学习方式,如阅读教材、做练习题、参与讨论、制作思维导图等,帮助巩固记忆和理解知识。 - 主动参与课堂:积极参与讨论和提问,与同学和老师交流,加深对知识的理解和记忆。 - 不断反思和总结:及时检查自己的复习情况,发现不足和问题,并及时调整学习方法和计划。 3. 温故而知新的过程需要注意什么? 在温故而知新的过程中,学生需要注意以下几点: - 有目的性地温故:针对具体的知识点或者问题进行回顾,明确自己的学习目标和重点。 - 理解和记忆结合:不仅要理解概念和原理,还要通过多次的复习和记忆,帮助信息在大脑中形成长期记忆。 - 理论联系实际:将学到的知识应用到实际情境中,加深对知识的理解和记忆。 - 及时巩固复习成果:通过做练习题、整理笔记、与同学讨论等方式,巩固复习的成果,确保知识掌握得更牢固。 - 长期持续学习:温故而知新是一个持续的过程,要保持学习的热情和动力,不断更新自己的知识体系。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值