- 博客(7)
- 收藏
- 关注
原创 虚拟机的内存布局和class文件结构和类加载
虚拟机的内存布局1.分为五部分:线程私有的:程序计数器、本地方法栈、虚拟机栈。线程共享的:堆、方法区。2.除了程序计数器,其他的内存区域都会出现OutOfMemoryError。3.采用分代理论来实现垃圾收集器:堆被分为新生代和老年代,方法区被称为永久代,新生代又分为一个Eden和两个survior空间。4.所有的对象和数组都应该在堆上分配。5.方法区存储的是加载的类型数据、常量、静态变量。6.程序计数器存储的是所执行的字节码的行号。方法区的演变对象的访问定位1.一个对象由三部分组成:对
2021-04-01 15:10:50
165
原创 Map
Map的基础知识Map的实现类HashMap 底层实现是数组加链表加红黑树HashMap使用Node数组来保存数据 Node数组实现了Entry接口HashMap如果数据量达到了阈值会触发扩容机制 阈值=数组容量*加载因子 (数组容量默认是 16 加载因子默认是0.75)3.通过hash&数组容量-1 来确定元素在Node数组中的位置 每个位置可以有多个元素通过链表的形式来连接 当链表的中元素的数量大于要转换为红黑树的阈值(默认是8)时 会把链表转换为红黑树4.
2021-04-01 15:10:19
119
1
原创 线程
线程相关的基础知识1.开启线程使用start2.线程的状态 就绪 阻塞 销毁3.Thread.start方法进入就绪状态 当获得时间片进入CPU执行时 进入运行状态 当时间片运行完成或者代用yield方法 重新进入就绪状态 当运行过程需要获取锁 调用wait sleep方法 等待io事件时 会进入阻塞状态 当阻塞状态解除重新进入就绪状态 当整个线程执行完成 进入销毁状态4 .Thread implements Runnable Thread的run方法 pu
2021-04-01 15:09:45
80
原创 虚拟机垃圾收集
注意事项1.进行垃圾收集时,所有的用户线程都会停止(stop all the world),所以要尽量减少垃圾收集的时间和次数。判断对象是否存活1.基于两种算法:引用计数算法(有很多的特殊情况需要做额外的处理)、可达性分析算法(主流的jvm都是通过此算法来判断对象是否存活的)。2.引用计数算法:当有对象引用时,引用计数器加1,当没有对象引用时,引用计数器为0,为0是代表对象已死。3.可达性分析算法:有一些可以作为GC root的对象,从这些对象出发,如果到一个对象之间没有引用链(不可达),认为对
2021-04-01 15:09:12
158
原创 常见的面试题
基础的部分ThreadLocal1.Thread里有个属性是ThradLocalMap(和每个线程绑定,每个线程私有),可以通过ThraedLocal(ThreadLocal和Thread在一个包里)来操作Thread里的ThreadLocalMap。2.ThreadLocalMap通过一个Entry数组来保存数据,Entry的key是ThreadLocal类型的,value是Object类型的,key是一种弱引用类型的引用。3.ThreadLocal的使用场景一般是用来在单个线程中的方法之中传递数
2021-04-01 15:08:19
87
原创 锁
锁相关的基础知识1.同步是指当有多个线程并发访问共享资源时,在某一时刻只有一个线程可以访问。2.阻塞是指当前的线程是挂起还是继续执行。3.同步的方式有阻塞同步(synchronized和lock)和非阻塞同步(CAS机制)4.CAS机制需要具有原子性,所以要依赖于硬件,可以把比较和交换通过一条CPU指令来执行。5.java的unsafe类的某些方法包装了CAS,hotspot对这些特殊方法做了特殊处理,可以把这些方法编译为平台相关的处理器CAS指令。6.Unsafe在jdk1.9之前,只允许通过
2021-04-01 15:07:53
69
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人