自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(78)
  • 收藏
  • 关注

原创 观看JVM文章前须知:有关JVM的所有文章说明

1.数据库采用单表设计,通过代码来维护表关系,且通过主从复制实现高可用,通过读写分离充分利用服务器性能和数据库性能主从复制的原理:①当主数据库发生了数据”更新”时,会将更新的消息写入二进制日志文件中.②从库会通过IO线程实时的读取主库更新的内容.③将读取到的信息写入中继日志中.④Sql线程会实时的读取中继日志中的信息,实现数据入库处理,从而实现主从数据同步....

2020-03-10 21:29:29 85

原创 读 剑指offer 有感-1

03[1]. 数组中重复的数字找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 限制:2 <= n <= 100000代码实现://方法一: 时间复杂度直接爆表,空间复杂度也会,// 因为随着 数组的扩大, 空间复杂度会变大;然后就是时间

2021-01-05 22:17:11 133

转载 LeetCode—Top100简单题共21道

1. 两数之和 – 剑指offer57-I​ 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。​ 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]方法一:两个for循环class Solution { publi

2020-12-14 22:51:39 2040

原创 91+92+93-G1垃圾收集器官方文档透彻解读+原理剖析+系统化说明

G1垃圾收集器官方文档透彻解读G1官网地址:https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/G1GettingStarted/index.html?source=:ow⭕️p:nav:0916BCButtonGetting Started with the G1 Garbage Collector1. Overview1.1 Purpose​ This tutorial covers the basics of

2020-05-27 23:00:19 5788

原创 90-G1垃圾收集器角色划分与重要概念详解

G1垃圾收集器角色划分与重要概念详解G1重要概念分区(Region):G1采用了不同的策略来解决并行、串行和CMS收集器的碎片、暂停时间不可控等问题——G1将整个堆分成大小相同的分区(Region);每一个分区都可能是年轻代,也可能是老年代,但是在同一时刻只能属于某一个代。年轻代、幸存区、老年代这些概念还存在,成为逻辑上的概念,这样方面复用之前分代框架的逻辑;在物理上不需要连续,则带来了额外的好处——有的分区内垃圾对象特别多,有的分区内垃圾对象很少,G1会优先回收垃圾对象特别多的分区

2020-05-27 20:01:26 146

原创 89-G1垃圾收集器内存划分与角色分派

G1垃圾收集器内存划分与角色分派G1的设计规划是要替换掉CMSG1在某些方面弥补了CMS的不足,比如,CMS使用的是mark-sweep算法,自然会产生内存碎片;然而G1基于copying算法,高效的整理剩余内存,而不需要管理内存碎片。另外,G1提供了更多手段,已达到对GC停顿时间的可控。Hotspot虚拟机主要构成[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HkFQg3Xn-1590580803727)(assets/1580626178999.pn

2020-05-27 20:00:27 175

原创 88-G1垃圾收集器设计目标与改良手段

G1垃圾收集器设计目标与改良手段G1 (Garbage First Collector)吞吐量吞吐量关注的是,在一个指定的时间内(其实就是单位时间内),最大化一个应用的工作量。如下方式衡量一个系统吞吐量的好坏:在一个小时内同一个事务(或者任务、请求)完成的次数(tps)数据库一小时可以完成多少次查询对于关注吞吐量的系统,卡顿是可以接受的,因为这个系统关注长时间的大量任务的执行能力,单次快速的响应并不值得考虑。响应能力响应能力指一个程序后者系统对请求是否能够及时响应,比如

2020-05-27 19:59:03 316

原创 86-JVM垃圾回收+CMS收集器重点内容阶段性复习与总结

JVM垃圾回收+CMS收集器重点内容阶段性复习与总结74~85节回顾

2020-05-27 19:58:05 92

原创 85-实例透彻分析CMS垃圾收集器执行过程

实例透彻分析CMS垃圾收集器执行过程CMS收集器收集步骤:Phase 1:Initial Mark 初始标记Phase 2:Concurrent Mark 并发标记Phase 3:Concurrent Preclean 并发预清除Phase 4:Concurrent Abortable Preclean 并发中止预清除Phase 5:Final Remark 最终的重新标记Phase 6:Concurrent Sweep 并发清除Phase 7:Concurrent Reset 并发重置

2020-05-27 08:37:10 153

原创 84-CMS垃圾收集器深入讲解

CMS垃圾收集器深入讲解CMS收集器:Concurrent Mark Sweep(并发标记清除,并发:是指垃圾回收线程和用户业务线程可以同时执行[也并不是绝对的])CMS收集器,以获取最短回收停顿时间为目标,多数应用于互联网站或者B/S系统的服务器端上。CMS是基于“标记——清除”算法实现的,整个过程分为4个步骤:初始标记(CMS initial mark);并发标记(CMS concurrent mark);重新标记(CMS remark);并发清除(CMS

2020-05-27 08:29:10 181

原创 83-安全点与安全区详解

安全点与安全区详解枚举根节点当系统停顿下来后,并不需要一个不漏地检查所有执行上下文和全局的引用位置,虚拟机应当是有办法直接得知那些地方存放着对象引用。在HotSpot的实现中,是使用一组成为OopMap的数据结构来达到这个目的的。安全点在OopMap的协助下,HotSpot可以快速且准确地完成GC Roots枚举,但一个很现实的问题随之而来:可能导致引用关系变化,或者说OopMap内容变化的指令非常多,如果为每一条指令都生成对应的OopMap,那将会需要大量的额外空间,这样GC的空间成本将

2020-05-27 08:27:28 495

原创 82-实例演示MaxTenuringThreshold参数及阈值动态调整策略-

实例演示MaxTenuringThreshold参数及阈值动态调整策略对Survivor空间来说:当某一个Survivor空间中对象所占据的空间容量超过了60%,将会重新计算对象晋升的阈值,而不会使用MaxTenuringThreshold所显示配置的阈值。如:survivor空间为10M是,那么当对象占用6M时,就会重新计算对象晋升的阈值。-XX:TargetSurvivorRatio=60-XX:PrintGCDateStamps 打印当前GC的时间戳-XX:+UseConcMarkSw

2020-05-27 08:24:40 264

原创 81-MaxTenuringThreshold与阈值的动态调整详解

MaxTenuringThreshold与阈值的动态调整详解//打印JVM参数-XX:+PrintCommandLineFlags//(1)作用:在可以自动调节对象晋升(Promote)到老年代阈值的GC中,设置该阈值的最大值;//(2)该参数的默认值为15,CMS中默认值为6,G1中默认为15,(JVM中,该数值是由4个bit来表示的,所以最大值1111,即15)//(3)经历了多次GC后,存活的对象会在From Survior与To Survivor之间来回存放,而这里的一个前提则是这两个空

2020-05-27 08:23:04 346

原创 80-阈值和垃圾收集器类型对于对象分配的影响实战分析

阈值和垃圾收集器类型对于对象分配的影响实战分析//打印JVM的一些默认参数C:\***\***>java -XX:+PrintCommandLineFlags -version-XX:InitialHeapSize=199142400 //初始的堆大小-XX:MaxHeapSize=3186278400 //堆最大容量-XX:+PrintCommandLineFlags //打印命令行的相关启动信息-XX:+UseC

2020-05-24 22:31:57 133

原创 79-新生代与老年代垃圾收集器实现详解

新生代与老年代垃圾收集器实现详解默认情况下:​ 虚拟机中新生代和老年代所采用的垃圾收集器为:【在jdk1.8中,并不能保证其他的】​ PSyoungGen:Parallel Scavenge(新生代垃圾收集器);​ ParOldGen:Parallel Old(老年代垃圾收集器)★★★​ 当新生代无法容纳下将要创建的对象的话,那么这个对象将在老年代产生分配。实例:public class MyTest1 { public static void main(S

2020-05-24 22:27:06 419 1

原创 78-垃圾回收日志与算法深度解读

垃圾回收日志与算法深度解读实例:-verbose:gc //会输出GC的详细信息-Xms20M //堆栈的最小容量为20M-Xmx20M //堆栈的最大容量为20M-Xmn10M //新生代为10M-XX:+PrintGCDetails //打印垃圾回收的详细信息-XX:SurvivorRatio=8 //表示eden和Survivor空间的占比为8:1 public class MyTest1 { public static void main(Strin

2020-05-24 22:26:04 92

原创 77-Java内存泄漏经典原因分析

Java内存泄漏经典原因分析Java内存泄漏经典原因分析:对象定义在错误的范围(Wrong scope);异常(Exception)处理不当;集合数据管理不当。对象定义在错误的范围(Wrong scope)如果Foo实例对象的生命较长,会导致临时性内存泄漏。(这里names变量其实只有临时作用)class Foo{ private String[] names; public void odIt(int length){ if(names == n

2020-05-24 22:24:54 168

原创 76-JVM垃圾回收器理论分析与讲解

JVM垃圾回收器理论分析与讲解年轻代(Young Generation)新生成的对象都放在新生代。年轻代用复制算法进行GC(理论上,年轻代对象的生命周期非常短,所以适合复制算法);年轻代分为三个区。一个eden区,两个survivor(可以通过参数设置survivor)。对象在eden区中生成。当eden区满时,还存活的对象将被复制到一个survivor区,当这个survivor区满时,此区的存活对象将被复制到另外一个survivor区,当第二个survivor区也满了的时候,从第一个survi

2020-05-24 22:23:44 82

原创 75-JVM垃圾回收算法分析与演示

JVM垃圾回收算法分析与演示标记-清除算法(Mark-Sweep)标记-整理算法(Mark-Compact)复制算法(Copying)分代算法(Generational)★★★GC算法是内存回收的方法论,垃圾收集器就是算法的落地实现标记-清除算法(Mark-Sweep)算法分为是”标记“和”清除“两个阶段,首先标记出所有需要回收的对象,然后回收所有需要回收的对象。缺点:效率问题:标记和清理两个过程效率都不高;(需要扫描所有对象。堆越大,GC越慢)空间问题:标记清理之后会产

2020-05-24 22:15:28 144

原创 74-JVM垃圾回收重要理论剖析

JVM垃圾回收重要理论剖析JVM运行时内存数据区域程序计数器本地方法栈Java虚拟机栈(JVM Stack)Java虚拟机栈描述的是Java方法的执行模型:每个方法执行的时候都会创建一个帧(Frame),栈用于存放局部变量表、操作栈、动态链接、方法出口等信息。一个方法的执行过程就是对于帧栈的入栈和出栈过程。线程隔离堆(Heap)堆里存放的是对象的实例是Java虚拟机管理内存中最大的一块GC主要的工作区域,为了高效GC,会把堆细分为更多的子区域线程共享

2020-05-24 22:10:07 69

原创 70~73-JVM课程阶段性总结与系统回顾

JVM课程阶段性总结与系统回顾回顾,回顾,回顾

2020-05-24 22:07:41 75

原创 69-jmc与jhat工具使用详解

jmc与jhat工具使用详解

2020-05-24 22:06:41 124

原创 68-jcmd命令实战讲解

jcmd命令实战讲解jps命令//用于显示java中当前正在运行的线程C:\Users\admin>jps -helpusage: jps [-help] jps [-q] [-mlvV] [<hostid>]Definitions: <hostid>: <hostname>[:<port>]C:\Users\admin>jps5600 Launcher9808 Launcher7812 Jps

2020-05-24 22:05:11 473

原创 67-jmap与stat工具实战分析

jmap与stat工具实战分析实例:public class MyTest5 { public static void main(String[] args) { for (; ;) { System.out.println("hello world"); } }}linux 下查看java所有的进程端口号信息:ps -ef | grep javawindow下不知道咋查看:然后再:jmap -clstat

2020-05-24 21:58:10 237

原创 66-JVM元空间深度解析

JVM元空间深度解析实例:/** * -XX:MaxMetaspaceSize=10m -XX:TraceClassLoading */public class MyTest4 { public static void main(String[] args) { for (; ; ) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(MyTest4.cla

2020-05-24 21:54:48 85

原创 65-线程死锁检测与 分析工具深度解析

线程死锁检测与 分析工具深度解析jconsole的使用:产生死锁的实例:public class MyTest3 { public static void main(String[] args) { //当A线程执行方法A.method的时候,会去执行B.method(); //这个时候,A尝试去获取B的锁,但是B的锁已经被B线程获取,此时A线程就会等待B线程释放B锁 //B线程与之相反,最终造成死锁。 new Thread(()

2020-05-24 21:53:09 152

原创 64-线程栈溢出监控与分析详解

线程栈溢出监控与分析详解虚拟机栈溢出:实例:public class MyTest2 { private int length; public int getLength() { return length; } public void test(){ this.length++; try { Thread.sleep(300); //这里,为了让当前进程保持的时间长一点,方便利用jvisua

2020-05-24 21:50:06 157

原创 63-实战jvisualvm

实战jvisualvm查看堆的情况:实例:public class MyTest1 { public static void main(String[] args) { List<MyTest1> list = new ArrayList<>(); for (; ;) { list.add(new MyTest1()); System.gc(); //显式垃圾回收! }

2020-05-24 21:47:26 98

转载 java8的Stream对集合操作

(1)~(9) 、(11)~(12)引用:https://juejin.im/post/5d5e2616f265da03b638b28a作者:坚持就是胜利(10)引用:https://blog.csdn.net/SUDDEV/article/details/79375211作者:SUDDEV(1) filter 的使用(2) map 的使用(3)集合去重(基本类型)(4) ...

2020-03-19 20:42:04 268 1

原创 62-Java对象内存分配原理与布局

Java对象内存分配原理与布局​ 注:在Hotspot虚拟机中,虚拟机栈和本地方法栈是合二为一的。区域是否线程共享是否会内存溢出程序计数器否不会虚拟机栈否会本地方法栈否会堆是会方法区是会关于Java对象创建的过程:new关键字创建独享的3个步骤:1.在堆内存中创建出对象的实例;2.为对象的实例成员变量赋初...

2020-03-14 14:43:28 111

原创 60+61-JVM内存空间划分与作用详解-JVM堆空间用途分析与划分依据

JVM内存空间划分与作用详解+JVM堆空间用途分析与划分依据虚拟机栈:Stack Frame 栈帧 。每一个线程所独有的,不能共享。程序计数器(Program Counter):用来表示下一次将要执行哪一行。每一个线程所独有的,不能共享。本地方法栈:主要用于处理本地方法。native方法。 Hotspot将虚拟机栈和本地方法栈合二为一了。堆(Heap):JVM管理的最大一块内存空间。堆上...

2020-03-14 14:40:05 139

原创 59-JVM字节码整体回顾与总结

JVM字节码整体回顾与总结回顾37~58节内容!!!

2020-03-14 14:39:12 60

原创 58-动态代理实现机制深层次分析与动态字节码生成总结

动态代理实现机制深层次分析与动态字节码生成总结先寻找代理类是如何生成的: 这里生成动态代理的字节流。如何在动态代理期间写入磁盘:

2020-03-14 14:35:15 89

原创 57-透过字节码生成审视Java动态代理运作机制

透过字节码生成审视Java动态代理运作机制public interface Subject { void request();}public class RealSubject implements Subject { @Override public void request() { System.out.println("From real su...

2020-03-14 14:32:54 83

原创 56-JVM执行栈指令集实例剖析

JVM执行栈指令集实例剖析public class MyTest8 { public int myCalculate(){ int a = 1; int b = 2; int c = 3; int d = 4; int result = (a+b-c) * d; return result;...

2020-03-14 14:30:33 86

原创 55-基于栈的指令集与基于寄存器的指令集详细比对

基于栈的指令集与基于寄存器的指令集详细比对​ 现代JVM在执行Java代码的时候,通常都会将解释执行与编译执行二者结合起来进行。​ 解释执行:就是通过解释器来读取字节码,遇到相应的指令就去执行该指令。​ 编译执行:就是通过即时编译器(Just In Time ,JIT)将字节码转换为本地机器码来执行,现代JVM会根据代码热点来生成响应的本地机器码。基于栈的指令集与基于寄存器的...

2020-03-14 14:29:16 275

原创 54-虚方法表与动态分派机制详解

虚方法表与动态分派机制详解​ 针对于方法调用动态分派的过程,虚拟机会在类的方法区建立一个虚方法表的数据结构(virtual method table,vtable);​ 针对于invokeinterface指令来说,虚拟机会建立一个叫做接口方法表的数据结构(interface method table,itable);public class MyTest7 { publi...

2020-03-14 14:27:38 164

原创 53-通过字节码分析Java方法的静态分派与动态分派机制

通过字节码分析Java方法的静态分派与动态分派机制方法的动态分派:方法的动态分派涉及到一个重要的概念:方法接受者。多态,运行期的行为,涉及到invokevirtual字节码指令的多态查找流程:首先,到操作数的栈顶,去寻找到栈顶的元素所指向的这个对象的实际类型;第二步:如果在上面的过程当中寻找到了与常量池当中的“这个描述符“[下面这段] invokevirtual #6 ...

2020-03-14 14:24:42 177

原创 52-方法重载与invokevirtual字节码指令的关系

方法重载与invokevirtual字节码指令的关系五个指令:① invokeinterface:调用接口中的方法,实际上是在运行期决定的,决定到底调用实现该接口的哪个对象的特定方法。② invokestatic:调用静态方法。③ invokespecial:调用自己的私有方法、构造方法()以及父类方法。④ invokevirtual:调用虚方法,运行期动态查找的过程。⑤ invo...

2020-03-14 14:22:11 114

原创 51-栈帧与操作数栈剖析及符号引用与直接引用的转换

栈帧与操作数栈剖析及符号引用与直接引用的转换栈帧栈帧是一种用于帮助虚拟机执行方法调用与方法执行的数据结构。栈帧本身是一种数据结构,封装了方法的局部变量表、动态链接信息、方法的返回地址以及操作数栈等信息。注:栈帧其实是归属于一个一个的线程的,一个线程只会拥有独有的一份栈帧结构,因此栈帧不存在所谓的并发调用的情况。public class MyTest4 { private v...

2020-03-14 14:20:51 167

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除