- 博客(26)
- 资源 (12)
- 收藏
- 关注
原创 JVM - CMS深度剖析
文章目录PreCMSJVM参数阶段PreJVM-04垃圾收集Garbage Collection(上)【垃圾对象的判定】JVM-05垃圾收集Garbage Collection(中)【垃圾收集算法】JVM-06垃圾收集Garbage Collection(下)【垃圾收集器】JVM - 再聊GC垃圾收集算法及垃圾收集器CMSConcurrent Mark Sweep 并发标记清除 。CMS 收集器是一种以获取最短回收停顿时间为目标的收集器。它非常符合在注重用户体验的应用上使用,它是
2020-06-30 00:14:18 10849
原创 JVM - 再聊GC垃圾收集算法及垃圾收集器
文章目录Pre分代收集理论常见的垃圾收集算法标记PreJVM-04垃圾收集Garbage Collection(上)【垃圾对象的判定】JVM-05垃圾收集Garbage Collection(中)【垃圾收集算法】JVM-06垃圾收集Garbage Collection(下)【垃圾收集器】分代收集理论当前虚拟机的垃圾收集都采用分代收集算法 , 意思就是根据对象存活周期的不同将 java堆分为新生代和老年代,这样就可以根据各个年代的特点选择合适的垃圾收集算法。举个例子,新生代中,大部分对象都是
2020-06-29 22:21:09 10023
原创 JVM-彻底搞懂 逃逸分析&标量替换
文章目录Pre对象分配流程总览逃逸分析所处的阶段示例说明逃逸分析的含义逃逸分析的对象分配的方式【标量替换】标量 VS 聚合量JVM 参数 -XX:+DoEscapeAnalysis栈上分配DemoPreJVM-剖析对象内存分配流程对象分配流程总览逃逸分析所处的阶段通过上图的对象分配流程,我们可以知道逃逸分析是发生在第一步判断对象是否可以在栈上分配的时候, 在栈上分配的目的是为了减少将对象分配到堆上的概率,节约堆内存,减少GC压力。逃逸分析是JVM为了优化对象分配而做的一种优化措施。
2020-06-27 11:22:17 12938 3
原创 JVM-剖析对象内存分配流程
文章目录对象分配流程总览流程分解栈上分配对象 (逃逸分析)对象分配流程总览流程分解栈上分配对象 (逃逸分析)众所周知, JAVA中的对象都是在堆上进行分配,当对象没有被引用的时候,需要GC。如果对象数量较多的时候, GC 压力较大,也间接影响了应用的性能 。为了减少临时对象在堆内分配的数量,JVM通过逃逸分析确定该对象不会被外部访问 . 如果不会逃逸可以将该对象在栈上分配内存,这样该对象所占用的内存空间就可以随栈帧出栈而销毁,从而减轻GC的压力。...
2020-06-27 00:19:49 10199
原创 JVM - 剖析Java对象头Object Header之指针压缩
文章目录Pre指针压缩【指针压缩】开启 VS 关闭PreJVM - 剖析Java对象头Object Header之对象大小mark word : 32位 占4字节 ,64位 占 8字节klass point : 开启压缩占4字节,未开启 占 8字节。指针压缩jdk1.6 update14开始,在64bit操作系统中,JVM支持指针压缩启用指针压缩-XX:+UseCompressedOops(默认开启),禁止指针压缩:-XX:-UseCompressedOopsoop(ordin
2020-06-25 23:58:20 10696
原创 JVM - 剖析Java对象头Object Header之对象大小
文章目录Pre总览PreJVM - 写了这么多年代码,你知不道new对象背后的逻辑? 中大体介绍了Java中 new 对象背后的主要流程,其中对象头的部分,我们仅仅是点到为止,这里我们深入剖一下Object Header的奥秘 。总览初始化默认值以后,JVM要对对象进行必要的设置,例如这个对象是哪个类的实例、如何才能找到类的元数据信息、对象的哈希码、对象的GC分代年龄等信息。这些信息存放在对象的对象头Object Header之中。 这部分数据的长度在32位和64位的虚拟机中分别为32个和64
2020-06-25 16:10:32 11719
原创 JVM - 写了这么多年代码,你还不知道new对象背后的逻辑?
文章目录对象创建流程1.类加载检查2.分配内存3.初始化4.设置对象头5.执行方法对象创建流程1.类加载检查2.分配内存3.初始化4.设置对象头5.执行方法
2020-06-24 21:44:33 10153 4
原创 JVM - 应用JVM核心参数推荐设置
文章目录PreJDK版本核心参数堆线程栈方法区(元空间)案例PreJVM-08垃圾收集Garbage Collection【GC常用参数】JDK版本= 1.8核心参数‐Xms2048M ‐Xmx2048M ‐Xmn1024M ‐Xss512K ‐XX:MetaspaceSize=256M ‐XX:MaxMetaspaceSize=256M 堆线程栈默认1M , 不足的话 StackOverflowError-Xss设置越小 ,说明一个线程栈里能分配的栈帧就越少,但是
2020-06-22 11:17:14 10383
原创 JVM - 结合代码示例彻底搞懂Java内存区域_对象在堆-栈-方法区(元空间)之间的关系
文章目录Pre示例demo总体关系代码示例论证反汇编PreJVM - 结合代码示例彻底搞懂Java内存区域_线程栈 | 本地方法栈 | 程序计数器中我们探讨了线程栈中的内部结构 ,大家有么有想过main方法呢? 我们继续来看下main方法示例demopackage com.gof.test;public class Artisan { public static int FIVE = 5 ; // 静态变量 public static User user = new U
2020-06-22 00:47:28 10209
原创 JVM - 结合代码示例彻底搞懂Java内存区域_线程栈 | 本地方法栈 | 程序计数器
文章目录Pre运行时数据区总览PreJVM-01Java内存区域与内存溢出异常(上)【运行时区域数据】JVM-02内存区域与内存溢出异常(中)【hotspot虚拟机对象】JVM-03内存区域与内存溢出异常(下)【OutOfMemoryError案例】运行时数据区总览字节码文件被装载子系统装载到JVM中,字节码执行引擎负责执行这些字节码文件。装载子系统和执行引擎都是C++的实现。我们重点关注下装载子系统: JVM-白话聊一聊JVM类加载和双亲委派机制源码解析...
2020-06-21 12:15:09 10288
原创 Java - 手撸线上故障 OOM + CPU居高不下
文章目录Pre常见故障OOMCPU居高不下高阶工具 ArthasPre当你的应用没有一套完善的监控告警系统,线上故障了 ,总是很被动,但是还得要定位问题 ,奈何手里无利器 ,没办法只能硬上了,虽然原始,好在有效~所以原生的命令你需要特别熟悉,故障的时间很宝贵,所以留给我们翻资料的时间并不多 ~如果你还不是很了解JVM提供的诊断命令, 戳这里–> JVM-10虚拟机性能监控与故障处理工具之【JDK的命令行】常见故障OOMCPU居高不下高阶工具 Arthashttps://
2020-06-20 15:32:44 9801
原创 设计模式 -结构型模式_ 装饰者模式Decorator Pattern 在开源软件中的应用
文章目录定义示例结构图定义装饰模式 Decorator : 在不改变原有功能的基础上, 动态的给一个对象添加一些额外的职责 ,非常符合开闭原则 (对修改关闭,对扩展开放)示例结构图
2020-06-15 21:46:00 9841
原创 MyBatis源码-解读Executor的三个实现类之BatchExecutor(批处理执行器)
文章目录PreExecutor 执行器接口继承关系BatchExecutor(重用执行器)入门小demoBatchExecutor VS ReuseExecutorPreMyBatis源码-深入理解MyBatis Executor的设计思想工程部分见MyBatis源码- SqlSession门面模式 & selectList 源码解析 实际中,我们都是面向SqlSession编程的,不会直接调用Executor来执行业务逻辑,这里我们仅仅是为了深入了解下Executor体系架构才这么搞
2020-06-14 18:48:56 13569 3
原创 MyBatis源码-解读Executor的三个实现类之ReuseExecutor(重用执行器)
文章目录PreExecutor 执行器接口继承关系ReuseExecutor(重用执行器)入门小demoPreMyBatis源码-深入理解MyBatis Executor的设计思想工程部分见MyBatis源码- SqlSession门面模式 & selectList 源码解析 实际中,我们都是面向SqlSession编程的,不会直接调用Executor来执行业务逻辑,这里我们仅仅是为了深入了解下Executor体系架构才这么搞的,切记。Executor 执行器接口继承关系
2020-06-14 17:58:58 11640 2
原创 MyBatis源码- SqlSession门面模式 & selectList 源码解析
文章目录Prepom.xmlmybatis-config.xmlUserMapperSqlSessionPrepom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation
2020-06-14 00:44:58 10013 1
原创 Tomcat - 模拟Tomcat的webappClassLoader加载自己war包应用内不同版本类实现相互共存与隔离
文章目录PreTomcat要解决什么问题?Tomcat违反了双亲委派机制?模拟Tomcat的webappClassLoader加载自己war包应用内不同版本类实现相互共存与隔离Tomcat加载机制小结PreTomcat - 都说Tomcat违背了双亲委派机制,到底对不对?JVM-白话聊一聊JVM类加载和双亲委派机制源码解析JVM - 实现自定义的ClassLoader就是这么简单Tomcat要解决什么问题?作为一个Web容器,Tomcat要解决什么问题 , Tomcat 如果使用默认的双亲委
2020-06-13 10:07:06 10431
原创 JVM - 彻底理解打破双亲委派机制
文章目录Pre 双亲委派何为打破双亲委派演示Pre 双亲委派JVM-白话聊一聊JVM类加载和双亲委派机制源码解析JVM - 自定义类加载器何为打破双亲委派举个例子 有个类 Artisan我们希望通过自定义加载器 直接从某个路径下读取Artisan.class . 而不是说 通过自定义加载器 委托给 AppClassLoader ------> ExtClassLoader ----> BootClassLoader 这么走一遍,都没有的话,才让自定义加载器去加载 Artis
2020-06-12 00:11:41 17510 5
原创 JVM - 实现自定义的ClassLoader就是这么简单
文章目录Pre自定义类加载器演示Step1 : 复制一个Boss1 的类,编译后,取到Boss1.class 备用Step2 : 删除Boss1类Step3 : 编写自定义ClassLoaderStep 4: 自定义目录存放Boss1.classStep 5 : 运行结果注意事项PreJVM-白话聊一聊JVM类加载和双亲委派机制源码解析自定义类加载器我们了解了双亲委派机制后,那自定义类加载器相对就很容易了 , 只需要继承 java.lang.ClassLoader 类 ,重写findC
2020-06-11 23:49:15 10452
原创 JVM-白话聊一聊JVM类加载和双亲委派机制源码解析
文章目录Java 执行代码的大致流程类加载loadClass的步骤类加载器和双亲委派机制Java 执行代码的大致流程我们先回顾下Java 执行代码的大致流程假设要执行A类的main方法启动虚拟机 (C++负责创建)创建一个引导类加载器实例 (C++实现)C++ 调用Java代码,创建JVM启动器,实例sun.misc.Launcher 【这货由引导加载器负责加载创建其他类加载器】sun.misc.Launcher.getLauncher() 获取运行类自己的加载器ClassLo
2020-06-11 01:20:00 11136 3
原创 MyBatis源码-解读Executor的三个实现类之SimpleExecutor(简单执行器)
文章目录PreExecutor 执行器接口继承关系SimpleExecutor(简单执行器)ReuseExecutor(重用执行器)BatchExecutor(批处理执行器)PreMyBatis源码-深入理解MyBatis Executor的设计思想Executor 执行器接口继承关系这里我们重点看下Executor的 三个实现子类。分别是:SimpleExecutor(简单执行器)、ReuseExecutor(重用执行器)、BatchExecutor(批处理执行器)。SimpleE
2020-06-10 16:27:34 11005
原创 设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
文章目录Pre定义DemoTomcatMybatisPre我们先来回顾下门面/外观模式Facade Pattern的定义及基本使用,然后我们在开源软件中来看下是如何实践的。定义Facade Pattern 为子系统中的一组接口提供一个一致的入口,该模式定义了一个高层接口,这个接口呢使得第三方更加容易调用该系统,而无需关注内部的细节实现。DemoTomcatRequestFacadeMybatisSqlSession...
2020-06-09 07:15:58 9781 6
原创 MyBatis源码-深入理解MyBatis Executor的设计思想
文章目录Pre回顾JDBC的执行过程Pre如果MyBatis的基础用法还不熟悉,31篇入门博客送给您https://blog.csdn.net/yangshangwei/category_7205317.html回顾JDBC的执行过程
2020-06-04 23:35:21 10352
原创 Tomcat - 都说Tomcat违背了双亲委派机制,到底对不对?
文章目录类加载的本质jvm里ClassLoader的层次结构BootstrapClassLoader(启动类加载器)ExtensionClassLoaderAppClassLoaderTomcat的 类加载顺序常见错误NoClassDefFoundErrorNoSuchMethodErrorClassCastException类加载的本质ClassLoader是用来加载 Class 的。它负责将 Class 的字节码形式转换成内存形式的 Class 对象。字节码可以来自于磁盘文件 *.class,
2020-06-04 00:38:37 11621 1
原创 Tomcat - Tomcat 网络通信模型剖析 & 并发参数解读
文章目录什么是IOTomcat 支持四种线程模型Tomcat 如何使用指定IO模型什么是IOIO是指为数据传输所提供的输入输出流,其输入输出对象可以是:文件、网络服务、内存等。举个例子,假设应用在从硬盘中读取一个大文件过程中, CPU会与硬盘一样出于高负荷状态么?CPU 没有太高的增涨 。 通常情况下IO操作是比较耗时的,所以为了高效的使用硬件,应用程序可以用一个专门线程进行IO操作,而另外一个线程则利用CPU的空闲去做其它计算。这种为提高应用执行效率而采用的IO操作方法即为IO模型。To
2020-06-03 14:03:10 10347
原创 Tomcat - 你该知道的Tomcat生产环境部署
文章目录PreTomcat 各组件及关系server.xml 配置详解serverserviceconnectorPreTomcat Version : 8.5+我们先回顾下 前几节学习的的tomcat的功能及架构Tomcat是一个基于JAVA的WEB容器,其实现了JAVA EE中的 Servlet 与 jsp 规范,与Nginx apache 服务器不同在于一般用于动态请求处理。在架构设计上采用面向组件的方式设计, 即整体功能是通过组件的方式拼装完成。Tomcat 各组件及关系
2020-06-03 00:49:42 10780
原创 Tomcat - 源码分析Tomcat是如何处理一个Servlet请求的
文章目录Tomcat中的NIO模型Tomcat中的NIO模型Tomcat 8.5.55
2020-06-01 21:44:03 9739
X86-NFS rpm包
2020-11-24
中标龙芯-MIPS- NFS rpm包
2020-11-24
mybatisSource.zip
2020-06-14
apache-tomcat-8.5.50-src.zip
2020-06-02
「Tomcat源码剖析」.pdf
2020-06-01
Jest-5.3.4.zip
2020-01-19
Spring4CachingAnnotationsExample
2017-10-04
Java反编译工具
2015-06-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人