自定义博客皮肤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)
  • 收藏
  • 关注

原创 Java中的强软弱虚引用

Java中的强软弱虚引用强引用强引用内存示意图:Java中最普遍的引用,比如有个A类,我们使用new关键字去创建A的实例的时候A a = new A(); 栈中变量a指向堆中A的实例这个引用就是强引用。public class TestForceReference { public static void main(String[] args) { A a = new A(); // 创建出A的实例对象,变量a指向堆中的A对象实例 System.out.p

2020-11-02 19:48:01 152

原创 Java中对象怎么分配?

Java中对象的分配过程优先在栈中分配,对象不大,而且对象不会逃逸(对象只会在当前方法中引用)。随着方法调用结束弹栈,对象也就释放了。不需要GC!!!不满足栈上分配,看这个对象够不够大,够大直接进Old区,由FGC清除对象这个对象不够直接进Old区,优先分配在TLAB上(其实也是Eden区,JVM为了避免多线程并发分配内存空间进行抢占,提前在Eden区给每个线程单独分配一块内存区域)如果在TLAB上分配失败了,就会在Eden区进行分配。...

2020-10-26 20:36:42 681

原创 对象在内存中的存储布局

对象在内存中的存储布局普通对象:在64位虚拟机中:markword占8字节,klasspointer跟虚拟机是否开启指针压缩有关,默认开启,占用4个字节否则是8个字节,instance data 实例数据, padding 一个对象补齐8字节的整数倍。数组对象 :相比普通对象,多了一个4字节的长度用来表示数组长度。仅此而已Markword主要包含对象的三个信息:HashCodeGC信息(主要是4位来表示GC年龄)锁信息...

2020-10-26 19:59:25 248

原创 DCL单例要不要加volatile关键字

DCL单例要不要加volatile关键字?首先得知道volatile关键字的作用,其次什么是单例,最后DCL是怎么实现的单例?(一)volatile关键字在java中用来修饰成员变量,有两个语义:被volatile修饰成员变量,在多个线程之间可见volatile禁止指令重排序(二)单例,在程序中某个类的实例有且只能有一个。(三)DCL,Double Check Lock的首字母缩写,实现单例的一种方式上代码:public class B { private volatile

2020-10-26 19:19:55 223

原创 Java中一个对象的创建过程

Java中一个对象是怎么创建的?在Java代码层面,创建一个对象最常用的方式就是使用new关键字,那么我们在new某个对象的时候JVM是怎么帮我们创建出来这个对象的呢?今天从ByteCode层面看下其中的奥秘。A类是个普通的Java类public class A { private String name = "小明"; private Integer age = 18; public A() { } public A(String name, Integ

2020-10-23 22:27:06 409

原创 网络IO模型之BIO与NIO

BIO模型(Blocking-IO)BIO最大的特点是单线程无法处理并发请求除非每连接每线程。每个请求服务器的客户端,对于服务器来讲,都要开辟一个线程去处理该客户端的IO事件。在操作系统中线程是个开销不小的资源,如果客户端只是与服务器建立了连接,并没有产生IO事件,那么对于服务器来讲,为这个客户端开辟这个线程岂不是在浪费资源?虽然可以使用线程池对服务端进行优化,但是治标不治本图示:在JAVA中JDK提供了BIO的相关实现-ServerSocket示例代码如下:public class BIOServ

2020-08-16 15:24:11 297

原创 AQS源码(三)

手把手教你阅读AQS源码(三)ReentrantLock的公平锁和非公平锁的释放锁的逻辑从源码层面上来看是相同的,我们跟进源码看下具体流程。还是之前的调试Demopublic class ReentrantLockDemo { public static void main(String[] args) { final ReentrantLock lock = new ReentrantLock(true); try { lock.loc

2020-08-12 20:36:56 82

原创 AQS源码(二)

手把手教你阅读AQS源码(二)上篇文章笔者从源码层面总结了ReentrantLock的非公平锁加锁流程,这次继续看下ReentrantLock的公平锁如何加锁,这里放一下链接传送门->非公平加锁源码分析还是老样子,不能调试的源码尽量不要去读,我们先来搞一个公平锁的调试Demopublic class ReentrantLockDemo { public static void main(String[] args) { // 构造方法传入true是公平锁的创建方式

2020-08-10 21:43:23 149

原创 AQS源码(一)

qq

2020-08-08 17:08:56 784 4

空空如也

空空如也

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

TA关注的人

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