摘要: 一、对象的创建过程 加载类->申请对象内存->成员变量赋默认值->调用构造方法<init>,包含赋值初始值,执行构造方法语句 二、对象的布局(64位) 普通对象 对象头:markword 8 ClassPointer指针:-XX:+UseCompressedClassPointers 为4字节 不开 阅读全文
posted @ 2020-09-06 21:08 kylinmac 阅读(143) 评论(0) 推荐(0)
摘要: Java虚拟机定义了在程序执行期间使用的各种运行时数据区域。 其中一些数据区域是在Java虚拟机启动时创建的,仅在Java虚拟机退出时才被销毁。 其他数据区域是每个线程私有的。线程私有的数据区域在一个线程被创建时创建,在线程关闭时销毁。 一、The pc Register The Java Virt 阅读全文
posted @ 2020-09-06 19:32 kylinmac 阅读(164) 评论(0) 推荐(0)
摘要: 一、cache line 缓存时将多个数据缓存到同一行内,一旦其中一个数据被改变,整个缓存行会失效。 产生问题:伪共享。 解决方法:1.8之前可以使用缓存行对齐(64bytes)。1.8之后官方提供了解决方案通过对类或者变量添加@Contended注解实现,需要在JVM启动时设置-XX:-Restr 阅读全文
posted @ 2020-09-06 17:37 kylinmac 阅读(146) 评论(0) 推荐(0)
摘要: 一、类加载的过程: 二、类加载器 通过双亲委派的方式,由子到父再由父到子进行加载,保证一些基础类的使用安全。 通过重写ClassLoader中的loadClass(String)方法可以破坏双亲委派方式。 自定义类加载器的意义:比如加密,热部署。 三、混合模式 解释器+热点代码编译。 阅读全文
posted @ 2020-09-06 12:23 kylinmac 阅读(112) 评论(0) 推荐(0)
摘要: 摘自jvms8 idea可使用jclasslib Bytecode viewer插件查看class文件结构 阅读全文
posted @ 2020-09-06 10:19 kylinmac 阅读(128) 评论(0) 推荐(0)