随笔分类 - JVM
摘要:1、Java内存模型(JMM) 原子性:synchronized 可见性:synchronized,volatile,final 有序性:synchronized,volatile synchronized加锁都可以保证 volatile可以保证可见性和有序性(禁止指令重排) 8大happens-b
阅读全文
摘要:1、Java执行过程 Java文件通过javac静态编译为class文件 class文件有2种方式执行:解释执行、JIT即时编译后执行 通常情况下 默认解释器边解释边运行,但对于一些热点代码会首先编译为机器码,缓存起来,后续执行执行缓存的机器码即可,提升执行效率 2、热点代码 Java采用计数器方式
阅读全文
摘要:1、定义 逃逸分析的是一个对象的动态作用域,2种情况 方法逃逸:对象通过参数传递传给了另一个方法 线程逃逸:对象有另外的线程访问 逃逸分析的目的是确认一个对象是否只可能当前线程能访问 2、应用 如果对象分析后不能发生逃逸,如方法中创建的临时对象,则JVM可进行如下优化 1、栈上分配 在栈上分配对象,
阅读全文
摘要:class文件热加载,即不重启生效方法 1、自定义classLoader 独立线程监控class文件变化,一旦变化 重新new一个classLoader加载class ,老的class对象 老的classLoader需要去除引用,等待GC后自动卸载 2、JavaAgent 探针技术 ,重新定义已经加
阅读全文
摘要:一、场景 JavaAgent Java代理,又叫java探针,可以动态的改变加载的字节码文件 通常使用ASM Javasist字节码工具修改class文件 二、使用 2种方式 静态方式: 通过-javaagent 指定代理类 (在main方法执行前执行premain方法) 动态方法:通过额外的进程a
阅读全文
摘要:一、类的双亲委托 Bootstrap(启动)类加载器,它负责加载 <Java_Runtime_Home>/lib下面的类库加载到内存中,由于启动类加载器涉及到虚拟机底层实现细节,开发者无法直接拿到其引用,因此使用Class.getClassLoader() 的结果为 null,因此如果获取的Clas
阅读全文
摘要:一、生命周期 加载 连接 初始化 只是启动顺序,启动后可能交叉执行。 二、加载 加载class文件,class文件是JVM的规范,跟java没有强依赖。 可能来源:class文件、网络传输等 加载后会在堆中生成Class对象。 三、验证 验证字节码的格式、规范等,如class文件必然4个字节的魔数0
阅读全文

浙公网安备 33010602011771号