jvm
文章平均质量分 94
东纪元
这个作者很懒,什么都没留下…
展开
-
jvm hotspot的minor major full gc之间的关系,以及哪些情况下会触发full gc
知乎大佬回答:https://www.zhihu.com/question/41922036作者:RednaxelaFX针对HotSpot VM的实现,它里面的GC其实准确分类只有两大种:Partial GC:并不收集整个GC堆的模式Young GC:只收集young gen的GCOld GC:只收集old gen的GC。只有CMS的concurrent collection是这个模式Mixed GC:收集整个young gen以及部分old gen的GC。只有G1有这个模式Full GC:收转载 2020-11-21 17:18:47 · 594 阅读 · 0 评论 -
jvm volatile 之 cpu 缓存行
https://www.jianshu.com/p/e338b550850f转载 2020-10-24 08:27:40 · 219 阅读 · 2 评论 -
java jvm volatile与内存屏障
内存屏障(Memory barrier)为什么会有内存屏障每个CPU都会有自己的缓存(有的甚至L1,L2,L3),缓存的目的就是为了提高性能,避免每次都要向内存取。但是这样的弊端也很明显:不能实时的和内存发生信息交换,分在不同CPU执行的不同线程对同一个变量的缓存值不同。 用volatile关键字修饰变量可以解决上述问题,那么volatile是如何做到这一点的呢?那就是内存屏障,内存屏障是硬件层的概念,不同的硬件平台实现内存屏障的手段并不是一样,java通过屏蔽这些差异,统一由jvm来生成内存屏障转载 2020-09-08 23:51:42 · 629 阅读 · 0 评论 -
jvm面试问题及我的答案
今天在技术群里被大佬问了一堆jvm的问题。。收集记录下来。。并且附上我的答案(没有百度的,不可尽信,仅仅是我看《深入理解java虚拟机》的粗浅回答)1、堆被分成了新生代和老年代,什么对象会进入老年代。答:(1)大对象(对象大小超过设定的阈值),直接到老年代。(2)在年轻代survivor区域存活minorgc次数超过指定次数的对象。默认是15次。可通过参数设置。(3)s...原创 2020-01-02 20:00:04 · 114 阅读 · 1 评论 -
Arthas使用指南 JVM监测工具
https://segmentfault.com/a/1190000014618329?utm_source=tag-newest#articleHeader10转载 2019-10-10 19:15:01 · 484 阅读 · 0 评论 -
java常量池:字符串常量池,静态常量池,运行时常量池,
转载自:https://blog.csdn.net/qq_25825923/article/details/84972256字符串常量池(String Poll)java6: 存在于永久代中。 字符串常量池保存的是字符串常量。 java7: 转移到了堆中。 字符串常量池存的是字符串常量和堆内的字符串对象的引用。 静态常量池zld自身理解:java编译后生成的...转载 2019-07-03 12:21:17 · 608 阅读 · 0 评论 -
jvm 垃圾收集器
serial:单线程进行垃圾回收,在垃圾回收的时候会把用户线程暂停。主要用于客户端。serial old:这是serial的老年代版本。parNew:多线程进行垃圾回收,在垃圾回收的时候会把用户线程暂停。如果在单线程环境中,不如serial。这是并行。与CMS一起用的要么serial,要么就只有parNew,现在cpu都往多核心多线程发展,所以与cms一起用的就是parNew。pa...转载 2018-10-23 15:38:57 · 191 阅读 · 0 评论 -
jvm 三种垃圾回收算法:标记-清除、复制算法、标记-整理
标记-清除:首先,要对需要回收的对象进行标记,如何标记上面已经提过。然后,要对这些被标记的对象进行收集。缺点:1、清除需要被清理的对象后剩下的内存都是破碎的,如果要创建大对象,可能会因为找不到足够的内存而再次触发垃圾收集。2、标记和清除的效率相对于其他算法来说都不高,标记的原理就是从GC Roots往下遍历,能被遍历到的对象就是存活对象,剩下不能被遍历到的对象就是需要被标记清除的。而清...转载 2018-10-23 09:44:18 · 1845 阅读 · 2 评论 -
jvm 对象的访问定位,即引用是怎么定位到内存中的对象的
对象的访问定位有两种方式:第一种,引用使用句柄访问对象:概念:引用存储的是一个地址,该地址是句柄的地址,而句柄是一种结构,分别存储 实例指针和类型指针 这两种指针,(实例指针是指向堆中的对象实例,而类型指针指向的是在方法区中该对象所属类型)。当要访问对象时,先通过引用访问句柄,再通过句柄访问对象实例以及对象类型信息。句柄是存储在堆中的,如果使用这种方式,那么就会从堆中分出一块内存用作句柄池...转载 2018-10-22 21:15:36 · 508 阅读 · 0 评论 -
jvm 对象在内存中存储的布局
jvm 对象在内存中存储的布局有三部分:对象头、实例数据、对齐填充。1、对象头:运行时数据、类型指针、数组长度。(1)运行时数据:hashcode哈希码、锁状态标志、线程持有的锁、GC年龄分代等,有些不是固定不变的,在运行时会根据当时的状态进行修改。(2)类型指针:指向方法区中类型信息的指针。类型信息就是编译后的代码以及其他关于这个类的数据信息。(3)数组长度:如果对象是数组,对...转载 2018-10-22 17:48:47 · 374 阅读 · 0 评论 -
jvm-对象的创建过程
在java中使用new创建对象时,虚拟机创建的过程:以Object obj =new MyObject();为例(其他创建实例方式也一样)一、分配内存1、虚拟机会检查MyObject这个类是否存在,有没有被加载。如果MyObject没有被加载过,那么就先加载这个类;2、虚拟机根据MyObject类的类信息在堆中分配内存空间,分配内存有两种方式:(1)指针碰撞:当内存是规整的,...原创 2018-10-22 17:39:33 · 349 阅读 · 0 评论