自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ZGC(Z Garbage Collector)

1.ZGC收集器zgc在希望对吞吐量尽量不影响的情况下,降低堆内存垃圾收集延迟的收集器。在jdk11时zgc就被引入Java,并在jdk13中对zgc做了增强(ZGC 可以将未使用的堆内存返回给操作系统)ZGC 收集器是基于Region内存布局的,不设分代 的, 使用了读屏障、 染色指针和内存多重映射等技术来实现可并发的标记- 整理 算法 的, 以低延迟为首要目标的 一 款 垃圾 收集 器。 2.内存布局ZGC基于Region的堆内存布局, ZGC的Region具有 动态 性—— 动态创建和

2020-05-23 17:02:55 492

原创 ThreadLocal

1.什么是ThreaLocal线程内部的数据存储类,通过它可以在指定的线程中存储数据,对数据存储后,只有在线程中才可以获取到存储的数据,对于其他线程来说是无法获取到数据。每个线程线程内部都有一个Map。 ThreadLocal.ThreadLocalMap threadLocals = null; Map里面存储线程本地对象(键)和线程的变量副本(值) 但是,线程内部的Map...

2019-07-23 22:01:38 201

原创 锁优化

1.回顾通过前面对虚拟机和线程的学习:同步方法通过ACC_SYNCHRONIZED关键字隐式的对方法进行加锁。当线程要执行的方法被标注上ACC_SYNCHRONIZED时,需要先获得锁才能执行该方法。《synchronized》 同步代码块通过monitorenter和monitorexit执行来进行加锁。当线程执行到monitorenter的时候要先获得所锁,才能执行后面的方法。当线程...

2019-07-17 09:56:25 170

原创 CAS

1.CAS是什么CAS (Compare and Swap),即比较并替换,CAS是乐观锁的一种实现方式。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。虚拟机采用 CAS 配上失败重试的方式保证更新操作的原子性。CAS的思想很简单:三个参数,一个当前内存值V、旧的预期值A、即将更新的值B,当且仅当预期值A和内存值V相同时,将内存值修改为...

2019-07-01 23:51:52 167

原创 Java的对象头

1.对象头每一个Java类,在被JVM加载的时候,JVM会给这个类创建一个instanceKlass,保存在方法区,用来在JVM层表示该Java类。当我们在Java代码中,使用new创建一个对象的时候,JVM会创建一个instanceOopDesc对象,这个对象中包含了对象头以及实例数据。Java对象保存在堆内存中。在内存中,一个Java对象包含三部分:对象头、实例数据和对齐填充。其中对象...

2019-06-23 23:32:29 483

原创 synchronized

1.synchronizedsynchronized,是Java的中用于解决并发情况下数据同步访问的一个很重要的关键字。当我们想要保证一个共享资源在同一时间只会被一个线程访问到时,可以我们在代码中使用synchronized关键字对类或者对象加锁。2. synchronized的用法在Java中,synchronized有两种使用形式,同步方法和同步代码块。代码如下:public...

2019-06-14 22:29:40 143

转载 Java虚拟机线程同步

1.线程和共享数据Java编程语言的优点之一是它在语言层面上对多线程的支持。这种支持大部分集中在协调多个线程对共享数据的访问上。JVM的内存结构主要包含以下几个重要的区域:栈、堆、方法区等。在Java虚拟中,每个线程独享一块栈内存,其中包括局部变量、线程调用的每个方法的参数和返回值。其他线程无法读取到该栈内存块中的数据。栈中的数据仅限于基本类型和对象引用。所以,在JVM中,栈上是无法保存真...

2019-06-14 21:17:44 112

原创 IO读写原理

1. JavaIO读写原理无论是Socket的读写还是文件的读写,在Java层面的应用开发或者是linux系统底层开发,都属于输入input和输出output的处理,简称为IO读写。在原理上和处理流程上,都是一致的。区别在于参数的不同。用户程序进行IO的读写,基本上会用到read&write两大系统调用。可能不同操作系统,名称不完全一样,但是功能是一样的。先强调一个基础知识:...

