自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

climbxu的码农日志

climbxu的码农日志

  • 博客(53)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 JVM垃圾回收器 七种经典垃圾回收器

垃圾收集器没有在任何规范中进行过多的规定,可以由不同的厂商,不同版本的JVM来实现由于jdk的版本处于高速迭代过程中,因此java发展至今已经衍生了众多的GC版本垃圾回收器分类按线程数分,可分为串行垃圾回收器和并行垃圾回收器按工作模式分,可以分为并发式垃圾回收器和独占式垃圾回收器按碎片处理方式分,可分为压缩式垃圾回收器和非压缩式垃圾回收器按工作的内存空间分,可分为年起代垃圾收集器和老年代垃圾收集器。

2022-03-31 17:59:36 9009 3

原创 ubuntu18.04+大数据hadoop平台完全分布式集群搭建

hadoop完全分布式集群搭建集群信息jdk: 1.8linux: ubuntu18.04 serverhadoop: hadoop2.9.2虚拟机: VMware

2020-04-06 22:58:14 5227 1

原创 windows,linux,ssh免密登录

linux,windows主机相互免密登录,解决用户不一致问题,windows ssh免密登录问题

2022-11-14 15:52:16 1226 1

原创 对象的内存布局

对象的内存布局对象头(Header),包含两部分,如果是数组,还需记录数组的长度运行时元数据(Mark Word)哈希值(HashCode)GC分代年龄锁状态标志线程持有的锁偏向线程ID偏向时间戳类型指针,指向类元数据InstanceKlass,确定该对象所属的类型实例数据(Instance Data),是对象真正存储的有效信息,包括程序代码中定义的各种类型的字段(包括从父类继承下来的和本身拥有的字段)相同宽度的字段总是被分配在一起父

2022-03-19 20:47:41 174

原创 对象的实例化

对象的实例化创建对象的方式newClass的newInstance() 只能调用空参的构造器,权限必须是publicConstructor的newInstance(Xxx) 可以调用空参,带参的构造器,权限没有要求使用clone() 需要实现Cloneable接口使用反序列化第三方库Objenesis创建对象的步骤判断对象对应的类是否加载,链接,初始化虚拟机遇到一条new指令,首先区检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代

2022-03-19 20:45:38 1311 1

原创 方法区的垃圾回收

方法区的垃圾回收有人认为方法区(如HotSpot虚拟机中元空间或者永久代)是没有垃圾收集行为的,其实不然,Java虚拟机规范中堆方法区的约束是非常宽松的,提到过可以不要求虚拟机在方法区中实现垃圾收集,事实上也确实有未实现或未能完整实现方法区类型卸载的垃圾收集器存在(如JDK11时期的ZGC收集器就不支持类卸载)一般来说这个区域的回收效果比较难令人满意,尤其是类型的卸载,条件相当苛刻,但是这部分区域的回收有时又确实是必要的,以前Sun公司的bug列表中,曾出现若干严重的bug就是由于低版本的Hot

2022-03-19 20:44:52 1711

原创 方法区的演进

方法区的演进细节首先明确,只有HotSpot才有永久代,JRockit,IBM,J9等,是不存在永久代的概念的,原则上如何实现方法区属于虚拟机实现细节,不受Java虚拟机规范约束,并不要求统一随着Java8的到来,HotSpot VM将永久代中的元数据信息移到了一个与堆不相连的本地内存区域,这个区域叫做元空间(Metaspace)HotSpot中方法区的变化jdk1.6及以前有永久代(Permanent Generation)jdk1.7有永久代,但已经逐步"去

2022-03-19 20:44:26 408

原创 方法区的内部结构

