自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zhang6622056的专栏

Java虚拟机之堆分析

  • 博客(251)
  • 资源 (5)
  • 收藏
  • 关注

原创 Tbschedule参数配置理解

Tbschedule解决的关键问题是分布式任务调度问题,所以,它的核心是如何将一批任务拆分到多个机器上,多个线程上执行。并且做到均匀分配,不重复执行,探活高可用等。但实际使用中,其参数较多,不同的worker业务场景需要不同的参数配置,本篇主要讲述tbschedule对应的任务分配中角色对应关系以及分配过程的理解。以便于在具体业务研发具体分析。具体问题caseAttention: 建议首先尝试自己回答一下如下问题,如果有比较清晰的理解。就无需在往下看了Tbschedule有一worker配置如下:

2021-09-06 17:19:22 415

原创 G1垃圾收集器的应用调研和实践- JNI Weak Reference Cost Too Long

以下的一些理论主要用于个人的回顾使用,如需看案例,可以直接跳到下面的应用部分。G1收集器的处理方式也不是一蹴而就的,从它身上还是可以看到很多之前收集器的身影在上面。比如:逻辑分代、晋升、复制、并行清理、并发分段标记(CMS)等思想中借鉴而来的,较适合大内存的机器应用,比如8c16G。之所以要用大内存,那是因为它的主要核心还是空间换时间的做法。核心主要有以下几点Region区域的划分搭配CSET使得单次gc关注的容量变小RSet和Cardtable使得标记过程扫描空间变小三色标记和SATB实现增量标

2021-09-06 15:59:14 665

原创 记录一次gc报警背后的思想推演

记录一次gc报警背后的思想推演问题背景在日常应用中,我们经常听到4C8G,8C16G等生产机器配置,在出现本次报警之前,我基本上是一个不太经常去看jvm指标的人。问题经历是这样的,在2021年8月14日凌晨,我收到了计费系统频繁YGC的报警,报警内容部分片段如下:00:05:20至00:05:40,JVM监控YoungGC次数=24次[偏差20%],超过7次YoungGC次数>=20次收到的内容大致是说平均1秒会发生1次+的YGC,YGC频繁,第一反应就是流量有对应增加,而结果也确实是这样

2021-09-06 15:36:22 884

原创 用户态和内核态的切换

用户态和内核态的切换我们经常说,一个程序依赖DMA设备来减少用户态和内核态的切换次数,以此来提升性能。那么对于它的细节是如何进行的呢?本篇,博主与你一起研究一下用户态和内核态的划分,以及这件事情的前因后果。用户空间和内核空间对于32位的操作系统而言,它的寻址空间最大为4g(2的32次方),换言之一个系统进程最大可运行的内存地址空间为4个G,操作系统核心空间占用1g,其他3g则给予用户空间使用。针对Linux操作系统而言,最高的1G字节(从虚拟地址 0xC0000000 到 0xFFFFFFFF),由

2020-07-28 17:21:27 1282

原创 聊聊DMA协处理器,IO设备的搬运工

DMA(Direct Memory Access 直接存储器访问) 是近些年电脑主机的重要组成部分,它主要用来建立不同硬件之间的数据传输沟通,从而使得数据IO不再引起cpu的大量中段负载。以此,提高CPU的利用率,使得程序的运算更快,而不用阻塞在io等待上,总结起来,DMA解放了CPU的搬运数据的工作,从而使得CPU更加专注于计算任务,从而提高机器的计算效率本质上讲,DMA就是我们在主板上的一块独立的芯片。在进行内存和IO设备通信的时候,我们可以直接通过DMA芯片来通信,而不再需要CPU来搬运数据。D

2020-07-21 17:53:53 1463

原创 反射调用为什么慢?细推反射细节!

写在前面​ Java的反射在日常开发中还是经常用到的技术点,这包括spring的Ioc,包括一些除cglib之外的bean copy(cglib采用asm动态生成字节码来实现),然而在spring的ioc中,我们或许无法感知到,这是因为大部分类实例都是单例,只在容器启动的时候加载一次,并在容器内缓存它的实例。但是在业务code中的beancopy则不然。你会发现请求量大的情况下,很多线程栈都会...

2019-08-09 12:38:57 2736 1

原创 死磕cglib系列之二 AbstractClassGenerator缓存解析

AbstractClassGenerator简介通过上一篇文章对Enhancer类的使用,我们大致对cglib的proxy功能有了一个基本了解,本篇从Enhancer类的父类AbstractClassGenerator源码入手,试着剖析一下作者在写cglib框架时候可能的思想。仔细阅读源码就发现该类作为父类,被很多的类继承,比如Enhancer、BeanCopier内部类、KeyFactory内...