2019-06-10 10:26:59 6124 1

原创 对象不一定都是在堆上分配内存的

之前在JVM内存结构说到堆内存区域存放了对象实例及数组(所有new的对象),而在在《深入理解Java虚拟机中》关于Java堆内存有这样一段描述:但是,随着JIT编译期的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化,所有的对象都分配到堆上也渐渐变得不那么“绝对”了。1.JVM内存分配策略关于JVM的内存结构及内存分配方式,不是本文的重点,这里只做简单回顾。...

2019-06-07 22:53:28 594 1

原创 JVM之JIT

1.热点代码1.1理解当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”。1.2热点代码的分类被多次调用的方法一个方法被调用得多了,方法体内代码执行的次数自然就多,成为“热点代码”是理所当然的。被多次执行的循环体一个方法只被调用过一次或少量的几次,但是方法体内部存在循环次数较多的循环体,这样循环体的代码也被重复执行多次,因此这些代码也应该认为是“...

2019-05-31 22:16:39 257

原创 类的加载机制

1.1类的加载过程类从被加载到虚拟机内存中开始,直到卸载出内存为止,它的整个生命周期包括了:加载、验证、准备、解析、初始化、使用和卸载这7个阶段。其中,验证、准备和解析这三个部分统称为连接其中,加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班的“开始”(仅仅指的是开始,而非执行或者结束,因为这些阶段通常都是互相交叉的混合进行,通常会在一...

2019-05-24 22:31:17 303

原创 垃圾回收机制(GC)

1. 哪些“垃圾”需要回收?JVM结构五大区中,有三个是不需要进行垃圾回收的:程序计数器、JVM栈、本地方法栈。因为它们的生命周期是和线程同步的,随着线程的销毁,它们占用的内存会自动释放,所以只有方法区和堆需要进行GC。具体到哪些对象的话,简单概况一句话:如果一个对象不能到达GC Roots对象的时候,那么它可以被回收。通俗解释一下就是说,如果一个对象,已经没有什么作用了,就可以被当废弃物被回...

2019-05-17 22:10:24 287

原创 JMM(Java Memory Model)内存模型

6. 总结6.1处理器内存模型顺序一致性内存模型是一个理论参考模型,JMM和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照。JMM和处理器内存模型在设计时会对顺序一致性模型做一些放松,因为如果完全按照顺序一致性模型来实现处理器和JMM,那么很多的处理器和编译器优化都要被禁止,这对执行性能将会有很大的影响。根据对不同类型读/写操作组合的执行顺序的放松,可以把常见处理器的内存模型...

2019-05-10 16:58:07 214

原创 JMM(Java Memory Model)内存模型

5.volatile5.1 volatile特性当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个监视器锁对这些单个读/写操作做了同步。class VolatileFeaturesExample { volatile long vl = 0L; //使用vola...

2019-05-03 17:33:16 124

原创 JMM(Java Memory Model)内存模型

1.内存模型的抽象概念Java线程之间的通信由JMM控制,JMM并不是真实存在的东西,他是一种抽象的概念的是一组规则,通过这组规则解决了并分编程可能出现的线程安全问题并且定义了Java程序中各个变量(实例变量,静态变量)的访问方式。JVM运行的实体是线程,而JVM又会为线程创造一个工作内存,这部分内存用于存储线程的私有数据,(所有的变量都存储在主内存(Main Memory)中。...

2019-03-26 11:50:54 205

原创 JVM内存结构

1.java内存组成:堆(heap)和非堆(Non-heap)JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给 自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法 的代码都在非堆内存中。2. ★JVM内存结构2.1堆...

2019-03-20 14:22:29 214

空空如也

空空如也

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

TA关注的人

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