
Java
文章平均质量分 82
wenkun97
这个作者很懒,什么都没留下…
展开
-
HashMap原理,HashMap,HashTable, ConcurrentHashMap对比
HashMap原理1.7及之前,默认链式Hash存储从 JDK 1.8 开始,一个桶存储的链表长度大于等于 8 时会将链表转换为红黑树。用key的hashCode值对容量取模, 开链法,头插法。如果size >= threshold(这个由装载因子决定)时, 进行扩容,容量扩为原来的两倍(方便重新计算下标,比如原来的位置+原容量),重新把key, value插入。HashMap,HashTable, ConcurrentHashMap对比HashMap是非线程安全的, 允许null值(因为原创 2020-08-24 21:55:01 · 231 阅读 · 0 评论 -
JAVA多线程实现,线程状态,线程池使用,Threadlocal
有三种使用线程的方法:实现 Runnable 接口;实现 Callable 接口;与 Runnable 相比,Callable 可以有返回值,返回值通过 FutureTask 进行封装。继承 Thread 类。同样也是需要实现 run() 方法,因为 Thread 类也实现了 Runable 接口。当调用 start() 方法启动一个线程时,虚拟机会将该线程放入就绪队列中等待被调度,当一个线程被调度时会执行该线程的 run() 方法。实现 Runnable 和 Callable 接口的类只原创 2020-08-24 21:42:05 · 372 阅读 · 0 评论 -
JVM 内存模型,垃圾回收,垃圾收集器
运行时数据区域:线程共有:方法区、堆方法区:用于存放已被加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。堆:所有的对象都在这里分配内存,是垃圾收集的主要区域,现代的垃圾收集算法都采用分代收集算法,可以将堆分为两块,新生代,老生代。不需要连续的内存,可以动态增加,增加失败会抛OOM异常。线程私有:程序计数器,虚拟机栈,本地方法栈程序计数器:记录正在执行的虚拟机字节码指令的地址虚拟机栈:每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调原创 2020-08-23 14:41:41 · 229 阅读 · 0 评论 -
安卓开发(Java)面试经历
除了问项目经历,一些技术性的问题如下:内存回收机制(Garbage Collection,GC)1. java的内存内容来源堆 (是gc的主要区域) 线程共享,主要是用于分配实例对象和数组栈 线程私有,它的生命周期和线程相同,又分成 虚拟机栈和本地方法栈,只有它会报 StackOverFlowError,栈深度超标方法区 线程共享 用于储存被虚拟机加载的类的信息,静态...原创 2018-04-14 16:59:28 · 1530 阅读 · 0 评论 -
内存泄漏与内存溢出
一:区别: 1)内存溢出 out of memory:是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。2)内存泄露 memory leak:是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟...转载 2018-04-14 00:02:26 · 167 阅读 · 0 评论