2019-02-20 11:20:16 1982 4

原创 死磕cglib系列之一 cglib简介与callback解析

简介cglib是一套java动态代理实现框架,cglib被应用到spring app,hibernate等高级业务框架,spring事务在业务实现类未实现接口的情况下也会使用该技术。实际上,cglib基于继承实现,这也就意味着final,private相关的method无法被代理。基于asm框架对class字节码编辑改动,从而达到动态代理的目的,总之,被代理类没有实现接口的情况下cglib为首...

2019-02-14 17:47:15 3573 1

原创 电商-扣减库存的思想碰撞 [redis的eval函数与胶水语言lua的结合]

背景我们大家都知道,在一个电商系统里面,库存是一个很敏感的系统组成部分。这是因为在这一点上,我们的程序执行模型必须在一个点上做出改变,那便是从并行执行模型到串行执行模型的切换。因我们的某一个商品的库存资源可以认为是有且只有一个的,不管前面的执行过程有多少个线程,多少个用户,在实际扣减或回滚的时候,我们期望它是原子的,内存可见的,有序的执行顺序。实现案例结构图可能的复杂逻辑...

2018-12-08 09:52:36 795

原创 千万级数据清洗案例总结 [mysql with mycat -> Elasticsearch]

背景最近工作较忙,没有时间打理博客,赶工,加班,黑白颠倒,失眠之余,写一写前阵子遇到的数据清洗案例。1000多万数据的清洗工作,从Mysql清洗到Es里面,起初的规划是用limit查询分片数据,然后逐一批次插入到es内部。然而,想法和实际操作完全两码事,细节性知识重要性尤其凸显 我们的目的性能瓶颈 可能出现的性能瓶颈从上图来看,我们粗略的可以这样划分我们的程序可能出现的...

2018-12-08 00:49:32 1928

原创 初识多线程

写在前面的话不可否认,对于大多数程序员在其职业生涯中很少遇到多线程的编程案例,即便遇到,也是自己感知不到的应用场景。诸如线程池,数据库连接池。亦或者通过新建线程来分担可延迟的业务处理来提高用户端响应效率,类似消息队列的角色。但是以上应用到多线程的领域,我们无法感知到多线程执行中的特点。如线程间通信,上下文切换,资源争抢,锁的互斥。以及三大特性:“可见行,原子性,有序性”。但是Java的多线...

2018-10-10 22:59:08 304 1

原创 数据结构[二] 红黑树详解 内附Java实现

