08 2022 档案
摘要:在编译期间 对于引用类型会使用xaload xastore 和xload xstore的区别
阅读全文
摘要:public class A { public static void main(String[] args) { int a = 1; a = a++; System.out.println(a); } } 结果的1 因为在执行后++时 会先将变量load加载进操作数栈 然后对原变量加一 再对目标
阅读全文
摘要:一个对象的finalize方法只会被调用一次 如果这一次调用它没有完成复活 就会死亡 复活方法 让一个静态变量重新指向它 标记清楚算法标记的是可达对象
阅读全文
摘要:String a = new String("1") + new String("2"); a.intern(); String b = "12"; sout(a == b); //在jdk6中为false 在jdk7/8中为true 首先只看第一行代码 这还代码为创建6个对象 分别是 1 拼接字符
阅读全文
摘要:String a = "a"; String b = "b"; String c = "ab"; sout(a+b == c); //false 在拼接字符串时 如果有一个值是变量 那他就相当于通过StringBuilder new了一个字符串 sout((a+b).intern() == c);
阅读全文
摘要:ReplayingDecoder使用的bytebuf与普通的bytebuf是不同的
阅读全文
摘要:首先随便找了一个jvm的结构图 类加载器子系统 它包含三个大的阶段 分别是 : 加载(loading) -> 链接(linking) -> 初始化(Initialization) 加载: 通过类的全限定名获取到这个类的二进制字节流 -> 将这个字节流转换成方法区的运行时数据结构 链接: 验证->准备
阅读全文
摘要:91-OOM:PermGen和OOM:Metaspace举例_哔哩哔哩_bilibili
阅读全文
摘要:注意 右边虚线框内是指ygc的流程 s0/s1区中的变量如果无法放在另一个区,会直接晋升老年代
阅读全文
摘要:局部变量在局部变量表中 而局部变量表在栈的栈帧中,栈是每个线程不共享的,所以应该是线程安全的】 还有很多细节 62-虚拟机栈的5道面试题_哔哩哔哩_bilibili
阅读全文
摘要:第二段话应该能理解 class把他们所有的引用符号放在一个地方——常量池。每一个class文件有一个常量池,每一个被Java虚拟机装载的类或者接口都有一份内部版本常量池,被称作运行时常量池。运行时常量池是特定与实现的数据结构,数据结构映射到class文件中的常量池。因此,当一个类型被首次装载的时候,
阅读全文
摘要:首先 java代码 通过jclasslib查看字节码指令 0 iconst_ 1 将1压入操作数栈中 1 istore_1 取操作数栈顶的数字 存入下表为1的局部变量表中 2 bipush 10 将10压入操作数栈中 4 istore_2 取操作数栈顶的数字 存入下表为2的局部变量表中 5 iloa
阅读全文
摘要:局部变量表建立在jvm栈的栈帧中,局部变量表最基本的单位是槽(slot),其个数在编译时就已经定好了, 如图 该方法的局部变量表的大小就应该是args+a=2 使用反编译工具jclasslib查看后确实是2 查看局部变量表的详细信息 起始pc是指字节码指令的行号 它与行号共同构成了该变量的作用域 描
阅读全文
摘要:(19条消息) 获取class类字节数组的方法_iteye_9747的博客-CSDN博客 public static byte[] loadBytes(Class<?> cls) throws IOException { if (cls == null) return null; String na
阅读全文
摘要:java类加载器分为 根类加载器 加载 System.getProperty("java.ext.dirs")目录下的类,该类加载器有c++代码实现 扩展类加载器 加载 System.getProperty("java.class.path")目录下的类 该类由java代码实现 系统类加载器 加载用
阅读全文
摘要:将proto文件编译成.java文件命令 protoc.exe --java_out=. Student.proto 注意点后面有空格 syntax = 'proto3';option optimize_for = SPEED; // 加快解析option java_package="com.dro
阅读全文