方法区的内部结构深入理解Java虚拟机书中对方法区(Method Area)存储内容描述,它用于存储已被虚拟机加载的类型信息,常量,静态变量,即时编译器编译后的代码缓存等类型信息对每个加载的类型(类class,接口interface,枚举enum,注解annotation),JVM必须在方法区中存储一下类型信息这个类型的全限定类名这个类型直接父类的全限定类名(对于interface或是java.lang.Object,都没有父类)这个类型的修饰符(public,abstract,fina

2022-03-19 20:43:50 128

原创 方法区大小与OOM

设置方法区大小方法区的大小不必是固定的,JVM可以根据应用的需要动态调整jdk及以前通过-XX:PermSize来设置永久代初始分配空间,默认值是20.75M-XX:MaxPermSize来设置永久代最大可分配空间,32位机器默认是64M,64位机器默认是82M当JVM加载的类信息容量超过了这个值,会报异常OutOfMemoryError:PermGen spacejdk8及以后元数据区大小可以使用参数-XX:MetaspaceSize和-XX:MaxMetaspaceSize指定代

2022-03-19 20:42:40 686

原创 JVM方法区

栈,堆,方法区的交互关系内存结构从线程共享角度new一个对象,各部分存放的位置方法区在哪里java虚拟机规范中明确说明:尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去垃圾收集或者进行压缩,但对于HotSpotVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开,所以方法区看作是一块独立于Java堆的内存空间方法区的基本理解方法区(Method Area)与Java堆一样,是各个线程共享的内存区域方法区在

2022-03-02 09:36:41 49

原创 类加载器的分类

类加载器的分类JVM支持两种类型的类加载器,分别为引导类加载器(BootStrap ClassLoader)和自定义类加载器(User-Defined ClassLoader)从概念上讲,自定义类加载器一般指的是程序中由开发人员自定义的一类类加载器,但是java虚拟机规范却没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器无论类加载的类型如何划分,在程序中我们最常见的类加载器始终只有3个,即:启动类加载器(引导类加载器,BootStra

2022-03-02 09:35:17 667

原创 JVM逃逸分析

逃逸分析堆是分配对象存储的唯一选择吗?在深入了解java虚拟机中关于Java堆内存有这样一段描述:随着JIT编译器的发展与逃逸分析技术的逐渐成熟,栈上分配,标量替换优化技术将会导致一些微妙变化,所有的对象都分配到堆上也渐渐变得不那么"绝对"了在Java虚拟机中,对象是在Java堆中分配内存的,这是一个普通的常识,但是,有一种特殊情况,那就是如果经过逃逸分析(Escape Analysis)后发现,一个对象并没有逃逸出方法的话,那么就可能被优化成栈上分配,这样就无需再堆上分配内存,也无须进行垃圾回收了

2022-03-02 09:34:49 1237

原创 虚拟机栈结构

虚拟机栈由于跨平台性的设计,java的指令都是根据栈来设计的,不同平台CPU架构不同,所以不能设计为基于寄存器的,优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令Java虚拟机栈(java virtual machine stack),早期也叫java栈,是线程私有的,每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(stack frame),对应着一次次的java方法调用,生命周期于线程一致主管java程序的运行,它保存方法的局部变量(8种

2022-03-02 09:34:23 141

原创 运行时数据区

运行时数据区运行时数据区java虚拟机定义了若干运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机推出而销毁,另外一些则是与线程一一对应的,这些与线程对应的数据区域会随着线程开始和结束而创建和销毁灰色的为单独线程私有的,红色的为多个线程共享的每个线程: 程序计数器,栈,本地栈线程间共享:堆,堆外内存(永久代或元空间,代码缓存)每一个JVM只有一个Runtime实例,即为运行环境,相当于运行时数据区内部结构区内部结构

2022-03-02 09:32:55 393

原创 双亲委派机制

java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象,而且加载某个类的class文件时,java虚拟机采用的是双亲委派模式,即把请求由父类处理,它是一种任务委派模式.

2022-03-02 09:27:45 170

原创 类的加载过程

类的加载过程类的加载过程整体可分为3个环节 加载->链接(验证,准备,解析)->初始化加载(loading)通过一个类的全限定类名获取定义此类的二进制字节流将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口ps: 加载.class文件的方式从本地系统中直接加载通过网络获取,如web Applet从压缩包中读取jar,war运行时计算生成,动态代理技术

2022-03-01 14:39:19 2308

原创 对象分配过程

对象分配过程为新对象分配内存是一件非常严谨和复杂的任务,JVM的设计者门不不仅要考虑内存如何分配,在哪里分配等问题,并且由于内存分配算法与内存回收算法密切相关,所以还要考虑GC执行完内存回收后是否会在内存空间中产生内存碎片new出来的对象首先放到伊甸园区直到伊甸园区满了,就会触发一次GC(YGC/Minor GC),将没有被引用的对象回收,同时将伊甸园区中还存活的对象移到Survivor区(此时s0和s1都是空的),并且这些存活的对象被打上标记1(表示经历过1次GC),此时伊甸园区就空了.伊

2022-03-01 14:31:22 376

原创 堆空间参数归纳

堆空间参数归纳官网说明参数说明-XX:+PrintFlagsInitial打印所有的参数的默认初始值-XX:+PrintFlagsFinal打印所有参数的最终值-Xms初始堆空间内存(默认为物理内存的1/64)-Xmx最大堆空间内存(默认为物理内存的1/4)-Xmn设置新生代的大小-XX:NewRatio设置新生代与老年代在堆结构的占比(新生代始终占1,这里填老年代占比)-XX:SurvivorRatio设置新生代中Eden和S0

2022-03-01 14:24:55 41

原创 JVM堆区

堆一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域Java堆区在JVM启动的时候即被创建,其空间大小也就确定了,是JVM管理的最大一块内存空间Java虚拟机规范规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它因该被视为连续的所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local Allocation Buffer,TLAB)Java虚拟机规范中对Java堆的描述是: 所有的对象实例以及数组都应当在运行时分配在堆上数组和对

2022-03-01 14:24:28 217

原创 程序计数器(pc寄存器)

程序计数器(PC寄存器 Program Counter Register)pc寄存器并非广义上所指的物理寄存器,JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟作用:PC寄存器用来存储指向下一条命令的地址,即 将要执行的命令代码,由执行引擎读取下一条指令.它是一块很小的内存空间,几乎可以忽略不计,也是运行速度最快的存储区域.在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程生命周期保持一致任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法,程序计数器会存储线

2022-03-01 14:23:53 3252

原创 本地方法栈

本地方法栈Java虚拟机栈用于管理java方法的调用,而本地方法栈用于管理本地方法的调用本地方法栈,也是线程私有的允许被实现陈固定或者是可动态扩展的内存大小(在内存溢出方面是相同的)如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个StackOverflowError异常如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的的方法栈,那么Java虚拟机将会抛出一个OutOfMemoryErro

2022-03-01 14:23:13 229

原创 本地方法接口

本地方法接口本地方法就是一个Java调用一个非Java代码的接口,该方法的实现有非java语言实现,比如c,这个特征并非java所特有,很多其他编程语言都有这一机制,比如在c++中,你可以用extern "c"告诉c++编译器去调用一个c的函数在定义一个native method时,并不提供实现体,因为其实现体是由非java语言在外面实现的本地接口的作用是融合不同的编程语言为java所用,它的初衷是融合c/c++程序...

2022-03-01 14:22:42 445

原创 TLAB区域

TLAB为什么有TLAB(Thread Local Allocation Buffer)堆区是线程共享区域,任何线程都可以访问到堆区中的共享数据由于对象实例的创建在JVM中非常频繁,因此在并发环境下堆区中划分内存空间是线程不安全的为避免多个线程操作同一地址,需要使用加锁机制,进而影响分配速度TLAB从内存模型而不是垃圾收集的角度,对Eden区域继续进行划分,JVM为每个线程分配了一个私有缓存区域,它包含在Eden空间内多线程同时分配内存时,使用TLAB可以避免一系列的线程安全问题,

2022-03-01 14:20:13 195 1

原创 JVM三种GC

Minor GC,Major GC与Full GCJVM在进行GC时,并非每次都对所有区域(新生代,老年代,方法区)一起回收的,大部分时候回收的都是指新生代针对HotSpot VM的实现,它里面的GC按照回收区域又分为两大种类型:一种是部分收集(Partial GC),一种是整堆收集(Full GC)部分收集: 不是完整收集整个Java堆的垃圾收集,其中又分为:新生代收集(Minor GC/Young GC):只是新生代的垃圾收集老年代收集(Major GC/Old GC):只是老年代的垃圾

2022-03-01 14:18:40 460

原创 JVM架构模型

JVM架构模型Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构基于栈式架构特点设计和实现更简单,适用于资源受限的系统避开了寄存器的分配难题,使用零地址指令方式分配指令流中的命令大部分是零地址指令(只有操作码没有操作数),其执行过程依赖于操作栈,指令集更小,编译器容易实现不需要硬件支持,可移植性更好,更好实现跨平台基于寄存器架构特点典型的应用是x86的二进制指令集,比如传统的pc以及android的Davlik虚拟机指令集

2022-03-01 14:17:57 89

原创 docker详解(常用命令,安装和配置,四种网络模式,对已经启动的容器进行修改)

一.简介Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的linux或windows机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口.Docker支持将软件编译成一个镜像,然后配置好镜像中的各个软件,将镜像发布出去,其他使用者可以直接使用这个镜像,运行中的这个镜像称为容器,容器启动是非常快速的.核心概念docker主机(Host) : 安装了docker程序的机器(docker程序直接安装在操作系统

2021-10-25 21:40:36 872

原创 分布式事务

一. 本地事务事务的基本性质数据库事务的几个特性:原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durabilily),简称ACID原子性 : 一系列的操作整体不可拆分,要么同时成功,要么同时失败一致性 : 数据在事务的前后,业务整体一致隔离性 : 事务之间相互隔离持久性 : 一旦事务成功,数据一定会落盘在数据库事务的隔离级别READ UNCOMMITTED(读未提交) 改隔离级别的事务会读到其他未提交事务的数据,此现象也称之为脏

2020-12-21 10:44:30 160

原创 WebFlux

springWebFlux介绍是spring5添加的新模块,用于web开发,功能与springMvc类似,WebFlux是应付当前一种比较流行的响应式编程而出现的框架使用传统web框架,比如SpringMVC,这些基于servlet容器,而WebFlux是一种异步非阻塞的框架WebFlux特点非阻塞式,在有限资源下,提供系统吞吐量和伸缩性,以Reactor为基础实现响应式编程函数式编程,spring5框架基于java,WebFlux可以使用java8函数式编程方式实现路由请求

2020-12-17 11:03:42 192

原创 spring5

spring框架概述spring是轻量级的开源的J2EE应用程序框架spring可以解决企业应用开发的复杂性spring有两个核心部分: IOC和AOP特点方便解耦,简化开发AOP编程支持方便程序测试方便与其他框架整合方便进行事务操作降低API开发难度IOC容器什么是IOC控制反转(Inversion of Control),是面向对象编程中的一种设计原则,可以用来降低代码之间的耦合度.以前我们新建一个对象是通过new关键字,而现在我们对象的创建的控制权交给spri

2020-12-17 11:01:47 66

原创 mysql JSON

-- 增-- 1.直接新增json字符串mysql> insert into `user`(name,info,status) values("小红",'[{"name": "小明", "score": 58}, {"name": "小胖", "score": 68}, {"name": "小绿", "score": 78}]',0);mysql> SELECT * from `user`;+----+------+------------------------------------

2020-12-17 11:00:55 187

原创 分布式下的session

一. 分布式下session共享问题同一个服务,复制多份,session不同步问题不同服务,session不能共享问题(子域session,域名不同)二. session共享问题解决 – session复制优点web-server(Tomcat)原生支持,只需要修改配置文件缺点session同步需要数据传输,占用了大量的网络带宽,降低了服务器群的业务处理能力任意一台web-server保存的数据都是所有web-server的session总和,受到内存限制无法水平扩展更多的we

2020-12-17 10:59:57 75

原创 接口幂等性

一. 什么是幂等性接口幂等性就是用户对于同一操作发起的一次请求或多次请求的结果都是一致的,不会因为多次点击而产生副作用二. 哪些情况需要防止用户多次点击用户页面回退再次提交微服务互相调用,由于网络问题,导致请求失败,feign触发重试机制三. 幂等解决方案token机制服务端提供发送token的接口,在分析业务的时候,哪些业务是存在幂等问题的,就必须在执行业务前,先去获取token,服务器会把token保存到人redis中然后调用业务接口请求时,把token携带过去,一般放

2020-12-17 10:58:30 76

原创 Docker的安装使用

一. 简介Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的linux或windows机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口.Docker支持将软件编译成一个镜像,然后配置好镜像中的各个软件,将镜像发布出去,其他使用者可以直接使用这个镜像,运行中的这个镜像称为容器,容器启动是非常快速的.二. 核心概念docker主机(Host) : 安装了docker程序的机器(docker程序直接安装在操作

2020-10-13 16:08:34 91

原创 异步&线程池

一. 线程池1. 初始化线程的4种方式方式1 : 继承Tread方式2 : 实现Runnable接口方式3 : 实现Callable接口+FutureTask(可以拿到返回结果,可以处理异常)方式4 : 线程池方式1和方式2 : 主进程无法获取线程的运算结果方式3 : 主进程可以获取线程的运算结果,但是不利于控制服务器中的线程资源,可能会导致服务器资源耗尽方式4 : 通过如下两种方式初始化线程池:Executors.newFiexedThreadPool(3);/

2020-10-13 16:06:25 154

原创 分布式缓存

一. 缓存1. 缓存使用为了系统性能的提升,我们一般会将部分数据放入缓存中,而db承担数据落盘工作哪些数据适合放入缓存?即时性和数据一致性要求不高的访问量大且更新频率低的数据(读多,写少)data = cache.load(id);//从缓存中加载数据if(data==null){ data = db.load(id);//从数据库中加载 cache.put(id,data);//保存到缓存中}return data;注意: 在开发中,凡是放入缓存中的数据

2020-10-13 16:04:52 110

原创 分布式中的消息中间件

一. 引入1. 异步处理2.应用解耦3.流量控制二. 概述大多数应用中,可通过消息服务中间件来提升系统异步通信,扩展解耦能力消息服务中两个重要概念: 消息代理(message broker)和目的地(destination),当消息发送者发送消息后,将由消息代理接管,消息代理保证消息传递到指定消息队列主要有两种形式的目的地队列(queue) : 点对点消息通信(point to point)主题(topic) : 发布(publish)/订阅(subscri

2020-10-13 16:00:50 138

原创 ElasticSearch安装使用

简介:全文搜索属于最常见的需求,开源的Elasticserch是目前全文搜索引擎的首选.它可以快速地储存,搜索,和分析海量数据.维基百科,Stack OverFlow,github,都采用它Elastic底层是开源库,Lucene,但是,你没法直接用Lucene,必须自己写代码去调用它的接口,Elastic是Lucene的封装,提供了REST API 的操作接口,开箱即用. 官网参考文档一,基本概念1. Index(索引)动词,相当于mysql中的insert操作(索引一条数据)名词,

2020-10-13 15:58:09 88

原创 服务熔断,降级Sentinel

一. 流控流控规则资源名: 唯一名称,默认请求路径针对来源: Sentinel可以针对调用者进行限流,填写微服务名称,默认default(不区分来源)阈值类型/单机阈值:QPS(每秒请求数量) : 当调用该api的QPS到达阈值的时候,进行限流线程数: 当调用该api的线程数达到阈值时,进行限流是否集群: 不需要集群流控模式:直接: api达到限流条件时,直接限流关联: 当关联的资源达到阈值时,就限流自己链路: 只记录指定链路上的流量(指定资源从入口资源进来的流量,如果

2020-10-13 15:56:01 112

原创 eureka,zookeeper,consul的CAP

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。组件名语言CAP服务健康检查对外暴露接口SpringCloud集成EurekaJavaAP可配支持HTTP已集成ConsulGoCP支持HTTP/DNS已集成ZookeeperJavaCP支..

2020-10-13 15:51:51 290

原创 nginx安装使用

一,nginx 基本概念(1). nginx是什么Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发力强(2). 反向代理正向代理**概念 ** : 意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代

2020-10-13 15:46:55 128

轻松理财系统.zip

java 轻松理财系统,卓越项目,美和易斯,基于java,mysql。

2019-06-28

android双屏问题

2021-01-12

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

TA关注的人

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