极客时间java高级(第二次课程)

  • 题目 01 请你用自己的语言介绍 Java 运行时数据区(内存区域)
    • 01.堆、虚拟机栈、本地方法栈、方法区(永久代、元空间)、运行时常量池(字符串常量池)、直接内存
      • a.堆:
      • b.虚拟机栈:
      • c.本地方法栈:
      • d.方法区
      • e.运行时常量池(字符串常量池)
      • f.程序计数器
      • g.直接内存
    • 01.为什么堆内存要分年轻代和老年代?
  • 题目 02 描述一个 Java 对象的生命周期
    • 解释一个对象的创建过程
    • 解释一个对象的内存分配
    • 解释一个对象的销毁过程
      • Step1:先确定垃圾
      • Step2:给垃圾机会
      • Step3:第二次被标记的对象就是真的要回收
    • 对象的 2 种访问方式是什么?
      • 通过句柄访问对象:
      • 通过直接指针访问对象:
    • 为什么需要内存担保?
  • 垃圾收集算法有哪些?垃圾收集器有哪些?他们的特点是什么?

题目 01 请你用自己的语言介绍 Java 运行时数据区(内存区域)

01.堆、虚拟机栈、本地方法栈、方法区(永久代、元空间)、运行时常量池(字符串常量池)、直接内存

a.堆:

占用区域最大(占地盘的王者)
垃圾回收的主要内存区域(垃圾收集器的主要治理对象)
JDK各版本不断迭代区域划分,只为了更好更快地回收管理此区域
各线程公用空间(对比虚拟机栈)

b.虚拟机栈:

