JVM
JVM 是 Java 程序的运行环境,学习 JVM,方能了解 Java 程序是如何被执行的,为进一步深入底层原理乃至程序性能调优打好基础。1. JVM 内存结构的组成、各部分功能作用,学会利用内存诊断工具排查内存相关问题;2. JVM 的招牌功能-垃圾回收机制是如何工作的
Modify_QmQ
保持热爱,奔赴山海
展开
-
JVM虚拟机 Java内存模型多线程并发、读写共享数据时的问题及优化
内存模型简单的说,JMM 定义了一套在多线程读写共享数据时(成员变量、数组)时,对数据的可见性、有序性、和原子性的规则和保障。原子性问题提出,两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗?代码如下:public class add_reduc { static int i = 0; static Object obj = new Object(); public static void main(String[] args) t原创 2020-10-31 15:44:38 · 624 阅读 · 0 评论 -
JVM 类加载器详解(加载详情与加载器类型)
加载将类的字节码载入方法区中,内部即底层是采用 C++ 的 instanceKlass 描述 java 类,它的重要 field 有:_java_mirror 即 java 的类镜像,例如对 String 来说,就是 String.class,作用是把 klass 暴露给 java 使用_super 即父类_fields 即成员变量_methods 即方法_constants 即常量池_class_loader 即类加载器_vtable 虚方法表_itable 接口方法表如果这个类还原创 2020-10-31 10:48:42 · 470 阅读 · 3 评论 -
JVM 语法糖(对不同的语法进行分析)
语法糖所谓的 语法糖 ,其实就是指 java 编译器把 *.java 源码编译为 *.class 字节码的过程中,自动生成和转换的一些代码,主要是为了减轻程序员的负担,算是 java 编译器给我们的一个额外福利。注意,以下代码的分析,借助了 javap 工具,idea 的反编译功能,idea 插件 jclasslib 等工具。另外,编译器转换的结果直接就是 class 字节码,只是为了便于阅读,给出了 几乎等价 的 java 源码方式,并不是编译器还会转换出中间的 java 源码。默认构造在java原创 2020-10-26 20:45:17 · 337 阅读 · 0 评论 -
JVM 字节码技术(多态的原理、异常处理和synchronized)
多态使用一段简单的java代码实现多态用于后续测试package Class_load.init_fun;import java.io.IOException;public class polymorphic { public static void test(Animal animal) { animal.eat(); System.out.println(animal.toString()); }原创 2020-10-25 12:12:54 · 336 阅读 · 1 评论 -
JVM 字节码(字节码指令 和 操作数栈、常量池的关系)
字节码指令构造方法 的字节码指令2a b7 00 01 b1那这些具体代表着什么含义?我们可以在官方文档当中进行查看不同的数值代替什么不同的含义:以2a为例,在这里都是十六进制的数,在文档当中查找0x2a,其余指令同理:官网文档:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html2a => aload_0 加载 slot 0 的局部变量,即 this,做为下面的 invokespecial 构造方法调用的参数b7原创 2020-10-24 15:52:05 · 862 阅读 · 0 评论 -
JVM GC垃圾回收调优
GC调优使用命令查看相关参数 java -XX:+PrintFlagsFinal -version | findstr “GC”确定目标【低延迟】还是【高吞吐量】,选择合适的回收器CMS,G1,ZGC => 低延迟ParallelGC =>高吞吐量最快的 GC 是不发生 GC查看 FullGC 前后的内存占用,考虑下面几个问题数据是不是太多?resultSet = statement.executeQuery(“select * from 大表 limit n”)数据表原创 2020-10-23 21:37:42 · 356 阅读 · 0 评论 -
JVM 垃圾回收(三)垃圾回收器和 JDK版本更新有关垃圾回收机制内容
1. 串行特点:单线程堆内存较小,适合个人电脑2. 吞吐量优先让单位时间内, STW的时间最短0.2 0.2 = 0.4 ,垃圾回收时间占比最低,这样就称吞吐量高。当进行垃圾回收的时候cpu占用会升高。3. 响应时间优先特点多线程堆内存较大,多核 cpu尽可能让单次 STW 的时间最短 0.1 0.1 0.1 0.1 0.1 = 0.54. G1 (Garbage One)定义: Garbage First发展:2004 论文发布2009 JDK 6u14 体验原创 2020-10-23 14:40:20 · 810 阅读 · 0 评论 -
JVM中的STW和CMS
STWJava中Stop-The-World机制简称STW,是在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外)。Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,但不能与JVM交互;这些现象多半是由于gc引起。GC时的Stop the World(STW)是大家最大的敌人。但可能很多人还不清楚,除了GC,JVM下还会发生停顿现象。JVM里有一条特殊的线程--VM Threads,专门用来执行一些特殊的VM Operation,比转载 2020-10-23 11:01:21 · 569 阅读 · 0 评论 -
JVM垃圾回收(二) 垃圾回收算法
1. 标记清除算法 标记清除算法的优点在于速度足够快。但是缺点在于,对部分空间进行清除之后,这一整块的存储空间不连续,所以在这很容易造成内存碎片这种情况。示意图如下: 2. 标记整理算法 标记整理算法和前面的标记清除算法的区别在于多了一个步骤,这里会把内存空间进行整理,也就是说,在清除部分内存之后,会将内存往前移动,该算法的优点在于不会导致内存碎片,但是这种算法的速度比较慢。示意图如下: 3. 复制算法 复制算法:有两个内存空间,将第一个内存空间当中需要的内存区间进行复制到另一块的内存空.原创 2020-10-22 20:22:01 · 209 阅读 · 0 评论 -
JVM 垃圾回收(一)如何判断对象可以回收
垃圾回收的方式1. 引用计数法表示在底层实现的时候使用一个用于计数的变量进行计数,在每一次对一个变量或者实例进行引用之后,计数加一,当引用不使用之后,计数减一,直到计数为零的时候,这就代表着当前的这个变量或者实例没有被引用,也就是说可以被当成垃圾进行回收。在这里,也会存在一个弊端,就是循环引用,在A和B对象之间一直互相引用,计数一直增加,就无法确定在什么时候才能进行回收。2. 可达性分析算法Java 虚拟机中的垃圾回收器采用可达性分析来探索所有存活的对象扫描堆中的对象,看是否能够沿着 GC .原创 2020-10-20 14:47:13 · 1086 阅读 · 0 评论 -
JVM 直接内存的分配与释放详解和底层实现
直接内存定义:常见于 NIO 操作时,用于数据缓冲区分配回收成本较高,但读写性能高不受 JVM 内存回收管理import java.nio.ByteBuffer;import java.util.ArrayList;import java.util.List;public class memory_overflow { static int _100Mb = 1024 * 1024 * 100; public static void main(String[] args)原创 2020-10-20 10:52:27 · 1200 阅读 · 0 评论 -
JVM 堆和方法区、运行时常量池的定义与详解
Heap 堆的定义定义 :通过 new 关键字,创建对象都会使用堆内存特点它是线程共享的,堆中对象都需要考虑线程安全的问题有垃圾回收机制堆内存溢出 使用下面代码进行演示import java.util.ArrayList;import java.util.List;public class heap_overflow { public static void main(String[] args) { int i = 0; try { List<String&原创 2020-10-17 15:17:21 · 1010 阅读 · 0 评论 -
JVM 简介、程序计数器、虚拟机栈
JVM是什么?定义:Java Virtual Machine - java程序的运行环境Cjava 二进制字节码的运行环境)Java的优点(JVM)一次编写,到处运行自动内存管理,垃圾回收功能数组下标越界越界检查多态JVM JDK JRE 的关系Program Counter Register程序计数器(寄存器)在java代码进行编译执行的时候,先将java代码转换成二进制的编码,这个地方的二进制编码就是jvm指令,jvm的指令会给到解释器,而在这里程序计数器就会记住吓一跳jvm指原创 2020-10-16 12:08:53 · 357 阅读 · 1 评论