美文网首页
class Student(一):介绍

class Student(一):介绍

作者: 淡定小问题 | 来源:发表于2020-08-09 17:33 被阅读0次
问题导向的学习方法

摘要:class Student系列,希望通过对一段非常简单的代码分析,以问题为导向,加深自己对代码的理解。

如题,一段非常简单的代码如下:

class Student {
    int age;
    String name;

    static Student demo() {
        Student xm = new Student();
        xm.age += 10;
        xm.name = "小ming😊";
        return xm;
    }

    public static void main(String[] args) {
        Student.demo();
    }

本系列会尝试回答以下问题:

1) 基本内存分配分析
  1. 执行demo方法时,哪些地方分配了哪些内存?分别是多大?
  2. 字符串占用多少内存?编码方式?引用占用多大内存?
  3. 方法栈上的内存布局是什么样的?堆上的内存布局?
2)执行
  1. 栈式虚拟机是如何执行这段代码的?字节码?寄存器式虚拟机?
  2. 栈式虚拟机 和 寄存器式虚拟机区别?
3) 操作系统
  1. 虚拟内存上的对局是什么样的?
  2. 物理内存上的布局是什么样的?
  3. 上述代码是如何体现局部性原理的?
  4. 哪些进程和线程参与到了demo执行中?进程消耗了哪些资源,线程?COW?Task?
  5. 虚拟内存,文件系统怎么参与到demo方法的运行中?
  6. 哪些硬件参与到了代码执行中?硬件上的数据流动是什么样的?
4)GC
  1. demo方法执行完成后,哪些内存可以回收?回收时机?
  2. demo方法执行过程中,哪些内存不可以回收,为什么?
  3. demo方法如果执行100w次,适合什么样的内存回收机制?对比分析?
  4. 如果执行demo方法时内存不够了,OOM会崩溃在哪一行?为什么?
  5. 想办法让demo方法内存泄漏
  6. OOM 和 内存泄漏的区别?OOM的原因?OOM一定是内存不够了吗?
  7. GC影响了什么?
  8. 分代GC为啥有效?
5)多线程和内存模型
  1. 线程私有的,线程共享的?
  2. 两个线程同时执行的内存布局情况?
  3. 执行demo方法时,线程CPU被抢占,发生了什么?
  4. 是否是线程安全的?为什么?
  5. 上述代码中哪些操作是原子性的,哪些操作不是?
  6. 如果给demo方法加上synchronzed关键字,会有什么变化?
  7. 10000个线程同时执行demo方法?100w个线程同时执行?
  8. 线程的开销有哪些?
  9. 线程安全:系统的保证在什么程度?intra-thread 语义
  10. 哪些分配在主内存,哪些分配在工作内存?
  11. 原子操作有哪些?
  12. 缓存一致性模型?
  13. 上述代码存在哪些happens-before 关系?

相关文章

网友评论

      本文标题:class Student(一):介绍

      本文链接:https://www.haomeiwen.com/subject/lbprrktx.html