线程私有空间(从线程出生到死亡一直相伴)——生命周期相同
其大小决定了方法调用深度,报错的时候打的e.printstack就能看到层层调用。
StackOverFlow——标识栈内存设置小了,或者死循环了
那虚拟机栈里面在入栈出栈存的是什么东西呢——栈帧(栈帧:1.调用新方法,栈帧随之创建(方法在虚拟机帧中出入的通关文牒)2.存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等(方法执行时所有的必备信息)3.当前栈帧(当前方法——当前类)(执行引擎的操作对象)

c.本地方法栈:

 与虚拟机栈的唯一区别就是服务对象不同服务对象:虚拟机栈————为java服务(字节码服务)做服务本地方法栈————为native方法(比如c++方法)做服务

d.方法区

 方法区是一个概念区,其具体实现有:永久代,元空间。(类比于降温这个概念的具体实现有:吹风扇和吹空调)方法区要存储:1.class   2.运行时常量池    3.JIT编译器编译之后的代码缓存
永久代 元空间 比较
应用时间 JDK1.8以前 JDK1.8以后 元空间逐步替代永久代
存储区域 存储区域是JVM内存所占用区域 物理内存区域 占用jvm内存管理空间就得让jvm操心内存移除和垃圾回收的事情
存储内容 方法区需要存的都存 只存类的元信息,静态变量和运行时常量池交给堆来存

e.运行时常量池(字符串常量池)

class常量池 运行时常量池 字符串常量池
范围情况 一个class文件只有一个class常量池 一个class对象有一个运行时常量池 全局只有一个字符串常量池
存储内容 字面量和符号引用 字面量和符号引用 双引号引起来的字符串
一个叫dog的class文件有一个自己的**class常量池**。
如果实例化了两个对象:dog1和dog2,则dog1和dog2各有自己的**运行时常量池**;
但是不管有多少个对象和文件,全局也是只有一个**字符串常量池**。

f.程序计数器

从别的线程切换回来,程序计数器告诉你上回执行到哪了。(指路小天才)

g.直接内存

直接内存 堆内存
申请空间耗费性能 耗费更高的性能 性能耗费更低
IO读写性能 更优 对比直接内存差一些
使用场景 有很大的数据需要存储(生命周期长);频繁的IO操作(网络并发场景) 数据不是很大

01.为什么堆内存要分年轻代和老年代?

就像是收拾街道的清洁工师傅,会把所负责的区域分成两块;
一块区域(年轻代)经常清理,然后把瓶子和纸盒收起来放到另一块区域(老年代);
然后年轻代经常清理,老年代隔一段时间清理一次(把瓶子和纸盒卖了)。

题目 02 描述一个 Java 对象的生命周期

解释一个对象的创建过程

new指令->>想准备买一口新锅,来专门来炒肉吃
常量池检查->>看看自己家里是不是买过这样的锅
是否已加载->>不过是新锅还是旧锅都要拿到厨放这个空间来(已经拿过来就不用拿了)
分配内存空间->>确保厨放有空间能放下这口锅
内存空间初始化为零值->>把灶台清理出来准备放锅
必要信息设置->>在锅盖上标记一下这个锅的用途
执行init方法->>对这个锅进行涂油开锅

解释一个对象的内存分配

就像是一个人(对象),来到旅店,要住宿,住进一个房间(内存分配)。
A旅店(Serial,ParNew)的房间是从头到尾进行分配的(内存空间连续),接着上个旅客入住的房子安排(指针碰撞)。
B旅店(CMS收集器和Mark-Sweep收集器)分配房间内存不连续,会维持一个空闲列表,来从中给旅客来分配空间(空闲列表)

解释一个对象的销毁过程

类比于黑帮清理门户,如果能和帮派中的常驻长老(类静态属性引用的对象)建立引用联系的(能为他们所用的),就不能当做清理对象,否则会被当做清理对象。当然在清理之前,会垃圾一个机会,如果垃圾能通过调用finlize方法,亮出免死腰牌证明自己是长老的人,则可以免除一死。否则第二次机会,还是被标记为垃圾,必死无疑。

Step1:先确定垃圾

一个对象,如果对于其他人没有用处(引用法)会被认定为垃圾。
一个对象,如果没有在Gcroots对象对象的可触达链路内,则会被认定为垃圾。可做GcRoots的对象:1.虚拟机栈中,栈帧的本地变量表引用的对象2.方法区中,类静态属性引用的对象3.方法区中,常量引用的对象4.本地方法栈中,JNI引用的对象

Step2:给垃圾机会

第一次被标记为垃圾之后,如果此对象有必要执行finalize方法.
在执行finalize方法后,还没有与引用链建立联系的会被第二次标记

Step3:第二次被标记的对象就是真的要回收

对象的 2 种访问方式是什么?

类似于作坊(JAVA栈,本地变量表)通过中介找劳工

通过句柄访问对象:

劳工的类型信息和具体劳工的地址信息由中介(句柄)来做保存。不管劳工怎么移动,作坊只要寻找句柄就可以了。

通过直接指针访问对象:

类似于作坊(JAVA栈,本地变量表)自己维护劳工的地址信息,劳工维护自己的类型信息。劳工移动,作坊的引用信息也要做更新。

为什么需要内存担保?

当年轻代通过自身的minoreGc,移动survivor区域都无法有足够空间来放入要加入的新对象时。
老年代会挺身而出,收留那希望在gc之后还存活的年轻代对象,以留出足够大的年轻代空间来收留新的对象。

垃圾收集算法有哪些?垃圾收集器有哪些?他们的特点是什么?

新生代使用算法 老年代使用算法 特点
ParNew 收集器 并行复制算法,暂停所有用户线程 串行标记整理算法,暂停所有用户线程 存在线程交互开销(单cpu性能不如Serial)
ParallelScavenge 收集器 并行复制算法,暂停所有用户线程 串行标记整理算法,暂停所有用户线程 吞吐量优先
ParallelOld 收集器 并行复制算法,暂停所有用户线程 并行标记整理算法,暂停所有用户线程 ParallelScavenge的老年代版本
CMS 收集器 无(CMS是专门的老年代收集器) 并发回收,标记清楚 低延迟,会产生内存碎片,对CPU资源敏感
G1收集器 取消老年代年轻代的物理划分 取消老年代年轻代的物理划分 空间整合:标记整理,局部使用复制算法,但不会产生内存碎片。可预测的停顿

极客时间java高级(第二次课程)相关推荐

  1. 极客时间限时免费开放全部课程!别纠结了选这几门!

    " 阅读本文大概需要 3 分钟. " 很多技术人对极客时间都比较熟悉了,但也许你还不知道专门服务企业的「极客时间企业版」,他们最近推出了一个活动,面向企业免费开放全部课程. 企业里 ...

  2. 极客时间 自我提升第二天 数据结构与算法之美 应该掌握 / 趣谈网络原理 / 深入浅出计算机组成原理 思维导图

    菜鸟今天又来完成所说的诺言,也希望大家督促,在今天的学习中,菜鸟有了新的认知,我会将上一篇中理解不完善的一些地方进行补充,学习本就是不断打破自己的认知,如果思考都不做,何来的知识的积累 文章目录 数据 ...

  3. 极客时间-算法训练营-第二周

    文章目录 学习笔记 1.哈希表 定义 图示 具体实现是Map和Set HashSet源码分析 HashMap源码分析 时间复杂度 实战题目 [242. 有效的字母异位词](https://leetco ...

  4. 【极客时间】《Java并发编程实战》学习笔记

    目录: 开篇词 | 你为什么需要学习并发编程? 内容来源:开篇词 | 你为什么需要学习并发编程?-极客时间 例如,Java 里 synchronized.wait()/notify() 相关的知识很琐 ...

  5. 本人亲自整理的极客时间设计模式之美的硬核笔记

    由于笔记内容过多,我把它放到语雀上了. 点击我 以下内容是为了让搜索引擎,检测到这篇文章.要阅读体验,请点击上面的连接"点击我",去我的语雀看.对了,我看到语雀那里有投诉的功能,请 ...

  6. 【极术读书】赠卡活动第二期,免费领极客时间月卡系统学习技术管理

    报名链接 极术读书是极术社区推出的读书栏目.极术读书专栏定期推荐嵌入式,人工智能,物联网,云计算,安全,半导体等智能计算领域的图书及技术管理类图书,同时策划社区赠书活动和作者webinar方便读者交流 ...

  7. 极客时间高级Java工程师体系课2.0

    高级Java性能优化的七个方向 下栽の地止:https://lexuecode.com/6572.html 1.复用优化 在写代码的时候,你会发现有很多重复的代码可以提取出来,做成公共的方法.这样,在 ...

  8. 白嫖正版《极客时间》课程的正确姿势

    人工智能时代下,Python已然变身"网红语言",不只是技术圈在讨论,学生.上班族都在学习Python来提高自己的工作效率.增强职业竞争力. TIOBE发表的Python" ...

  9. 极客时间《Java并发编程》学习笔记

      该领域是跟着"极客时间"平台的课程<Java并发编程>入门的,讲师是王宝令.说实话,这个领域如果抱着大部头的书就啃的话,由于缺少实践很难会建立一个体系,即不知道为什 ...

  10. 重磅开源!推荐一个以最优惠的方式购买极客时间课程的开源项目!

    简介 以最优惠的方式购买极客时间的课程. 做为一名互联网人是要终身学习的,总是要学习很多知识点的,总是会买很多课程来学,但是很多课程都很贵,最终没有学到相应的知识点. 极客时间 是一个轻松学习,高效学 ...

最新文章

  1. 赛迪研究院发布《2018年中国自动驾驶产业发展及投资价值白皮书》!
  2. lambda表达式可以用来声明_Lambda 的骚操作,你都get到了没
  3. Linux环境安装Mysql
  4. 逻辑漏洞-token绕过
  5. .NET6中关于Minimal API的简单使用
  6. PHP操作视频音频类 FFmpegPHP
  7. Java集合系列---TreeMap源码解析(巨好懂!!!)
  8. qt qthead里如何响应信号_Qt之QThread(深入理解)
  9. 蓝桥杯小朋友排队java_1215. 小朋友排队
  10. (转) 用虚函数实现多态
  11. MySql统计函数COUNT详解
  12. 数据库实验八 触发器实验
  13. 类iGoogle实现参考资料
  14. 多年来我的创业感悟,穷人与富人的赚钱思维模式丨国仁猫哥
  15. java计算机毕业设计学生宿舍信息管理源程序+mysql+系统+lw文档+远程调试
  16. [C++]typedef typename什么意思?
  17. 计算机一级B考试总结500字,期中考试反思作文500字
  18. 2022年版中国人工智能芯片行业专项调研及投资前景方向预测报告
  19. 圣斗士星矢限制服务器注册,圣斗士星矢服务器内BUG公告介绍
  20. 随便写写,都是我从网上收集的东西!

热门文章

  1. U盘插入计算机不显示图标,Win7下将U盘插入电脑后不显示图标的解决方法
  2. leetcode79 word serach 解题报告
  3. OpenGL 编程指南 ( 原书第 9 版 ) --- 第二章
  4. linux怎么安装台式无线网卡,linux下安装无线网卡
  5. java定义一个接口shape_定义一个借口shape
  6. Cfree5可以JAVA_C语言中free函数的使用详解
  7. 前端开发关于字体侵权问题
  8. 怎样做终端安全防御?
  9. 数的变幻(小明买书)
  10. 31、当当图书榜单爬虫