
Java虚拟机
Java虚拟机
小小爱1990
Nobody knows who I really am
展开
-
详解 Spring AOP LoadTimeWeaving (LTW)
LTW 可以解决的问题:对非spring管理的类进行依赖注入调用类内方法切面失效问题LTW 原理:程序启动时,在类加载期通过字节码编辑技术将切面织入目标类,这种方式叫做 LTW(Load Time Weaving)。JDK5.0 新增了 java.lang.instrument 包,它包含能对 JVM 底层组件进行访问的类 。 我们可以在启动时通过 JVM 的 java agent 代理参数获取 JVM 内部组件的引用,以便在后续操作中使用 。 借助 JDK 动态代理,我们可以在 JVM 启动原创 2020-06-22 21:37:36 · 2579 阅读 · 0 评论 -
JVM语言流行趋势
Google Trends(2004 ~ 2020.8)绿 Kotlin :类似Scala,但更简洁,部分特性已在最新的Java14、15中实现黄 Scala :语法较复杂,部分特性已在Java中实现蓝 Clojure :纯函数式语言, 基于Lisp,动态类型红 Groovy:脚本语言,动态类型...原创 2020-08-20 00:58:56 · 168 阅读 · 0 评论 -
Java 协程:Loom Project 实战
Loom Project 是 OpenJDK 在2018年创建的协程方案,是在JVM层实现的有栈协程。到2020年9月为止,该项目还没有明确发布日期,目前可以下载 Early-Access 版本进行试用。和传统的Java线程相比,loom协程占用内存、CPU资源更少,支持百万数量级的并发。main.javaimport java.time.Instant;import java.util.List;import java.util.concurrent.*;public class main原创 2020-09-09 21:22:23 · 3855 阅读 · 0 评论 -
总结 Java 不支持的语法特性
动态类型Java 是静态类型语言,不支持动态类型。不过 JVM 是支持动态类型的,Java的lambda表达式底层是用动态类型实现。函数柯里化(curry)又叫做部分求值,比如 sum(a, b),可以写作 sum(a)(b), sum(a) 返回一个方法,参数是 b惰性求值指表达式不在它被绑定到变量之后就立即求值,而是在使用该变量时再求值。如Haskell语言。元组比如 Python,可以实现多返回值和交换值。切片可以方便的操作列表,比如Go、Python。指针Java 不能直接操作原创 2020-10-30 15:45:34 · 760 阅读 · 1 评论 -
Java虚拟机6 内存模型、线程、锁
一致性问题高速缓存 (Cache)由于计算机的CPU与内存运算速度有几个数量级的差距,所以加入一层或多层高速缓存,作为内存与处理器之间的缓冲:将运算使用到的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存之中。缓存一致性 (Cache Coherence)每个处理器内核都有自己的高速缓存,而它们又共享同一主内存,如下图:当多个处理器的运算涉及同一块内存时,可能导致各自的缓存数据不一致。为了解决一致性的问题,需要各个处理器访问缓存时都遵循一些协议。内存模型:在特定的操作协议下,原创 2020-09-09 14:01:57 · 217 阅读 · 0 评论 -
Java虚拟机5 编译与优化
Java编译前端编译器:JDK的Javac,把java文件编译成class文件JIT(Just In Time)编译器:HotSpot的C1、C2、Graal编译器,运行期把字节码转变成本地机器码AOT(Ahead Of Time)编译器:Jaotc、GCJ等,直接把程序编译成目标机器二进制代码,不常用性能优化主要在JIT编译阶段前端编译编译过程:初始化插入式注解处理器。解析与填充符号表,包括:词法、语法分析。将源代码的字符流转变为标记集合,构造出抽象语法树。填充符号表。产生符号地原创 2020-08-19 18:37:55 · 287 阅读 · 0 评论 -
Java虚拟机4 方法调用原理、动态类型支持
栈帧栈帧是方法执行的基本数据结构栈帧结构包括以下几部分:局部变量表(Local Variables Table)存放方法参数和方法内部定义的局部变量,长度在编译时确定操作栈(Operand Stack)用于算数运算、或调用其它方法时传递参数(下图8-2)和返回值动态连接指向运行时常量池[插图]中该栈帧所属方法的引用,持有这个引用是为了支持方法调用过程中的动态连接方法返回地址保存调用者的程序计数器,用于方法正常退出后恢复调用者的状态附加信息如调式、性能收集相关信息原创 2020-07-27 01:08:02 · 332 阅读 · 0 评论 -
Java虚拟机3 Class文件及类加载
文章目录Class 文件Class 文件Class文件是一组以8个字节为单位的二进制流,类似c语言的结构体,如下所示:有两种数据类型:无符号数和表。如u4表示4字节无符号数;表由多个无符号数或其他表组成。...原创 2020-06-20 15:16:50 · 260 阅读 · 0 评论 -
Java虚拟机2 G1垃圾回收详解, 参数, 日志
垃圾回收(GC)算法哪些对象需要被回收?引用计数可达性分析回收垃圾对象标记清除 Mark-Sweep标记复制 Mark-Copy标记整理 Mark-Compact分代收集新生代、老年代并行与并发其他GC概念根节点安全点记忆集写屏障/读屏障三色标记法分配内存指针碰撞空闲链表G1 垃圾回收(Garbage-First)堆内存G1采用分代回收,将整个堆拆成多个分区(Heap Region),一次只回收部分分区。一个分区既可以充当新生代可也以充当老年代。G1的分原创 2020-05-27 19:07:37 · 830 阅读 · 0 评论 -
Java虚拟机1 内存管理、GC,包括 Shenandoah ZGC
JavaJVM HotSpot 虚拟机, JRockit,IBM J9, Android Dalvik, ART(Android Runtime)内存JVM数据区:程序计数器: 当前线程执行的字节码指令的地址,执行Native方法时为空虚拟机栈: 局部变量表 方法出口等异常: StackOverflowError OutOfMemoryError-Xss1m本地方法栈: 执行Native方法的栈异常: StackOverflowError OutOfMemoryError-原创 2020-05-31 06:22:13 · 563 阅读 · 0 评论