![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 84
红尘不染
我想把代码写的像诗一样优雅
展开
-
JVM第十五篇(完结篇 内存模型)
这是目录JMM(java内存模型)原子性可见性有序性happens-beforeCASCAS底层原理乐观锁与悲观锁:原子操作类synchronized 优化轻量级锁重量级锁-自旋偏向锁其它优化JVM 完结JMM(java内存模型)java 内存模型 是 Java Memory Model(JMM)的意思。简单的说,JMM 定义了一套在多线程读写共享数据时(成员变量、数组)时,对数据的可见性、有序性、和原子性的规则和保障。原子性原子性:一个或多个操作是不可中断的,要么全部执行,要么全部执行失败。原子原创 2021-11-19 22:19:17 · 562 阅读 · 0 评论 -
JVM第十四篇(类加载与字节码技术五)
类加载类加载阶段加载链接初始化类加载器Bootstrap 启动类加载器扩展类加载器双亲委派模式线程上下文类加载器自定义类加载器类加载阶段在类加载阶段分为三个阶段,分别是加载,链接,初始化。加载将类的字节码载入方法区中,内部采用 C++ 的 instanceKlass 描述 java 类。它的重要 field 有:_java_mirror ,即 java 的类镜像,例如对 String 来说,就是 String.class。_super 即父类_fields 即成员变量_methods 即方原创 2021-11-19 14:02:09 · 587 阅读 · 0 评论 -
JVM第十三篇(类加载和字节码技术四)
编译期处理 (语法糖)语法糖默认构造函数自动装拆箱泛型擦除可变参数foreach 循环switch字符串枚举语法糖本篇主要讲解 JVM 在编译期间的处理。语法糖 ,其实就是指 java 编译器把 *.java 源码编译为 *.class 字节码的过程中,自动生成和转换的一些代码,主要是为了减轻程序员的负担,算是 java 编译器给我们的一个额外福利。默认构造函数当创建一个java类,没有自定义一个构造方法时,编译器会自动生成一个无参构造函数。public class Candy1 {}//原创 2021-11-18 11:25:17 · 478 阅读 · 0 评论 -
JVM第十二篇(类加载与字节码技术三)
文章目录指令方法多态的原理异常处理synchronized原理指令条件判断指令byte,short,char 都会按 int 比较,因为操作数栈都是 4 字节goto 用来进行跳转到指定行号的字节码public class Demo3_3 { public static void main(String[] args) { int a = 0; if(a == 0) { a = 10; } else { a = 20; } }}代码对应的指令0: icon原创 2021-11-17 18:13:42 · 294 阅读 · 0 评论 -
JVM第十一篇(类加载与字节码技术二)
接着上一节,研究一下两组字节码指令,一个是 public cn.itcast.jvm.t5.HelloWorld(); 构造方法的字节码指令2a b7 00 01 b12a 对应的指令为 aload_0,加载 slot 0 的局部变量,即 this,做为下面的 invokespecial 构造方法的参数b7 对应的指令为 invokespecial 预备调用构造方法,通过 00 01 找到要调用的方法。00 01 引用常量池中 #1 项,即【 Method java/lang/Object."原创 2021-11-17 10:00:51 · 571 阅读 · 0 评论 -
JVM第十篇(类加载与字节码技术一)
本章主要从以下几个方面学习类加载与字节码技术:类文件结构字节码指令编译期处理类加载阶段类加载器运行期优化原创 2021-11-13 17:45:40 · 134 阅读 · 0 评论 -
JVM第九篇(GC调优)
GC调优做GC调优,首先确定垃圾回收器,是选择低延迟的还是高吞吐量的回收器。低延时的 CMS,G1,ZGC高吞吐量的 ParallelGC最快的 GC,是不发生 GC:首先要考虑自己的代码,避免频繁发生GC。考虑以下几点:数据是不是太多?数据表示是否太臃肿?是否存在内存泄漏?然后再考虑GC调优问题。新生代调优:新生代的特点所有的 new 操作的内存分配非常廉价每个线程都会在伊甸园中分配一个私有的区域TLAB(thread-local allocation buffer),避原创 2021-11-13 11:56:01 · 400 阅读 · 0 评论 -
JVM第八篇(垃圾回收器G1)
垃圾回收器G1定义:Garbage First发展:2004 论文发布2009 JDK 6u14 体验2012 JDK 7u4 官方支持2017 JDK 9 默认G1,废弃了CMS适用场景:同时注重吞吐量(Throughput)和低延迟(Low latency),默认的暂停目标是 200 ms超大堆内存,会将堆划分为多个大小相等的 Region整体上是 标记+整理 算法,两个区域之间是 复制 算法相关 JVM 参数-XX:+UseG1GC (使用G1垃圾回收器,JDK9以上为默认原创 2021-11-13 10:13:00 · 2108 阅读 · 0 评论 -
JVM第七篇(垃圾回收机制二)
在上篇文章,介绍了三种垃圾回收的算法,在实际的JVM中,三种算法都有所应用。通过分代的垃圾回收机制,来使得三种垃圾回收算法能够协同工作。将堆内存划分为两个区域,新生代和老年代。新生代又分为三个区域,伊甸园,幸存区from和幸存区to。新生代中主要存放不经常使用的对象,用完就可以进行垃圾回收,而老年代中主要存放经常使用的对象,用于长时间的保存。新生代中经常进行垃圾回收,而老年代很久才会进行一次垃圾回收。针对不同的区域,采用不同的垃圾回收算法。分代垃圾回收工作流程:当对象被创建时,首先存放在伊甸原创 2021-11-12 18:31:22 · 491 阅读 · 0 评论 -
JVM第六篇(垃圾回收机制一)
在JVM的内存结构中,堆内存中存放着创建出的对象,如果创建出的对象,长时间没有被外部引用,则会被垃圾回收。下面从五个方面开始学习垃圾回收机制。如何判断对象可以回收垃圾回收算法分代垃圾回收垃圾回收器垃圾回收调优如何判断对象可以回收:当对象长时间没有被引用,则可以考虑将其回收。引用计数法:存在一个引用计数器,如果一个对象被引用,则计数器+1,如果对象不在被引用,则计数器-1,如果计数器为0,则说明对象没有被引用,则可以被回收。如果对象之间存在互相引用,引用计数器就都不为0,就不能被垃圾回原创 2021-11-12 11:48:37 · 659 阅读 · 0 评论 -
JVM第五篇(直接内存)
直接内存 Direct Memory:直接内存,并不属于JVM中的内存结构,直接内存,不由JVM进行管理。直接内存是属于系统内存。直接内存常见于 NIO 操作时,用于数据缓冲区分配回收成本较高,但读写性能高不受 JVM 内存回收管理在进行NIO操作,可以使用直接内存来作数据缓冲区,来提高读写效率。下图是使用堆内存用于数据缓冲区的情况:由于Java不能对系统内存直接进行操作,所以数据线先从磁盘文件读到系统内存中,再由系统内存,读入到Java堆内存中,效率比较低。下图是使用了直接内存作为原创 2021-11-10 21:34:27 · 768 阅读 · 0 评论 -
JVM第四篇(StringTable)
StringTable的介绍:StringTable为一个HashTable结构,key为一个字符串,value为一个String对象的引用,String对象存放在堆中。在代码运行时,会自动生成一个空的StringTable 。首先要清楚常量池与串池之间的关系,常量池是在字节码文件中存储的常量,在运行时,常量池中的信息被加载到运行时常量池中。此时运行时常量池中所存储的数据仅仅是符号常量。只有当这些常量被用到的时候,才会变成对象。如:String s1 = “a”;String s2 = “b”;原创 2021-11-10 19:37:15 · 539 阅读 · 0 评论 -
JVM第三篇(方法区运行时常量池)
要想使得java程序能够在JVM上成功执行,首先将 .java 文件编译为 .class 文件,然后由JVM执行。.class 文件主要包含以下信息类的基本信息常量池类方法的定义JVM指令下面由一个最简单的java代码,来分析class文件的内容public class HelloWorld { public static void main(String[] args) { System.out.println("hello world"); }}执原创 2021-11-10 16:13:25 · 459 阅读 · 0 评论 -
JVM第二篇(JVM内存结构)
JVM的内存结构主要分为:程序计数器虚拟机栈本地方法栈堆方法区下面先开始学习程序计数器部分程序计数器(Program Counter Register)JVM 指令, java程序的源文件, 被编译为.class字节码文件, 在字节码文件中, java的源文件被编译为一条条的JVM指令...原创 2021-11-10 10:56:58 · 732 阅读 · 0 评论 -
JVM第一篇(什么是JVM)
JVM 的定义:Java Virtual Machine — java虚拟机。java程序的运行环境,将 java 程序的源文件 .java 文件编译为字节码文件.class 文件,然后在 JVM 上执行 .class 文件 。JVM 是运行在操作系统上的,java 程序 是运行在JVM 上的,JVM 为 java 程序屏蔽了底层的 操作系统,因此,java程序可以做到一次编译,到处执行,具有跨平台的好处。JVM中提供自动内存管理机制,具有垃圾回收机制。JVM提供数组的越界检查操作,在数组越界时,抛原创 2021-11-09 19:48:57 · 81 阅读 · 0 评论