简介&我的理解R-B Tree 红黑树简介-3个特性红黑树是二叉查找树的一种,与AVL平衡二叉树相差不大,也是左小右大的数据存储结构,重点在于查找数据,同样是O(height)的时间复杂度。相对于AVL树的靠高度平衡,红黑树是靠颜色平衡的,而为了维持接下来的几个特性,使得它在插入或者删除操作以后必须进行旋转和重新着色才可以保持红黑树特质.它主要有以下几种特性(虽然太过形式化,我...

2018-09-19 14:22:13 434

原创 数据结构[一] 平衡二叉树 AVL树结构详解 [Java实现]

博客思维导图简述 先不说平衡二叉树,我们单开来说,这样比较方便理解。 先说二叉树,再说平衡条件,没那么多花里胡哨的理论,我只是想让大家看完能明白,能写出来 二叉树 什么是二叉树?二叉树数据结构,顾名思义,只有两个叉,在数据结构中,操作性能要远高于线性结构,有O(height)的索引性能。与线性结构有相同的空间复杂度,特性如下: 每个节...

2018-09-14 11:02:48 1085 10

原创 Nginx负载均衡的5种方式

声明Nginx共支持5种负载方式,以此来实现相关的请求流量分派。通过在不同机器上计算。最终结果返回用户。值得一提的是,以下负载方式,没有经过博主验证过,在实际使用使用待调试。有什么错误发现,还望提醒!!!图解理解轮询分派upstream loop{ server 127.0.0.1:8080 server 127.0.0.1:7080 se...

2018-09-10 11:13:04 5201 2

原创 Nginx Location Uri匹配详解

写在前面的话:老规矩,先啰嗦几句,输出一下情绪,很久没有深夜写博文了,做了技术就是这样,深度和广度,都需要你兼具,相信很多从业者学东西之前都先问自己一个问题,学这个有没有用?浪费时间吗?说实话,我也是这个问题问过自己很多次。研究Nginx之前,也定位过自己,Java研发,会配置简单的Nginx,会用。ctrl+c ctrl+v能解决很多问题,但是出了问题还是自己解决不了。很多小伙伴会说...

2018-09-09 01:39:27 2404

原创 Nginx配置详解

啰嗦几句在Apache服务器上,一个服务器进程在同一时刻只能处理一个网络请求,如果希望apache能够承受更多的并发,那么要启动更多的服务器进程,这使得服务器之间的进程来回切换频繁,耗费过多的系统资源Nginx模型:一个master进程多个worker进程,master进程只负责管理worker进程,而不负责网络请求 worker进程数最好与当前机器的CPU核心数相同,这样使得每一个wo...

2018-09-07 19:00:39 650

原创 Nginx简介与安装

支持模块安装GCC(GNU Compiler Collection)可用来编译C语言程序,Nginx不会直接提供二进制可执行程序,GCC是必须的编译工具如果遇到C++编写的Nginx模块,则必须安装gcc-c++编译器的支持yum -y install gccPCRE(Perl Compatible Regular Expressions) Perl兼容正则表达式,该库是Nginx正...

2018-09-06 19:18:39 234

原创 class字节码文件

写在前面的话 class文件结构可以说是一套规范,不一定是Java编译器编译出来的版本,它用来描述一个文件中对应的字段,类,常量池,继承关系等等。值得一提的是这个文件是完全紧凑型的。从第一个字节到最后一个字节,表达的意思按照约定好的严格规范。由于这种字节码可以运行在jvm上实现跨平台的亮点。所以不只是Java语言编译器可以编译成这种文件。class文件是学习jvm中比较重要的一环。我尽量用...

2018-05-18 12:20:42 1797

原创 Java加载类过程

类加载过程图解:简介:以上这张图是博主经过阅读周志明的深入理解Java虚拟机一书,并在网上看了若干帖子之后画出来的,我争取用一句话来 描述每个阶段都做了什么,因为每个阶段做的事情实在有一些多,而我们做为开发者也着实想理解的深入一些,所以,我 接下来用一些文案描述,究竟每个步骤发生了什么, 但是,首先澄清一点。基于博主的理解有限,加上主观判定有可能错误。所以欢迎大家指正。一起学...

2018-05-16 17:20:31 320

原创 SnowFlake算法推演

简介:snowflake算法目的是为了生成分布式系统唯一ID而产生的,这种算法,可以保持69年使用,高并发情况下1MS可以生成4096个不同的ID,那么为什么呢?如何做到的呢?为什么是69年?首先69年运算可以用2的41次方推算出来时间戳,然后看一下这个时间的量,也就是从1970年开始的偏移量正好是69年,如果想要更长的时长,只需要加长时间戳的位数即可。为什么是40...

2018-05-11 16:33:56 944 2

原创 位运算案例

概述:在二进制计算中,最常见的就是位运算了。而位运算也经常出现在各位大神的源码当中,在研读了snowflake算法以后。决定自发的研究一些位运算,以应用到实际程序中。欢迎大家在评论区追加运算的应用场景,或者算法中实际应用到的位运算本篇持续更新!!基本运算,定死一个值为MAX(8位DEMO):最大值: 1111 1111 最小值 0000 0000设X = MAX , Y &l...

2018-05-10 23:10:50 352

原创 计算机基本定义

字面量(Literal): 理解为常量即可,比如 int i = 0,float b = 1.1f 等等。符号引用(Symblic Reference): Java文件编译到class文件之后。在常量池结构中真实存在的引用指向。比如说在UserService类中引用了User a = new com.demo.User();但是到内存结构中,我们并不知道User的具体内存地址...

2018-05-10 17:14:41 294

原创 散列(HASH)---内含Java HashMap理解

散列是什么?散列又称为hash,设K为key,那么则有存储位置下标 index = F(k).这里F做的事情也就是我们本文要讲的散列,hash。通过散列算法。我们避免了循环比对,实现了不规则数据高效率存取Java HashMap 数组+链表什么是hash碰撞如上图,数组+链表,将我们的每一个KV的映射关系保存到了对象数组中。那么有:PUT = F(K) = 构造en...

2018-02-26 19:11:06 412

原创 JVM虚拟机分析 一 (堆的理解)

概述嗯嗯嗯。作为沉寂已久的苏醒(LONG LONG AGO 不吹B了!).鄙人开始总结自己的JVM理解了.话说经常在上下班的时间拿着周志明的JVM一书,看看看!回头上来实践一下吧。不理解。。于是乎,上网看看各大博客里面的大牛如何来吹。OK,貌似懂了。上机研究一下吧。懂了?嗯。。。不理解。。就特么像是越光宝盒那个逗比电影里面曾志伟的桥段。靓女,我只能写个青字,其实我是真的略懂。。。没错,...

2018-02-11 15:02:16 364

原创 跨域解决方案详解

概述废话不想多讲,由于前篇整理了由前后端分离的3种方案,个人挑取了配置服务器的方案进行方案推进,结果数据是交互了,但是在header自定义token的cache上出了问题,自定义的header一直不能够传到server上。于是乎各种百度,google有了这篇帖子的衍生,学术不精,必须踩坑。跨域请求CORS流程描述如下OPTIONS验证服务器解决方案在采用filter解决之前,查看了一些spring

2017-07-20 17:37:09 850

原创 前后端分离跨域问题解决方案

声明:在以往的开发中,前后端分离也不是像现在这么热门,所谓的前端工程师也只不过是写好静态页面由Java工程师或者php工程师嵌入到页面中进行开发,这或许加重了这些工程师的工作量,而且在样式调试上由纯html代码到jsp,asp,php调试起来要两个工程师一起商量着找问题,解决起来成本也很高。前后端分离,前端工程师不仅仅要负责展现,而且要编写相应的代码使得dom渲染,网络交互都focus在前端工程师这

2017-07-17 14:28:16 26714 7

原创 centos7搭建nginx+多tomcat服务器环境

前言本篇仅仅作为备用,防止老年痴呆,好了,下面开始 安装jdk环境cd [jdk dir]tar -zxvf jdkfilename.tar.gzcd JAVA_HOME//更新profilevim /etc/profilePATH=$PATH:/usr/local/jdk1.8.0_121/binexport PATHsource /etc/profile配置多tomcat 环境t

2017-07-06 17:55:59 1190

原创 LINUX TOP命令解析

标题解析第一行:top - 14:58:56 up 173 days, 4:49, 2 users, load average: 8.00, 8.03, 8.05说明:1.系统当前时间--[14:58:56]2.系统到目前为止已运行的时间--[up 173 days 4:49]3.当前已登录用户2个--[2 users]4.系统负载(任务队列的平均长度)三个值分别为1分钟、5分钟、15

2017-01-04 15:43:41 491

原创 ACME-TINY制作免费的HTTPS证书

前言虽然实现了https的环境搭建,用到付费的CA认证机构,然而身边确实有很多声音在建议这免费的https SSL证书,于是乎自己真正搭建尝试了一下免费的https的搭建过程,并且阐述自己的理解4种不同的证书企业级别:EV(Extended Validation)、OV(Organization Validation)个人级别:IV(Identity Validation)、DV(Domain V

2016-12-19 13:37:49 3029

原创 HTTPS环境搭建

前言因IOS10的强制HTTPS,没有玩过https的又开始上路啦,本篇采用nginx服务器,搭建认证证书,实现https的访问请求成功,在开始的时候认为https必须为客户端请求需要一个CSR文件..然后什么IE浏览器配置信任证书等等,回头看baidu.steam.都是浏览器访问,也都是https,算是闹明白了https并没有想象中的那么复杂,证书的申请需要一个CSR文件,该CSR生成公钥,用户h

2016-10-17 18:12:38 1972 2

原创 java-final关键字简述

前言在平时逻辑编码中,我们很少用到final关键字,但是在阅读一些源码的时候发现final关键字还是很常用的,主要用处有以下几种,本篇文章仅供个人学习使用,不一定正确,还请各位看到的博友给予相关的交流意见final修饰类表示该类不能继承,但是final类中所有的成员方法都会被隐式的指定为final方法。final修饰方法final修饰的方法意指被锁定,防止继承类修改它的相关实现.final修饰变量被

2016-10-13 14:54:05 502

原创 DUBBO初探-搭建DUBBO开发环境

我所理解的DUBBO相对于传统web开发框架,dubbo更加适合于并行系统开发,分布式,模块化。将server和client都注册到zookeeper注册中心上,然后由最外层客户端发起请求到相应client上,client再调用server。所谓模块化,举例说明,将一个电商系统分隔成用户,商品,进销存等模块,不同的服务模块,client同样也可以这样区分,这样分布完成之后,我们还可以建立多个相同的c

2016-10-13 12:27:49 2821 1

原创 JAVA关键字abstract

前言关于abstract关键字,在这个大家比较关注业务实现的时代,真正能够abstract一下的码农又有多少个呢?其实刨除service interface,和service impl。话说这些年的工作经历基本上都是在接口和实现类,进行一些SSH的业务开发,然而这两天真正的看spring的源码,protect abstract 比比皆是,一个功能有N层的继承关系,实现关系,抽象类层出不穷。于是乎回头

2016-09-29 12:20:24 475

原创 JAVA关键字--private protected public default

privateprivate表示私有,用于修饰类的变量以及方法,被private修饰的变量和方法只能被类本身的实例调用或者内部类通过[类名].this.[变量或方法名]进行调用。主要用于类中封装相应的不想对外暴露的属性或者方法。protectedprotected表示保护的,介于private与public之间的访问修饰,可以用来修饰变量和方法,不可修饰类,比较形象的比喻,protected只允许朋

2016-09-29 11:22:48 577

原创 JAVA设计模式---单态模式理解

前言何为单态模式? 在一个系统中,JVM中,只能存在有一个对象的实例,所有程序的处理都只能调用这一个对象完成相关逻辑操作,单态模式有点在于减少了new关键字的调用,实例的初始化,节省了系统内存开销。单态模式的难点在于多线程的处理,写法很多,真正能够执行的,考虑的,难点在于线程的安全问题!!!,本文进行简单的理解阐述,如果不明白,请关注博主留下的两篇好文两篇好文http://www.blogjava

2016-09-21 18:13:02 3928 1

原创 JAVA设计模式---工厂模式理解

前言多年的java经验,说句实话并没有刻意的去看设计模式相关的东西,但是设计模式相关的应用就在实际应用中,比如hibernate中connection的获取,根据不同的properties的配置内容,不同的参数,从而获取不同的connection,并且调用connection相关方法对DB进行操作。这就是一个工厂模式的场景。看了很多工厂模式的帖子,大部分都是奔驰,宝马[笑CRY]。不讲太多,只说一下

2016-09-21 14:48:52 1947

原创 vmware centos7 操作共享文件夹

前言在真正开始写这篇BLOG之前,还是阐述一下该问题背景,在我安装完成vmware centos7的虚拟机之后,确实是想要实现文件的copy,也就是说到了本文的共享文件夹的操作,于是乎有了下面的总结,毕竟在执行上组件之间的各种依赖需要执行完成以后,不断的弥补,相当麻烦.尤其是kernel-headers的这个依赖顽固的错误Enter the path to the kernel header fil

2016-09-20 15:01:33 6938

原创 CENTOS 7 安装perl环境

前言最近开始学习linux虚拟机相关的东西,在刚刚开始的路上就是各种曲折,网络问题,装载问题,由于vmware tools需要perl环境的支持,于是安装perl环境。还没有正式开始学习要学的东西就已经被环境搞得很头疼,总结如下安装perl支持yum install perl* (yum安装perl相关支持) yum install cpan (perl需要的程序库,需要cpan的支持

2016-09-20 11:27:42 45525

原创 CENTOS7 安装VMWARE TOOLS

1-挂载cdrom到指定目录(该环境已为安装好centos7的vmware)点击 虚拟机–安装vmware tools mount /dev/cdrom/ /mnt/cdrom/ 此时在cdrom(挂载的目录下)应该有vmware-tools的tar包生成。 mv tar包到/tmp目录下面 umount /mnt/cdrom/ (解除挂载,如果有必要的话) tar -zxvf

2016-09-19 18:29:49 3239

原创 Vmware创建虚拟机centos遇到问题

前言:本文主要阐述在搭建vmvare centos环境时遇到的种种问题,不做安装详情阐述(问题一):镜像安装问题 解决: 不胡乱说,如果正规按照百度经验上的centos安装的话,一般不会有其他问题,只有一个问题,镜像问题!!!那么,检查一下你的镜像是否被识别,镜像大小,我的ISO文件大小有4G左右,所以遇到此问题,请检查镜像(问题二):网络问题简单阐述:

2016-09-18 14:22:57 546

rtmp直播nginx配置文件

nginx-rtmp支持

2016-09-13

Java读取xml文件-jdom.jar

jdom的jar包。Java读取xml文件的jar包。很常用,配合blog一起推出给大家

2012-06-13

jquery弹出层div支持

免费的资源。大家一起享受,简单而明了。渴望交流

2012-06-05

struts2学习笔记.doc

本人学习struts2的笔记,希望大家可以多多学习以后共同交流

2011-12-13

空空如也

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

TA关注的人

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