![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
maybe宸
在有限的时光里,多做有意义的事。
展开
-
巨大的JVM知识点思维导图
之前总结过的一份JVM思维导图,分享一下。撑撑博客数量,哈哈。。图太大了,无法上传,传一份文字版吧。需要图的可以移步类加载子系统 加载 字节码文件通过加载器CLassLoader加载到内存元空间 ClassLoader BootstrapClassLoader 启动类加载器,顶级类加载器,负责加载JDK核心包rt.jar等,由C编写,所以在java中没有类与之对应,无法获取。...原创 2020-12-22 20:47:55 · 331 阅读 · 3 评论 -
JVM--GC及垃圾回收器
-XX:PrintGC。 打印简单GC日志 大对象直接进入老年代 -XX:MaxTenuringThreshold 设置晋升老年代的年龄。默认15,超过年龄的进入老年代 -XX:PretenureSizeThreshold 设置直接进入老年代的内存大小阀值。(只对DefNew和PreNew有效) -XX:+UseTLAB/-XX:-UseTLAB. +:使用TLAB线程内存区。加速对象分配。堆上分配内存会遇到并发分配问题。影响效率;使用TLAB使线程独立使用内存区域,加快内存分配。目前测试是默认开.原创 2020-08-03 16:47:03 · 160 阅读 · 2 评论 -
JVM--偏向锁
定义在对象的对象头信息里。所以它也最轻。当线程获取对象的偏向锁时,对象头的Mark word中会记录当前偏向的线程,所以mark word里存在线程信息,偏向方式是没有竞争时取消当前线程的同步操作。但又不能因为偏向失去锁的意义,所以竞争时,重新偏向其他线程。所以偏向锁在竞争少时能提高性能,竞争多时偏向锁多线程间切换,起不到偏向的作用。书本解释偏向锁mark word格式23位偏向锁线程|2位偏向锁时间戳|4位对象年龄|1(偏向锁固定位)|01(表示可偏向/未锁定)核心思...原创 2020-08-03 16:46:55 · 592 阅读 · 0 评论 -
JVM--轻量级锁
当出现频繁竞争时,对象的偏向锁失效,JVM会尝试获取对象的轻量级锁。轻量级锁实现是一个biasedObjectLocking对象,对象内部有一个biasedlock对象和被锁的对象内存地址指针。而biaedlock内部又是存在一个字段,用来备份被锁的对象的mark word。这时候被锁对象的对象头mark word 格式:ptr ...00 locked最后两位00表示对象持有轻量级锁...原创 2020-08-03 16:46:46 · 297 阅读 · 0 评论 -
JVM--类加载
步骤加载-连接-初始化其中连接又分为验证-准备-解析三步加载类接收:通过全限定名获取二进制数据流,即通过文件系统读入一个class后缀的文件或解析jar、zip包归档文件得到class文件。还有一些奇葩方法例如将二进制数据放入db通过db读取,或者通过http接收。 解析:解析类的二进制数据流为方法区内的数据结构 创建:创建Class类实例类加载器ClassLoader分类BootStrap ClassLoader启动类加载器,由C实现并且在java中没有对象...原创 2020-08-03 16:46:39 · 84 阅读 · 0 评论 -
JVM--hotspot虚拟机
内存布局分3个部分:1.对象头第一部分是对象自身运行数据Mark Word(hashcode、GC分代年龄、锁状态)。这是一个非固定数据结构,以便在极小的空间储存尽量多的信息。 另一部分是类型指针Class MetaData Adress,指向类的元数据,确定类型。 如果是数组还有一个array length记录数组长度。2.实例数据储存真正信息,即代码中定义的各种类型的字段,包括继承来的父类属性。3.对齐填充hotspot要求对象的起始地址必须是8字节...原创 2020-08-03 16:46:27 · 161 阅读 · 0 评论