![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
aka这里是你的程序员
勿忘初心
展开
-
JVM笔记 - JVM 实现方法调用
JVM笔记 - JVM 实现方法调用Java 虚拟机识别方法的关键在于类名、方法名以及方法描述符(method descriptor)方法描述符,它是由方法的参数类型以及返回类型所构成字节码调用指令invokestatic:用于调用静态方法invokespecial:用于调用私有实例方法、构造器,以及使用 super 关键字调用父类的实例方法或构造器,和所实现接口的默认方法。invokevirtual:用于调用非私有实例方法。invokeinterface:用于调用接口方法。原创 2020-12-23 11:10:15 · 269 阅读 · 0 评论 -
通过 Graal VM 提供的 Ideal Graph Visualizer 学习IR
这是GraalVM 提供的 IGV 工具,可以对比一下 Openjdk 提供的 IGV,我之前的博客也有,可读性天差地别配置 IGV首先是下载 Graal VM 提供的 IGV , 请点击这里修改配置文件 idealgraphvisualizer\etc\idealgraphvisualizer.conf,配置一下JDK,必须要有 graal 编译器的 JDK然后你就可以打开idealgraphvisualizer/bin/idealgraphvisualizer.exe啦igv 请不要原创 2020-06-23 17:49:09 · 839 阅读 · 2 评论 -
使用 Ideal Graph Visualizer 了解 IR 图
首先请到官网下载 - 链接修改配置文件请配置 JDK6 的路径,其他版本的 JDK 无法打开 IGV(我尝试了jdk8和11都开不了)参考openjdk:igv原创 2020-06-23 11:45:06 · 892 阅读 · 0 评论 -
JVM笔记:Java 方法内联(Method Inlining) - 编译器优化技术
在编译过程中遇到方法调用时,将目标方法的方法体纳入编译范围之中,并取代原方法调用的优化手段,最重要的编译器优化,没有之一。optimize beforestatic class A{ int value; final int get(){ return value; }}public void foo(){ y = b.get(); // do stuff.. z = b.get(); sum = y + z;}opti原创 2020-06-21 18:14:23 · 1241 阅读 · 0 评论 -
收藏的Java资源
下面是我收藏的一些 JVM 博客,希望能帮助到你编译IBM:深入浅出编译器原创 2020-06-21 17:54:57 · 177 阅读 · 0 评论 -
Java 10的语法糖 var
The identifier var is not a keyword;;instead it is a reserved type name.var 不是关键字,通过下面代码就可以看出public void var(){ var var = 1;}在Java 10中出现了 var 变量,可以存储任意类型局部变量void test(){ var index = 1; var array = new ArrayList<>(16); var map = n.原创 2020-06-03 16:46:59 · 252 阅读 · 0 评论 -
JVM笔记 - Java 内存模型 / JMM 内存可见性
这是第三篇 JVM 笔记 对JAVA 内存模型的内存可见性的学习,欢迎纠正Java内存模型描述了多线程代码中哪些行为是合法的,以及线程如何通过内存进行交互 - 为了让应用程序能够免于数据竞争的干扰,Java 5 引入了明确定义的 Java 内存模型重排序int a = 1;int b = 2;int c = a+b;上面这段代码没什么特别的,但在底层执行的顺序不一定是这样执行,可能先执行 b=2,之后执行 a=1;上面的这段代码数据没有数据依赖,重排序不会出现问题int c=0;vo原创 2020-06-02 16:06:48 · 289 阅读 · 0 评论 -
JVM笔记 - JVM GC 和 内存分配
这是我第二篇关于JVM的笔记JVM中的垃圾回收,如有不妥,欢迎纠正什么对象是可以回收的垃圾回收,那么我们要明白什么对象是会被JVM判断是可以回收的对象,下面有两个常用的算法引用计数法(reference counting)通过对每个对象添加一个引用计数器,统计对象的引用个数,为0则代表可以回收优点就是出现较早,实现简单,效率高;但也有比较明显的问题:无法回收相互引用的对象,会造成内存泄漏,所以很多jvm gc都不会采用这种算法class A{ B b;}class B{ A a;}原创 2020-05-27 22:10:23 · 193 阅读 · 0 评论 -
JVM笔记 - Java 虚拟机关于 Synchronized 实现以及锁实现的总结
本文是我在阅读 《深入理解Java虚拟机-第三版》和 极客时间 郑宇迪对于JVM的剖析后做的总结,如有不妥,不明白的地方,欢迎斧正下面是一张比较经典的 Java 虚拟机锁实现流程图,不了解JVM的具体锁实现可能会不太明白字节码上的实现声明 synchronized 代码块时,编译而成的字节码将包含 monitorenter 和 monitorexit 指令,一般会包含一个monitorenter和多个monitorexit,确保在函数所有的出口都能释放锁sycnchronized 声明函数时,会在原创 2020-05-21 14:18:27 · 285 阅读 · 0 评论 -
Java 字节码入门
ByteCodeJava虚拟机数据类型The data types defined by the JVM are:Primitive types:Numeric types:byte (8-bit 2’s complement)short (16-bit 2’s complement)int (32-bit 2’s complement)long (64-bit 2’s co...翻译 2020-04-26 15:52:27 · 208 阅读 · 0 评论 -
Spring Boot 项目调优,JVM 调优,预防触发Linux的OOM-Killer机制
我们有一个测试服务器,内存是8G,最近开始搭起微服务的软件架构,内存占用有点大,比如一个RocketMq的消费者服务,启动就占了我 500M,导致我后面想运行...原创 2019-11-26 15:07:43 · 757 阅读 · 0 评论