自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 Synchronized和ReentrantLock的区别

Synchronized jvm是通过控制进出monitor对象来实现方法与代码块的同步,其中代码块同步是通过monitorenter和monitorexit来实现,monitorenter插入在代码块的开始位置,monitorexit插入在结束处或抛出异常处。方法同步通过在编译上加ACC_SYNCHRONIZED,然后使用monitorenter和monitorexit标记。 synchronized用的锁存在Java对象头里,对象头里包含有Mark Word,其中2bit用来存储锁的标记位,1bit用来

2020-07-26 15:28:10 131

原创 Java锁

公平锁 多个线程按照申请锁的顺序来获得锁;先检查等待队列是否为空,然后再CAS修改锁的状 态。 非公平锁 当一个线程申请锁时,如果锁处于空闲状态就直接获取锁,否则进入阻塞队列。直接CAS修改锁的状态,如果失败就进入等待队列。 读写锁 写锁被获取时,后续所有的读锁和写锁都会被阻塞。 自旋锁 线程获取锁时,会自旋一段时间等待锁的释放,而不是进入阻塞队列,一般有时间限制; 自适应自旋锁 线程的等待时间由上一次用于该锁的自旋时间和持有者状态决定。 可重入锁 能够支持一个线程

2020-07-26 15:17:15 65

原创 Java的线程池

线程池的优点 1.可重复利用已创建的线程,降低资源消耗; 2.当任务到达时,任务可以不需要等到线程创建就能立即执行,提高响应速度; 3.可根据系统的承载能力,合理的设置线程池的大小; 线程池运行原理 1.检查核心线程池中的线程是否都在工作,没有则创建,有则进入下一步; 2.检查工作队列是否满了,没满就将任务放入工作队列,满了就进入下一步; 3.检查线程池中运行的线程是否超过线程池最大容量,没有就创建新的工作线程,否则进入下一步; 4.交给饱和策略来处理。 线程池的各项参数 1.corePoolSize(线

2020-07-26 14:43:22 64

原创 JVM垃圾回收机制

1.可达性分析 Java从一系列的GC roots作为头节点,向下遍历,不在其路径(引用链)下的对象就是不可达的。GC roots可以是方法区的类静态属性引用的对象,或是方法区常量的引用对象,以及虚拟机栈和本地方法栈的引用对象。所有的GC roots都存放在一个叫OopMap的数据结构中。 2.JVM的垃圾回收算法 2.1 分代回收算法 与其说是一种算法,它更像是一种思想,它根据对象存活的时间将内存划分为老年代和新生代, 对于两者分别用合适的垃圾回收算法; 2.2 标记清除算法 发生在老年代,标记清除算法会

2020-07-23 22:44:59 90

原创 JVM的内存结构

1.线程私有的(这一部分不会被垃圾回收,线程执行完就会被销毁) 1.1 程序计数器 当前线程所执行的字节码的行号指示器,可以在多线程中找到原方法执行到的位置。是唯一没有规定out of memory error(内存溢出)的区域。 1.2 虚拟机栈 每一个线程对应一个Java栈,线程每调用一个方法就会压入一个栈帧,栈帧是用来储存方法数据和部分过程结果的数据结构,例如String str=“ABC”,str被存放在栈中,在方法执行结束后出栈。 当栈的深度大于虚拟机所允许的深度时,会报StackOverflow

2020-07-23 22:15:32 107

原创 Java的基本类型、包装类以及自动装箱

Java的基本类型、包装类以及自动装箱 数据类型 内存大小 byte 1B short 2B int 4B long 8B float 4B double 8B char 英文 1B,中文 UTF-8 占 3B,GBK 占2B boolean 单个变量 4B / 数组 1B 其中byte <(short=char)< int < long < float < double,小转大时可以自动转换,大转小时需要强制类型转化且可能丢失数

2020-07-23 21:44:05 81

原创 Java的类加载

1.Java的类加载机制 Java源代码经过编译器编译成字节码文件(.class文件),然后由JVM将.class文件加载进内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 基础类一次性加载到JVM中,其他类在用时才会加载。父类加载器加载过的类不会被子加载器重复加载。 类加载器:以下类加载器按顺序加载,用户可自行编写类加载器,需继承ClassLoad类. 1.Bootstrap ClassLoader(启动类加载器):加载Java的核心类,代码

2020-07-23 21:32:20 70

原创 访问修饰符及static、this、native

1.访问修饰符 1.public:访问权限最广的修饰符,可以跨类跨包访问; 2.protect:只允许同一个包下或者该类的子类访问; 3.default:默认情况,只允许同一个包下的对象访问,不允许不同包的子类访问; 4.private:只允许在该类下访问,不允许其子类访问。 2.this 1.可以对当前类下的成员变量直接引用,如this.name; 2.在构造函数中,对与成员变量重名的形参引用,如this.name=name; 3.直接代指本类中的构造函数,如this(name),并且必须放在构造函数的第

2020-07-23 21:29:28 218

原创 Java集合

1.ArrayList ArrayList是一个有序可重复的集合,其底层是一个Object[] elementData数组。其数组的默认大小是10,每当该数组超出容量时,会自动扩大到原来的1.5倍。 ArrayList集合在执行add()方法时,需要先调用ensureCapacityInternal()方法检查add之后数组是否会超出容量,如果超出,就扩容到原来的1.5倍。对于需要插入的对象,还会调用System.arraycopy()方法 对整个数组进行移动。对于remove()方法,如果传入的是下标,会

2020-07-23 21:21:15 57

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除