java基础整理
向阳居士
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HashMap实现原理
1.数据结构分析JDK8之前的版本:数组+链表 (下面引用别人博客的一张图,图片原博客)数组中是Entry,Entry中next存有下一个Entry中的引用,比如A先存在table[0]中 一会又来了个B也要放到table[0]中,就会变成B放table[0]中,B中的next放A的引用。存放是时候根据key进行hash计算来找到该键对应到数组中存储的索引位置,尽量均匀的分布到数组...原创 2019-01-17 11:38:03 · 127 阅读 · 0 评论 -
java垃圾回收算法
常用的垃圾回收算法:1.引用计数算法给对象添加引用计算器,每多一个引用的地方就加一,引用失效时就减一,当计数器为0时,表明对象未被使用,垃圾回收器可以收集该对象特点:实现简单,效率高,python、微软COM等都是使用引用计数器算法管理内存。缺点:难以解决由于对象间的相互循环引用的问题。2.跟搜索算法通过判断某个对象能否通过节点和"gc root"相连,如果没有,说明该对象...原创 2019-03-08 12:12:22 · 13990 阅读 · 4 评论 -
JVM虚拟机内存模型
1.说jvm的内存模型前先了解一下物理计算机的内存处理。物理计算器上用户磁盘和cpu的交互,由于cpu读写速度速度远远大于磁盘的读写速度速度,所以有了内存(高速缓存区)。但是随着cpu的发展,内存的读写也跟不上cpu的读写速度了,cpu的产商就给每个cpu加入了一个高速缓存,也就是下面的结构。每个cpu都有自己的高速缓存,在多核处理环境下,就会出现内存一致性问题,所以在运行时制定了一系...原创 2019-02-19 20:09:59 · 688 阅读 · 0 评论 -
java四种对象引用
1.强引用:与强引用关联的对象,JVM一定不会回收,内存不足时会抛出OutOfMemery。2.软引用:与软引用关联的对象,在内存不足时会被JVM回收利用。3.弱引用:只要JVM进行垃圾回收,就会被回收。4.虚引用:和没引用关联是一样的,随时可能被回收。软引用、弱引用可以和引用队列(ReferenceQueue)联合使用,如果引用被垃圾回收器回收,java虚拟机会把这个引用加入与之...原创 2019-02-19 20:10:18 · 312 阅读 · 0 评论 -
简述IO,BIO,NIO,AIO编程模型
阻塞进行读写时,如果没有东西可读,或者暂时不写,程序就进入等待状态直到有东西可读为止。非阻塞是如果没有东西可读,或者不写,读写函数马上返回。同步同步是指用户操作后等待或者轮询的去查看操作是否就绪异步异步是指用户某动作操作后便开始做其他动作,而当这个动作操作完成的时候,用户会得到这个动作完后才能的通知。同步阻塞io用户进程发起一个io操作,必须等待io操作完成,只有当...原创 2019-03-08 12:14:34 · 326 阅读 · 0 评论 -
在线程中你怎么处理不可捕捉异常
异常:1.CheckException(非运行时异常):对于可恢复条件被检查的异常2.UnCheckException(运行时异常):已经运行不可恢复的异常。run()方法不支持throws语句,所以当线程对象的run()方法抛出非运行时异常时,必须捕获并处理他们。当运行时异常从run方法中抛出时,默认行为是在控制台输出堆栈记录并退出程序。解决方法一般是调用线程的setUncaug...原创 2019-02-26 11:17:16 · 2619 阅读 · 0 评论 -
ArrayList、LinkedList、Vector的区别
1.从存储数据结构分析ArrayList:数组Vector:数组LinkedList:双向链表数组:可以根据下标快速查找,所以大部分情况下,查询快。但是如果要进行增删操作的时候,会需要移动修改元素后面的所有元素,所以增删的开销比较大,数组的对增删操作的执行效率低。而采用数组作为数据存储结构的ArrayList、Vector也存在这些特性,查询速度快(可以根据下标直接取,比迭代查找更...原创 2019-01-15 16:55:34 · 11303 阅读 · 5 评论 -
String,StringBuilder,StringBuffer区别
String:字符常量,适合少量字符操作,不容易经常改动的字符操作。StringBuilder:字符变量(非同步),适合单线程在字符缓冲区的大量操作。StringBuffer:字符变量(同步),适合多线程在字符缓冲区的大量操作。String作为字符常量,存储在jvm的常量池中,同样内容的字符串在常量池中只被创建一次。StringBuilder,StringBuffer 作为普通对象...原创 2019-01-14 16:45:37 · 192 阅读 · 0 评论 -
Sychronized实现原理
Sychronized使用java对象作为锁(锁的状态保存在java对象头部)。使用sychronized可以保证在同一时刻只能有一个线程进入同步代码,并保证共享变量对其他线程的可见性。1.说到实现原理这里先介绍一下内置锁和互斥锁:内置锁:每个java对象都可以用做一个实现同步的锁,这些锁称为内置锁。线程进入同步代码块或方法的时候会自动获得该锁。在退出的时候会释放该锁。获得内置锁的唯一...原创 2019-01-18 18:07:47 · 1041 阅读 · 0 评论 -
内存泄漏和内存溢出
内存泄漏:不再使用的对象不能被回收,资源无法被释放,少量的话没什么大影响,多的话还会导致内存的浪费,拖慢程序运行速度,甚至系统崩溃。内存溢出:实际能够使用的内存空间满足不了请求需要的内存空间,就会报内存溢出,比如栈满时作进栈请求叫做上溢,栈空时座退栈请求叫下溢。两者之间的区别:内存泄漏的堆积,最终会导致内存溢出。 ...原创 2019-01-18 10:11:37 · 169 阅读 · 0 评论 -
Java字节流和字符流的区别
1.字节流是使用InputStream、OutputStream操作的,字符流是使用Reader、writer操作(以上提到的都是抽象内,日常开发用的都是他们的子类)。2.字节流操作单位是字节,直接处理二进制(不支持UniCode码元)直接操作文件,字符流不会直接操作文件,会有一个缓存(一块内存空间),数据先加载到缓存(字符其实是在缓存区中形成的),程序再从缓存中读取,支持Unicode。...原创 2019-01-18 10:11:16 · 307 阅读 · 0 评论 -
HashMap、HashTable、TreeMap区别
1.HashTable:比HashMap出现的早,迭代遍历是使用Enumeration这点和Vector是一样的。Enumeration现在也很少用了,基本已经被Iterator所取代,Iterator(hasNext()、next()、remove())相比Enumeration(hasMoreElements()、nextElement())接口多了一个remove功能,Enumeration...原创 2019-01-17 15:41:54 · 365 阅读 · 0 评论
分享