尚硅谷2020最新版宋红康JVM教程学习笔记 二 运行时数据区

运行时数据区的内部结构灰色部分为每个线程独立拥有。红色部分为所有线程共享。JVM中的线程线程是一个程序里的运行单元。JVM允许一个应用有多个线程并行执行。在Hotspot JVM中,每个线程都与操作系统的本地线程直接映射。当一个Java线程准备号执行以后,此时一个操作 系统的本地线程也同时创建。Java线程执行终止后,本地线程也会回收。操作系统负责所有线程的安排调度到任何一个可用的CPU上。一旦本地线程初始化成功,他就会调用Java线程中的run()方法。程序计数器(PC寄存器/Program
分类: 其他 发布时间: 03-06 08:48 阅读次数: 0

尚硅谷2020最新版宋红康JVM教程学习笔记 三 堆

本地方法接口(使用的越来越少除非是与硬件有关的应用)(了解)在java中有时需要引用一些用非java语言写的方法。这些方法需要用native来修饰。例如为什么要用本地方法一:与java环境外交互有时java应用需要与java外面的环境交互,这是本地方法存在的主要原因。例如java需要与一些底层系统,如操作系统或者某些硬件交换信息时的情况。本地方法正事这样一种交流机制,它为我们提供了一个非常简洁的接口,而且我们无需去了解java应用之外的繁琐细节。二:与操作系统交互虽然java程序是运行在jv
分类: 其他 发布时间: 03-06 08:48 阅读次数: 0

尚硅谷2020最新版宋红康JVM教程学习笔记 四

堆 栈 方法区的关系什么是方法区在java虚拟机规范中明确说明:尽管方法区逻辑上是堆的一部分,但是一些简单的实现可能不会选择进行垃圾回收或进行压缩/对于HotSpotJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。所以方法区看作是一块独立于java堆的内存空间。1.方法区与java堆一样,是各个线程共享的内存区域2.方法区在jvm启动的时候创建,并且他的实际的物理内存空间中与java堆区一样都可以是不连续的。3.方法区的大小,跟堆空间一样,可以选择固定大小或者
分类: 其他 发布时间: 03-06 08:48 阅读次数: 0

《深入理解Java虚拟机》阅读笔记 第二章Java内存区域与内存溢出异常

程序计数器程序计数器是运行时数据区中一块很小的内存空间。他可以看作当前线程所执行的字节码指令的行号指示器。字节码解释器工作时就是用过改变这个计数器的值来选取下一条需要执行的指令。程序计数器是每个线程私有的。如果正在执行java方法则计数器记录的是正在执行的字节码指令地址。如果是本地方法,则计数器为null。java虚拟机栈java虚拟机栈也是线程私有的。当java程序中有方法被执行时,就会创建一个栈帧存放在java虚拟机栈中。方法的执行与结束,对应着栈帧的入栈与出栈。栈帧中有局部变量表、操作数栈、动态
分类: 其他 发布时间: 03-06 08:47 阅读次数: 0

尚硅谷2020最新版宋红康JVM教程学习笔记 五执行引擎

对象创建过程1.判断对象对应的类是否加载、链接(验证 准备 解析 )初始化2.在堆中为对象分配内存3.处理并发安全问题(TLAB或者加锁)4.初始化分配到的空间(给实例变量赋默认值)5.设置对象的对象头6.对象初始化(显式初始化->代码块中初始化->构造器中初始化)对象的内存布局对象头对象头中包括运行时元数据和类型指针实例数据父类和本身拥有的字段。相同宽度的字段被放在一起且父类的变量在子类之前对象填充保证对象的内存大小是8的倍数。对象访问定位1.句柄访问法
分类: 其他 发布时间: 03-06 08:47 阅读次数: 0

尚硅谷2020最新版宋红康JVM教程学习笔记 六 垃圾回收算法

什么是垃圾运行程序中没有任何指针指向的对象就是垃圾。如果不进行垃圾回收,内存迟早都会被消耗完。除了释放没用的对象,垃圾回收也可以清楚内存里的内存碎片。碎片整理将所占用的堆内存移到堆的一端,以便JVM将整理出的内存分配给新的对象。随着应用程序所应付的业务越来越庞大,没有GC就不能保证应用程序的正常进行。而经常造成STW的GC又跟不上实际的需求,所以需要不断地对GC进行优化。自动内存管理无需开发人员手动参与内存的分配与回收,这样降低内存泄露和内存溢出的风险。自动内存管理机制,将程序员从繁重的内存管理中释
分类: 其他 发布时间: 03-06 08:47 阅读次数: 0

尚硅谷2020最新版宋红康JVM教程学习笔记 七

System.gc()1.默认情况下,通过System.gc()或者Runtime.getRuntime().gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。2.System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(提醒JVM的垃圾回收器执行GC但是不一定会执行)3.JVM实现者可以通过System.gc()调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无需手动触发,否则就太过于麻烦了。在一些特殊情况下,如
分类: 其他 发布时间: 03-06 08:47 阅读次数: 0

尚硅谷2020最新版宋红康JVM教程学习笔记 八 垃圾回收器

垃圾回收器分类如果按照线程数分,可以分为串行垃圾回收器和并行垃圾回收器串行回收器同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束适用场景:单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场景,串行回收器的性能表现可以超过并行回收器和并发回收器。所以串行回收默认被应用在客户端的Client模式下的JVM中。(在并发能力比较强的CPU上,并行回收器产生的停顿时间要短于串行回收器)并行垃圾回收器和串行回收器享范,并行收集可以运用多个CPU同时执行垃
分类: 其他 发布时间: 03-06 08:46 阅读次数: 0

《MyBatis 技术内幕》阅读梳理 第一章 MyBatis快速入门

Mybatis 整体架构分为三层,分别是基础支持层、核心处理层、接口层基础支持层(第二章)基础支持层包含整个MyBatis的基础模块。反射模块该模块对java原生的反射进行了良好的封装,提供了更加简洁的API,并且对反射操作进行了一系列优化,例如缓存了类的元数据,提高了反射操作的性能。类型转换模块MyBatis为简化配置文件所提供的别名机制,是该模块的功能之一。另一个功能是实现JDBC与Java类型之间的转换,该功能会在为SQL语句绑定参数和映射查询结果级时用到。日志模块提供详细的日志输出
分类: 其他 发布时间: 03-06 08:46 阅读次数: 0

《MyBatis 技术内幕》阅读梳理 第二章 基础支持层

解析器模块在Mybatis中涉及多个XML配置文件,常见的XML解析方式有三种DOM(Document Object Model) SAX、StAX。Mybatis使用的是DOM。DOM是基于树形结构的解析方式,他会将整个XML文件读入内存,并构建一个DOM树,基于这棵树形结构对各个节点进行操作。节点分为元素节点、属性节点、文本节点。XPath是与DOM解析方式配合使用的语言。XPath之于DOM就相当于SQL相当于数据库。通过XPath可以查询XML文档。反射模块Mybatis中进行参数处理,以及
分类: 其他 发布时间: 03-06 08:46 阅读次数: 0

Java并发编程之关键字volatile的使用

volatile关键字的作用1.可以保证不同线程间volatile变量的一致性。但是不能保证原子操作。2.可以禁止指令重排。一致性cpu会将经常使用的值加入到缓存中从而加快读取速度。每次修改变量的值时,首先会在缓存中完成修改,此时内存中的值还没有改变。(至于什么时候写回内存则不确定(会在合适的时候)这样就会出现并发问题)。用volatile修饰的变量会在值改变后,立即修改内存中的值。从而保证不同线程间volatile值的一致性。例子用volatile修饰public class Test1 {
分类: 其他 发布时间: 03-06 08:45 阅读次数: 0

偏向锁、轻量级锁、重量级锁的介绍

三种锁的特点偏向锁偏向锁适用于只有一个线程访问同步块的情况。偏向锁只有出现竞争条件时才会释放锁。并且撤销锁的时候需要等到全局安全点(这个时间点没有正在执行的字节码)。通过对对象头的修改从而把锁的状态改成无锁状态或者标记成不适合使用偏向锁。然后唤醒想要竞争锁的线程。轻量级锁轻量级锁会在同步代码块结束后释放锁。如果出现多线程竞争锁的情况,会通过自旋的方式来循环请求获取锁。如果获取锁失败,则会膨胀成重量级锁。因为自旋会消耗CPU这样会浪费一定的资源。但是响应速度大大提高。重量级锁出现线程竞争时不采用自
分类: 其他 发布时间: 03-06 08:45 阅读次数: 0

尚硅谷2020最新版宋红康JVM教程学习笔记合集

一 类加载子系统二 运行时数据区三 堆四 方法区五 执行引擎六 垃圾回收算法七 引用八 垃圾回收器
分类: 其他 发布时间: 03-06 08:45 阅读次数: 0

《MyBatis 技术内幕》阅读梳理合集

第一章 MyBatis快速入门第二章 基础支持层
分类: 其他 发布时间: 03-06 08:45 阅读次数: 0

《Tomcat与Java Web开发技术详解》阅读梳理 合集

第一章 Web运作原理探析第三章 第一个Java Web应用第四章Servlet技术(上)第五章 Servlet技术(下)第八章 访问数据库第九章 HTTP会话的使用与管理第二十章 过滤器点击查看其他资料合集
分类: 其他 发布时间: 03-06 08:44 阅读次数: 0

Java集合类整理合集

Java集合类HashMap源码分析(JDK1.7)Java集合类HashTable与HashMap的区别——源码分析Java集合类HashMap源码分析(JDK1.8)查看更多资源合集
分类: 其他 发布时间: 03-06 08:44 阅读次数: 0

《深入理解Java虚拟机》阅读梳理 合集

第二章Java内存区域与内存溢出异常
分类: 其他 发布时间: 03-06 08:44 阅读次数: 0

《计算机网络自顶向下方法》阅读梳理 合集

第一章 计算机网络和因特网点击查看其他资料合集
分类: 其他 发布时间: 03-06 08:44 阅读次数: 0

《深入浅出Mysql》阅读梳理 一

Mysql的数据类型数值类型其中DEC(M,D)中的M的意思为最多显示M位数字(整数位和小数位),D的意思为小数位。int(5)代表int的宽度为5.(默认为11)。只有与zerofill搭配使用时才有意义(左补0)当加了zerofill时,将把当前数据类型调整为无符号类型。当超出宽度时,按照正常情况显示(和c语言的%3d类似)。bit(x)x代表字节数(1-8)当x=1时,bit可以表示0和1。插入数据时输入十进制数即可,因为会被自动转换成2进制。要查看bit类型数据时需要调用函数bin(字段
分类: 其他 发布时间: 03-06 08:43 阅读次数: 0

《深入浅出Mysql》阅读梳理 二

存储引擎介绍MyISAMM有LSAM是mysql5.5之前的默认存储引擎。他既不支持事务,也不支持外键。每个MyISAM在磁盘上存储成三个文件 .frm .MYD .MYI (存储表定义,存储数据,存储索引)数据文件和索引文件可以放在不用的目录。MyISAM的表支持3种不同的存储格式。分别为,静态标:静态表是默认的存储格式,其中的字段都是定长的。这样管理起来会更方便,因此存储速度也会更快,更容易缓存。但可能浪费更多的空间。同时当表遇到损坏时恢复起来也更容易。动态表:其中的字段是变长的。更节约存储
分类: 其他 发布时间: 03-06 08:43 阅读次数: 0