深入理解JVM
mechanic-heaven
这个作者很懒,什么都没留下…
展开
-
Java并发之锁优化
引子我们在java开发中常可以听到各种各样的锁,乐观锁+悲观锁、共享锁+独占锁、公平锁+非公平锁、读写锁、可重入锁、分段锁…那么为什么会有这么多的锁的类型嘞?其实java对锁的分类并没有一个非常严格的限制,我们常见的分类一般都是从锁的特性、锁的设计思想、锁的状态等不同角度来整理的。比如ReentrantLock既是独占锁(从锁的状态来说,阻塞),也是可重入锁(锁特性,同一个同步代码块是可重入的...原创 2020-03-13 21:29:56 · 170 阅读 · 0 评论 -
深入理解JVM(五)----七种垃圾收集器和内存分配、回收策略
一:七种垃圾收集器新生代收集器SerialParNewparallel老年代收集器Serial OldCMSparallel Old新生代和老年代收集器G1几种垃圾收集器是相互配合使用,连线代表可以写作使用。二、新生代垃圾收集器Serial概述:Serial是一类用于新生代的单线程收集器,采用复制算法进行垃圾收集。Serial进行垃圾收集时,不仅只用一条单...原创 2020-03-03 00:11:23 · 280 阅读 · 0 评论 -
深入理解JVM(四)垃圾回收目标和垃圾回收算法
先谈引用不论是是引用计数还是可达性分析,判断一个对象是否存活都和引用有关。java将引用分为了4种,强引用(Strong Reference),软引用(Soft Reference),弱引用(Weak Reference),虚引用(Phantom Reference),引用的强度依次减弱。强引用:指java种普遍存在的引用关系,如Object obj = new Object();这类的引用...原创 2020-03-02 18:30:36 · 252 阅读 · 0 评论 -
深入理解JVM(三)----Java线程内存模型和线程
引子在物理机中,并发执行多个任务,充分利用计算机处理器的性能,看起来顺理成章,但实际上并不像看起来那么简单。其中一个重要的原因就是绝大多数的任务不能只靠处理器“计算”就能完成,处理器至少要与内存交互,比如读取、存储数据,这个I/O操作是很难消除的。而储存设备和处理器的运算速度差了好几个量级,所以引入了高速缓存(cache)来作为缓冲。即将运算要使用的数据复制到缓存,让运算快速进行,运算结束后从缓...原创 2020-02-28 15:16:57 · 424 阅读 · 0 评论 -
深入理解JVM(二)----对象的内存分布和创建
对象的内存分布hotspot虚拟机中,对象在内存中的布局可以分为三个区域,对象头、实例数据、对齐填充。对象头hotspot虚拟机的对象头包括两部分信息,一部分用于存储对象自身的运行时数据(被称为Mark Word),如hash码,GC分代年龄,锁状态标志,偏向线程ID,偏向时间戳等。这部分在32位和64位虚拟机(未开启压缩指针)中占32位和64位。虽然对象在运行时的数据很多,远远超过32或...原创 2020-02-26 13:44:39 · 174 阅读 · 0 评论 -
深入了解JVM---压缩指针
什么是压缩指针通常64位JVM消耗的内存会比32位的最多会多用1.5倍,这是因为对象指针在64位架构下,对象指针长度会翻倍。 对于那些将要从32位平台移植到64位的应用来说,平白无辜多了1/2的内存占用,这是开发者不愿意看到的。 幸运的是,从JDK 1.6 update14开始, 64 bit JVM正式支持了 -XX:+UseCompressedOops (需要jdk1.6.0_14) 这...转载 2020-01-20 15:23:31 · 1071 阅读 · 0 评论 -
深入理解JVM(一)JAVA内存区域和内存溢出异常
JAVA内存区域 上图展示了java内存划分成了哪几个区域,这些区域都有各自的用途,创建和销毁时间,有的区域随着虚拟机的启动而存在,而有的则依赖用户线程的启动和结束而创建和销毁。 接下来我们来说说具体的区域。程序计数器 &nbs...原创 2020-01-20 14:46:54 · 150 阅读 · 0 评论