先回忆一下前面几节内容:一个.java文件经Javac编译器编译为.class文件(字节码文件), 当我们使用java命令执行该class文件时(HotSpot为例),首先会创建JVM实例,开辟内存空间...public static void main(String[] args) { System.out.println(Thread.currentThread()); } } 在Java...底层-HotSpot一文的开始说到「每一个Java进程都存在一个JVM的实例」,所以JVM实例对应一个独立的Java进程,而在JVM中执行引擎实例则对应了属于运行程序的线程,所以有时候我们会认为线程为执行引擎的的一个实例...,这种说法可能并不准确,但是每一个Java线程的运行都会伴随着执行引擎的执行过程。...而在不同虚拟机实现中,执行字节码通常会有两种执行方式,一种是编译器执行,一种是解释器执行。或者两种方式混合执行,比如HotSpot虚拟机。
其中堆和元空间,存在的数据时共享的,那么并发的问题就会在这这两个区域发生。而线程私有区域是不会发生。
前言 在实际的开发中一定会碰到根据某个字段进行排序后来显示结果的需求,但是你真的理解order by在 Mysql 底层是如何执行的吗?...city,name,age from user where city='苏州' order by name limit 1000; 这条 sql 查询语句相信大家都能写出来,但是你了解它在 Mysql 底层的执行流程吗...今天陈某来大家聊一聊这条 sql 语句是如何执行的以及有什么参数会影响执行的流程。...此时用Explain来分析一下的这条查询语句的执行情况,结果如下图: ?...(city, name, age); 此时执行流程图如下: ?
如果语句不在查询缓存中,就会继续后面的执行阶段。执行完成后,执行结果会被存入查询缓存中。如果查询命中缓存,MySQL不需要执行后面的复杂操作,就可以直接返回结果,效率更高。...不同的执行顺序会导致效率的高低,通常会选择效率更高的情况,但是也会出现选错的情况 6.执行器 先判断对表T有没有执行权限,没有权限会报错 然后使用引擎提供的接口,开始执行逻辑 然后将结果返回给客户端 二...优化器决定使用ID这个索引 执行器负责执行逻辑,找到这一行然后更新 更新流程和查询流程大体上的执行顺序相似,但是更新流程还涉及到两个重要的日志模块:redo log(重做日志)和bin log(归档日志...然后告知执行器执行完成了,随时可以提交事务 执行器生成这个操作的binlog,并把binlog写入磁盘 执行器调用引擎的提交事务接口,引擎把刚刚写入的redo log改成提交(commit)状态,更新完成...之所以V2还是1,遵循的就是这个要求:事务在执行期间看到的数据前后必须是一致的 若隔离级别是“串行化”,则在事务B执行“将1改成2”的时候,会被锁住。直到事务A提交后,事务B才可以继续执行。
JMX(Java Management Extensions,Java管理扩展)在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务。...通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件 引言部分摘自百度百科,实际上JMX是java5开始提供的对java应用进行监控的一套接口,或者我们也可以像理解JUC...首先我们定义接口,接口后缀必须是MBean否则执行会报错,我们这里接口有一个属性,一个动作。判断属性还是动作的依据是根据方法名,get开头的方法会被当作属性。...StudyJavaMBean implements JerryMBean { public String getApplicationName() { return "每天学Java...System.out.println("当前线程的CPU总时间(以纳秒为单位):"+threadMXBean.getCurrentThreadCpuTime()); System.out.println("当当前线程执行的
每一个Java进程都存在一个JVM的实例,我们的Java程序就是运行在JVM实例中 在前面几节我们聊到,Javac编译器将java文件编译为class文件后,由JVM将字节码转为与机器适配的机器码进行执行...,执行引擎就是将字节码指令转为机器码执行的,当然如果我们直接使用的是本地方法接口,那么执行的方法就可以通过执行引擎直接调用本地方法即可。...main线程来执行main函数,为其分配私有的程序计数器,虚拟机栈,本地方法栈,这也是为什么在同一个类中静态代码块优于main函数先执行 运行时数据区,指的是Java程序运行所在的内存区域,这个区域被JVM...执行引擎,通常执行引擎需将字节码转换成可以直接被JVM执行的语言,执行引擎可以认为是JVM中最重要的一环, 因为它是执行程序的,我们运行中Java程序的每一个线程都是一个独立的虚拟机执行引擎的实例,通常有以下两种方式执行...Java代码(或者混合模式执行): a.
垃圾回收之垃圾标记算法 对象被判定为垃圾的标准: 该对象没有被其他对象引用 判定对象是否为垃圾的算法: 引用计数算法,优点:执行效率高,程序执行受影响较小;缺点:无法检测出循环引用的情况,容易导致内存泄露...---- Java垃圾回收之新生代垃圾收集器 在了解垃圾收集器之前,我们需要知道一个概念“Stop-the-World”: 该单词的含义即:JVM由于要执行GC而停止了应用程序的执行 并且任何一个GC算法中都会发生...Serial,需要在多核环境下执行才有优势 该收集器默认开启的垃圾收集线程数与CPU核心数量相同 ?...; import java.lang.ref.ReferenceQueue; import java.lang.ref.WeakReference; import java.util.ArrayList...可以看到在GC执行之前调用checkQueue方法没有打印任何信息,因为此时引用队列中没有任何引用对象。
理论 本节将介绍 explain 的用法及参数介绍 HIVE提供了EXPLAIN命令来展示一个查询的执行计划,这个执行计划对于我们了解底层原理,hive 调优,排查数据倾斜等很有帮助 使用语法如下:...dependencies ,包含两个 stage,Stage-1 是根stage,说明这是开始的stage,Stage-0 依赖 Stage-1,Stage-1执行完成后执行Stage-0。...哪条sql执行效率高呢?...有人说第一条sql执行效率高,因为第二条sql有子查询,子查询会影响性能 有人说第二条sql执行效率高,因为先过滤之后,在进行join时的条数减少了,所以执行效率就高了 到底哪条sql效率高呢...说明 hive 底层会自动帮我们进行优化,所以这两条sql语句执行效率是一样的。
---- 本文目录 一、Apache Spark 二、Spark SQL发展历程 三、Spark SQL底层执行原理 四、Catalyst 的两大优化 传送门:Hive SQL底层执行过程详细剖析 一...Shark的诞生 所以Spark在早期版本(1.0之前)推出了Shark,这是什么东西呢,Shark与Hive实际上还是紧密关联的,Shark底层很多东西还是依赖于Hive,但是修改了内存管理、物理计划...、执行三个模块,底层使用Spark的基于内存的计算模型,从而让性能比Hive提升了数倍到上百倍。...三、Spark SQL底层执行原理 Spark SQL 底层架构大致如下: 可以看到,我们写的SQL语句,经过一个优化器(Catalyst),转化为RDD,交给集群执行。...执行物理计划 最后依据最优的物理执行计划,生成java字节码,将SQL转化为DAG,以RDD形式进行操作。
理论 本节将介绍 explain 的用法及参数介绍 HIVE提供了EXPLAIN命令来展示一个查询的执行计划,这个执行计划对于我们了解底层原理,hive 调优,排查数据倾斜等很有帮助 使用语法如下...dependencies ,包含两个 stage,Stage-1 是根stage,说明这是开始的stage,Stage-0 依赖 Stage-1,Stage-1执行完成后执行Stage-0。...哪条sql执行效率高呢?...有人说第一条sql执行效率高,因为第二条sql有子查询,子查询会影响性能 有人说第二条sql执行效率高,因为先过滤之后,在进行join时的条数减少了,所以执行效率就高了 到底哪条sql效率高呢...说明 hive 底层会自动帮我们进行优化,所以这两条sql语句执行效率是一样的。
那你有没有想过一个问题,那就是当我们执行 java -jar 命令后,到底底层做了什么就启动了我们的 SpringBoot 应用呢? 或者说一个 SpringBoot 的应用到底是如何运行起来的呢?...java -jar 原理 首先我们要知道的是这个 java -jar 不是什么新的东西,而是 java 本身就自带的命令,而且 java -jar 命令在执行的时候,命令本身对于这个 jar 是不是 SpringBoot...由此我们先大胆的猜测一下,当我们在执行 java -jar 的时候,由于我们的 jar 里面存在 MANIFEST.MF 文件,并且其中包含了 Main-Class 属性且配置了 org.springframework.boot.loader.JarLauncher...总结 通过上面的内容我们知道了当我们在执行 java -jar 的时候,根据 java 官方规范会引导 jar 包里面 MANIFEST.MF 文件中的 Main-Class 属性对应的启动类,该启动类中必须包含...而对于我们 SpringBoot 项目构建的 jar 包,除了 Main-Class 属性外还会有一个 Start-Class 属性绑定的是我们项目的启动类,当我们在执行 java -jar 的时候优先引导的是
在前面HotSpot组成的文章中提到HotSpot是由三大子系统和两大组件组成,其中三大子系统中的类加载子系统和执行引擎子系统已经做过介绍,这一篇我们来看最后一个子系统:GC子系统。...在HotSpot虚拟机中,三大子系统核心基本都是为运行时数据区服务,类加载子系统负责将字节码文件加载到运行时数据区, 执行引擎将执行线程中虚拟机栈的栈帧存储的指令集进行执行,而GC子系统(垃圾回收子系统...)的目的是对运行时数据区的数据进行回收, 关于GC的知识,我想大多数Java开发都有所了解,毕竟这是面试中很常见的问题。...(实例化对象等方式),这些对象引用在虚拟机栈中,当线程执行完成,方法栈销毁之后(或者栈帧出栈后),那么这些对象可能就会成为没有引用的对象,不被引用的对象实际上已经没有存在的必要了,不进行回收就会浪费堆区域内存...,这就是为什么我们需要GC回收子系统,此外在程序执行的方法中创建的对象 往往是很多的,但是随着栈帧的出栈对象也就无用了起来(不存在引用),所以我们说大多数对象朝生夕死。
RELEASE mysql mysql-connector-java...JdbcTemplate查询操作原理解析 以jdbcTemplate.queryForList方法为例,通过重点代码查看内部执行原理 public T query(final String sql...} return this.execute((StatementCallback)(new QueryStatementCallback())); } 使用DataSource原生执行...Statement this.applyStatementSettings(stmt); T result = action.doInStatement(stmt); // 执行
如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。...类似的,Java虚拟机的即时编译器中也有类似的指令重排序优化。 2.2 Java内存模型 接下来,我们通过一个Java程序了解缓存一致性。 Java的内存模型跟计算机的内存模型极其相似 ?...Java线程也可以理解为“运算单元”,因此,可以看到,Java内存模型几乎和计算机内存模型保持一致。 内存模型总述 1.所有变量都在主内存当中,工作内存中的变量都是从主内存中拷贝的。.../写缓存,这使得加载和存储操作看上去像是在乱序执行 在执行程序时,java内存模型确保在不同的编译器和不同的处理器平台上,来插入内存屏障来禁止特定的编译器重排序和处理器重排序,从而为上层提供内存一致性的条件...但java内存模型只要求上述操作必须按顺序执行,而没有保证必须是连续执行。
luck锁底层 aqs+cas+lucksuuport luck public void lock() { sync.lock(); } public void..."end"); }).start(); Thread.sleep(1000); gtFlock.unlock(); } } aps node:底层双向链表
在Java的并发编程中,线程、volatile关键字、原子性、临界区以及DelayQueue是一些重要概念。理解这些内容对于编写高效且线程安全的程序至关重要。 1....线程的基本概念 Java中的线程是程序执行的最小单位。Java提供了多种创建线程的方式,最常用的方式是继承Thread类或实现Runnable接口。...JVM通过线程调度算法,决定哪个线程在什么时间执行。 2. volatile关键字 volatile关键字用于修饰变量,确保对该变量的读写操作是可见的。...原子性 原子性是指一个操作要么全部完成,要么全部不执行。Java中可以通过Atomic类实现原子操作。...示例代码 import java.util.concurrent.DelayQueue; import java.util.concurrent.Delayed; import java.util.concurrent.TimeUnit
Javax.xml.bind -> JAXB javax.xml.ws -> WS XML解析在JDK中有两个项目 JAXWS 项目 openJDK的子项目,目录在 http://hg.openjdk.java.net...ContextFactory(JAXB)、com.sun.xml.internal.ws.spi.ProviderImpl(WS) JAXP 项目 openJDK的子项目,目录在http://hg.openjdk.java.net...http://xml.org/sax/features/external-parameter-entities“,false); 但这种防御依赖不同的第三方组件,需要对第三方组件的不同使用方式进行设置 底层...import java.util.HashMap; import java.util.Map; import javax.xml.parsers.ParserConfigurationException...通过环境变量/配置文件设置feature是否打开 -DSAXParserFactory.disallow-doctype-decl=true这样的好处是不在关心开源组件,直接使用底层的JAXP, JAXWS
CPU缓存 我们搞java的,平时写业务代码,会很少涉及到这方面的知识。但是如果要写出高性能的java代码,对于CPU Cache一块还是要有所了解的。...在Java程序中,数组的成员在缓存中也是连续的。Java对象的相邻成员变量也会加载到同一缓存行中。如果多个线程操作不同的成员变量,且这几个成员变量处于同一缓存行,那么为伪共享的问题就发生了。...内存模型(Java Memory Model) JVM定义了内存模型,规范了Java虚拟机与计算机内存是怎么样协同工作的。...Java内存模型要记住以下同步规则: 1.如果再把一个变量从主内存中复制到工作内存中,就需要按顺序的执行read和load操作。...如果把变量从工作内存中同步回主内存中就需要按顺序的执行store和write操作。但Java内存模型只要求上述操作必须顺序的执行,而没保证必须是连续执行。
前面的文章我们讲述了类加载子系统、执行引擎、GC子系统、运行数据区的相关内容,那么HotSpot虚拟机三大子系统、两组件就剩下本地接口组件没有讲述了,所以这一篇文章对于本地接口进行介绍。...由于JVM底层就有C++的影子,所以JVM也提供了JNI(Java本地接口:Java Native Interface,)技术作为其它语言(主要是C/C++)通信的API。.../java/lib ?...最 -o 选项,我们在java代码中调用的是System.loadLibrary("Main"),那么生成的动态链接库的名称就必须是libMain.jnilib的形式,否则在执行java代码的时候,同样会报...java.lang.UnsatisfiedLinkError: no XXX in java.library.path 的错误 头文件具体用处: (1)通过头文件来调用库功能。
Java中的锁可以分为隐式锁和显示锁,Lock接口的锁都是显示锁。JVM内置锁就是隐式锁,synchronized就是隐式的锁。...显示锁:需要手动释放锁,可以设置是否为公平锁 隐式锁:不需要手动释放锁,非公平锁 Monitor Lock接口实现的锁底层是通过AQS同步队列实现的。用到了unsafe.park()方法。...synchronized 底层有一个monitor监视器,会监控持有锁的对象。...synchronized (object) { //代码逻辑 } 如上图,Monitor调用Enter方法进入监视区,它会监视object对象里面是否有锁标记,如果没有就给object加上锁标记,并执行后面的逻辑
领取专属 10元无门槛券
手把手带您无忧上云