- 博客(582)
- 资源 (1)
- 收藏
- 关注

原创 JVM成神之路-JVM引用模型
本文通过探析Java中的引用模型,分析比较强引用、软引用、弱引用、虚引用的概念及使用场景,知其然且知其所以然,希望给大家在实际开发实践、学习开源项目提供参考。Java的引用对于Java中的垃圾回收机制来说,对象是否被应该回收的取决于该对象是否被引用。因此,引用也是JVM进行内存管理的一个重要概念。Java中是JVM负责内存的分配和回收,这是它的优点(使用方便,程序不用再像使用C语言那样担心...
2018-10-15 18:41:54
702

原创 JVM成神之路-类加载机制-双亲委派,破坏双亲委派
概述概念虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接时候用的Java类型。类的生命周期类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用、卸载。其中验证、准备、解析统称为连接上图中,加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须严...
2018-08-21 09:24:50
17380
5

原创 JVM成神之路-HotSpot虚拟机-编译原理、JIT、编译优化
Java编译原理什么是字节码、机器码、本地代码?字节码是指平常所了解的 .class 文件,Java 代码通过 javac 命令编译成字节码机器码和本地代码都是指机器可以直接识别运行的代码,也就是机器指令字节码是不能直接运行的,需要经过 JVM 解释或编译成机器码才能运行此时你要问了,为什么 Java 不直接编译成机器码,这样不是更快吗?1. 机器码是与平台相关的,也就是操...
2018-08-13 16:02:53
7048
7

原创 JVM成神之路-Java垃圾回收
Java垃圾回收机制为什么要进行垃圾回收?随着程序的运行,内存中存在的实例对象、变量等信息占据的内存越来越多,如果不及时进行垃圾回收,必然会带来程序性能的下降,甚至会因为可用内存不足造成一些不必要的系统异常。哪些“垃圾”需要回收?如果某个对象已经不存在任何引用,那么它可以被回收。什么时候进行垃圾回收?引用计数算法每个对象添加一个引用计数器,每被引用一次,计数器加1,失...
2018-08-02 15:37:53
31274
8

原创 JVM成神之路-Java对象模型
首先我们要知道: 在jvm的内存结构中,对象保存在堆中,而我们在对对象进行操作时,其实操作的是对象的引用。 Java对象包含三个部分一个Java对象可以分为三部分存储在内存中,分别是:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。对象头(包含锁状态标志,线程持有的锁等标志) 实例数据 对齐填充 oop-klass model(...
2018-07-23 15:01:17
9232
2

原创 核心检索目录
面向对象:https://blog.youkuaiyun.com/w372426096/article/details/82775858拆箱装箱:https://blog.youkuaiyun.com/w372426096/article/details/81909792基本数据类型+String:https://blog.youkuaiyun.com/w372426096/article/details/82857...
2018-07-09 15:02:31
1034
1

原创 JVM成神之路-Java内存模型(JMM)
Java 内存模型基础什么是 Java 内存模型(JMM-共享内存模型)内存模型描述了程序中各个变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量这样的底层细节。(共享变量是存放在堆内存中,对于局部变量等不会在线程之间共享) Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。原始的Java内存模型效率...
2018-07-03 15:32:05
4526
3

原创 JVM成神之路-Java内存模型概述
为什么要有内存模型在介绍Java内存模型之前,先来看一下到底什么是计算机内存模型,然后再来看Java内存模型在计算机内存模型的基础上做了哪些事情。要说计算机的内存模型,就要说一下一段古老的历史,看一下为什么要有内存模型。内存模型,英文名Memory Model,他是一个很老的老古董了。他是与计算机硬件有关的一个概念。那么我先给你介绍下他和硬件到底有啥关系。CPU和缓存一致性我们应该...
2018-07-03 14:35:17
579
1

原创 JVM成神之路-JVM内存结构
线程私有程序计数器当前线程所执行的字节码的行号指示器 对于 Java 方法,记录正在执行的虚拟机字节码指令的地址;对于 native 方法,记录值为空(Undefined) 唯一一个Java 虚拟机规范中没有规定任何 OutOfMemoryError 的内存区域Java 虚拟机栈:java方法执行的内存模型 生命周期与线程执行结果相同每个线程都有独自的虚拟机栈,...
2018-06-21 10:58:30
1626
3
转载 深入分析CAS
CAS,Compare And Swap,即比较并交换。Doug lea大神在同步组件中大量使用CAS技术鬼斧神工地实现了Java多线程的并发操作。整个AQS同步组件、Atomic原子类操作等等都是以CAS实现的,甚至ConcurrentHashMap在1.8的版本中也调整为了CAS+Synchronized。可以说CAS是整个JUC的基石。在CAS中有三个参数:内存值V、旧的预期值A、要更新的值B,当且仅当内存值V的值等于旧的预期值A时才会将内存值V的值修改为B,否则什么都不干。其伪代码如下:if(th
2022-06-23 11:23:40
1388
1
转载 Java内存模型之happens-before
由于存在线程本地内存和主内存的原因,再加上重排序,会导致多线程环境下存在可见性的问题。那么我们正确使用同步、锁的情况下,线程A修改了变量a何时对线程B可见?我们无法就所有场景来规定某个线程修改的变量何时对其他线程可见,但是我们可以指定某些规则,这规则就是happens-before,从JDK 5 开始,JMM就使用happens-before的概念来阐述多线程之间的内存可见性。happens-before原则非常重要,它是判断数据是否存在竞争、线程是否安全的主要依据,依靠这个原则,我们解决在并发环境下两操作
2022-06-23 11:15:59
996
转载 Java内存模型之重排序
在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件:在单线程环境下不能改变程序运行的结果;存在数据依赖关系的不允许重排序如果看过LZ上篇博客的就会知道,其实这两点可以归结于一点:无法通过happens-before原则推导出来的,JMM允许任意的排序。as-if-serial语义的意思是,所有的操作均可以为了优化而被重排序,但是你必须要保证重排序后执行的结果不能被改变,编译器、runtime、处理器都必须遵守as-if-s
2022-06-23 11:13:46
980
原创 系统稳定性建设的一些感想
背景我目前主要负责供应链系统: 支持公司重资产业务持续精细化运营.系统之前是一个外采系统: B2P自闭环业务流程, 资产管理以及业财一致等业务功能集一身的单体应用系统.随着业务发展,系统不断运维迭代,逐渐暴露出很多痛点,比如:资产规模超出数据处理引擎原设计能力,性能不足严重影响业务数据处理,月结. 技术架构过时(Struts,Ext,EJB等),不稳定,经常出现安全漏洞等问题 不能集成公司基础服务,出现问题,依赖原厂远程配合修复,维护性差基于以上主要痛点等因素,促使我们决定重构系统;目的就
2021-11-11 21:04:06
1800
原创 生产JVM参数调优
#原有参数:-Xms32g -Xmx64g#java -XX:+PrintCommandLineFlags -version。查看默认参数-XX:+PrintCommandLineFlags-XX:+UseCompressedClassPointers 类指针压缩-XX:+UseCompressedOops jvm开启了压缩之后64为系统的对象也只占用12byte-XX:+UseParallelGC 并行收集器年轻代。Parallel Scavenge(新生代)+Parallel Old(..
2020-11-05 11:23:16
720
原创 线上故障快速排查:GC,内存,CPU等问题(Linux命令)
命令:jps -l查看Java进程完全路径,进程号命令:jps -v jvm参数查看Java进程的jvm参数命令:top查看进程对应CPU,内存使用的占比命令:free -h查看服务器内存使用情况例子:total used free shared buff/cache availableMem: 125G 86G 5.8G 3.1G 33G...
2020-11-04 15:00:43
918
转载 Java中的常量池之Class常量池
在Java中,常量池的概念想必很多人都听说过。这也是面试中比较常考的题目之一。在Java有关的面试题中,一般习惯通过String的有关问题来考察面试者对于常量池的知识的理解,几道简单的String面试题难倒了无数的开发者。所以说,常量池是Java体系中一个非常重要的概念。谈到常量池,在Java体系中,共用三种常量池。分别是字符串常量池、Class常量池和运行时常量池。本文是《好好说说Java中的常量池》系列的第一篇,先来介绍一下到底什么是Class常量池。什么是Class文件在Java代码的
2020-05-19 19:54:09
871
原创 Java对象的内存分配过程是如何保证线程安全的?
JVM内存结构,是很重要的知识,相信每一个静心准备过面试的程序员都可以清楚的把堆、栈、方法区等介绍的比较清楚。上图,是一张在作者根据《Java虚拟机规范(Java SE 8)》中描述的JVM运行时内存区域结构画的。很多人都知道Java对象是在堆内存中分配空间的(JIT优化除外),也知道内存分配过程中是线程安全的,那么虚拟机到底是如何保证线程安全的呢?本文就来简单介绍一下。1...
2020-04-14 09:40:09
866
原创 MySQL 百万数据量分页查询方法
方法1: 直接使用数据库提供的SQL语句 语句样式:MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景:适用于数据量较少的情况(元组百/千级) 原因/缺点:全表扫描,速度会很慢 且 有的数据库结果集返回不稳定(如某次返回1,2,3,另外的一次返回2,1,3). Limit限制的是从结果集的M位置处取出N条输出,其余抛弃....
2020-04-14 09:27:59
1125
转载 各种Java加密算法-非对称加密
RSA 这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。 这种加密算法的特点主要是密钥的变化,上文我们看到DES只有一个密钥。相当于只有一把钥匙,如果这把钥匙丢了,数据也就不安全了。RSA同时有两把钥 匙,公钥与私...
2020-03-12 15:21:28
9394
1
转载 各种Java加密算法-对称加密
如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorithm,安全散列算法) HMAC(Hash Message Authentication Code,散列消息鉴别码) 复杂的对称加密(DES、PBE...
2020-03-12 15:20:00
1255
原创 Java问题排查工具单命令单
tail最常用的tail -ftail-300fshopbase.log#倒数300行并进入实时监听文件写入模式grepgrepforestf.txt#文件查找grepforestf.txtcpf.txt#多文件查找grep'log'/home/admin-r-n#目录下查找所有符合关键字的文件catf.txt|grep-i...
2020-03-09 09:54:10
333
原创 工作感悟
做事:“价值牵引,技术驱动”; 做人:“成就业务,成就他人”创造用户价值和商业价值并不是孤立的,对于商业企业来说,需要可持续发展,需要创造有商业价值的用户价值,技术是实现这个目标的最有力武器.做到对技术的深度理解;对用户价值和商业价值有深度理解,做好价值域到技术域的链接.避免拿锤子找钉子.推荐方法论:大胆假设,最小代价快速验证,一旦验证通过Allin,复盘成就业务,成就他人,...
2020-01-13 20:51:15
340
1
原创 分布式锁-这一篇全了解(Redis实现分布式锁完美方案)
前言在某些场景中,多个进程必须以互斥的方式独占共享资源,这时用分布式锁是最直接有效的。随着技术快速发展,数据规模增大,分布式系统越来越普及,一个应用往往会部署在多台机器上(多节点),在有些场景中,为了保证数据不重复,要求在同一时刻,同一任务只在一个节点上运行,即保证某一方法同一时刻只能被一个线程执行。在单机环境中,应用是在同一进程下的,只需要保证单进程多线程环境中的线程安全性,通过 JAV...
2019-12-31 12:11:29
25518
9
原创 成神之路 第015期。
学习Java中的序列化知识,学习时间两周,学习完请写下你的学习笔记。参考资料:什么是序列化?有哪些应用场景。链接:https://t.zsxq.com/AaieuJq 什么是反序列化?链接:https://t.zsxq.com/bUBqRFu Java中如何实现序列化和反序列化。链接:https://t.zsxq.com/URfAmi2 Serializable 和 Exter...
2019-12-20 11:34:55
260
原创 并发相关-这一篇全了解
什么是并发?什么是并行?解: 参考:深入理解Java并发编程(一):到底什么是线程安全-HollisChuang's Blog什么是进程?什么是线程?解:参考:深入理解Java并发编程(一):到底什么是线程安全-HollisChuang's Blog类变量、成员变量和局部变量分别是什么?哪个是共享变量?解: Java中共有三种变量,分别是类变量、成员变量和局部变量。他们分别存放...
2019-12-20 11:31:35
527
原创 @ConfigurationProperties这一篇全了解
在编写项目代码时,我们要求更灵活的配置,更好的模块化整合。在 Spring Boot 项目中,为满足以上要求,我们将大量的参数配置在 application.properties 或 application.yml 文件中,通过 @ConfigurationProperties 注解,我们可以方便的获取这些参数值使用 @ConfigurationProperties 配置模块假设我们正在搭...
2019-12-19 10:35:29
2295
转载 Mybatis-Configuration-详解
ConfigurationMyBatis的初始化会执行SqlSessionFactoryBuilder的中build()方法,build方法又会调用XMLConfigBuilder()的内部parse()方法进行加载配置,所以我们先看一下parse()的源码:public Configuration parse() { if (parsed) { throw new Build...
2019-11-25 16:01:37
892
原创 模拟面试题
以下是一份3年的简历内容,其中软件技能部分,大概会问以下问题,欢迎各位一起回答一下。『熟悉消息中间件RabbitMq的使用及其实现原理。』 项目中使用过Rabbitmq,是什么场景使用的?不用的话能不能解决问题?Rabbitmq和其他的同类消息中间件相比有什么优缺点吗? Rabbitmq如何保证不丢数据? 如何保证消息的消费不会重复? 什么是业务幂等,什么是请求幂等,你们采用的...
2019-11-12 20:49:19
534
原创 Springboot中Filter,Interceptor执行顺序
Filter优先与Interceptor执行;Interceptor执行顺序:本地配置文件(@Configuration)先执行,然后是引用jar包中的配置文件,然后是配置文件外使用注解的Interceptor.其中配置文件中执行顺序是按照InterceptorRegistry注册的顺序...
2019-11-04 09:12:12
3032
转载 url中的jsessionid所引起的问题和解决
jsessionid所引起的问题在Spring MVC当使用RedirectView或者"redirect:"前缀来做重定向时,Spring MVC最后会调用:response.sendRedirect(response.encodeRedirectURL(url));对于IE来说,打开一个新的浏览器窗口,第一次访问服务器时,encodeRedirectURL()会在url后面附加上一段js...
2019-09-06 08:59:20
5958
1
原创 【成神之路】es搜索相关面试题
es的分布式架构原理能说一下么(es是如何实现分布式的啊)?https://www.cnblogs.com/daiwei1981/p/9403970.htmles写入数据的工作原理是什么啊?es查询数据的工作原理是什么啊?https://www.cnblogs.com/daiwei1981/p/9411482.htmles在数据量很大的情况下(数十亿级别)如何提高查询效率啊?h...
2019-05-30 15:44:09
4825
原创 【成神之路】开放设计编程相关面试题
性能指标有哪些 PV,UV,QPS;响应200,500指数如何发现性能瓶颈 Kibana,Cat等跟踪,健康检查工具性能调优的常见手段 架构上:微服务话,水平拆分,垂直产分数据库上优化查询,代码优化说说你在项目中如何进行性能调优 慢请求;慢查询说说你在项目中使用过的UML图 你如何考虑组件化、服务化、系统拆分 秒杀场景如何设计 说说你的开发流程...
2019-05-27 18:44:15
1180
1
原创 【成神之路】MQ消息中间件相关面试题
为什么是消息队列?消息队列使用的场景介绍和作用; 解耦,异步操作业务-提高性能吞吐量,削峰限流面临的问题:系统可用性降低:系统引入的外部依赖越多,越容易挂掉,本来你就是A系统调用BCD三个系统的接口就好了,人ABCD四个系统好好的,没啥问题,你偏加个MQ进来,万一MQ挂了咋整?MQ挂了,整套系统崩溃了,你不就完了么。系统复杂性提高:硬生生加个MQ进来,你怎么保证消息没有重复消费?怎...
2019-05-27 18:21:48
4150
原创 【成神之路】Netty相关面试题
为什么选择 Netty使用JDK自带的NIO需要了解太多的概念,编程复杂,一不小心bug横飞Netty底层IO模型随意切换,而这一切只需要做微小的改动,改改参数,Netty可以直接从NIO模型变身为IO模型Netty自带的拆包解包,异常检测等机制让你从NIO的繁重细节中脱离出来,让你只需要关心业务逻辑Netty解决了JDK的很多包括空轮询在内的bugNetty底层对线程,selecto...
2019-05-21 11:32:38
3780
原创 [Netty]LengthFieldBasedFrameDecoder
作者:简书闪电侠链接:https://www.jianshu.com/p/a0a51fd79f62拆包的原理关于拆包原理的上一篇博文 netty源码分析之拆包器的奥秘 中已详细阐述,这里简单总结下:netty的拆包过程和自己写手工拆包并没有什么不同,都是将字节累加到一个容器里面,判断当前累加的字节数据是否达到了一个包的大小,达到一个包大小就拆开,进而传递到上层业务解码handler之...
2019-05-21 10:03:55
1058
原创 [Netty]拆包器的奥秘
作者:简书闪电侠链接:https://www.jianshu.com/p/dc26e944da95为什么要粘包拆包为什么要粘包首先你得了解一下TCP/IP协议,在用户数据量非常小的情况下,极端情况下,一个字节,该TCP数据包的有效载荷非常低,传递100字节的数据,需要100次TCP传送,100次ACK,在应用及时性要求不高的情况下,将这100个有效数据拼接成一个数据包,那会缩短到一个...
2019-05-21 10:02:53
454
原创 [Netty]writeAndFlush全解析
作者:简书闪电侠链接:https://www.jianshu.com/p/feaeaab2ce56前言在前面的文章中,我们已经详细阐述了事件和异常传播在netty中的实现,(netty源码分析之pipeline(一),netty源码分析之pipeline(二)),其中有一类事件我们在实际编码中用得最多,那就是 write或者writeAndFlush,也就是我们今天的主要内容主要内容...
2019-05-21 10:01:24
13805
原创 [Netty]pipeline(二)
作者:简书闪电侠链接:https://www.jianshu.com/p/087b7e9a27a2前言netty源码分析之pipeline(一)中,我们已经了解了pipeline在netty中所处的角色,像是一条流水线,控制着字节流的读写,本文,我们在这个基础上继续深挖pipeline在事件传播,异常传播等方面的细节主要内容接下来,本文分以下几个部分进行netty中的Unsa...
2019-05-21 09:59:20
703
原创 [Netty]pipeline(一)
作者:简书闪电侠链接:https://www.jianshu.com/p/6efa9c5fa702通过前面的源码系列文章中的netty reactor线程三部曲,我们已经知道,netty的reactor线程就像是一个发动机,驱动着整个netty框架的运行,而服务端的绑定和新连接的建立正是发动机的导火线,将发动机点燃netty在服务端端口绑定和新连接建立的过程中会建立相应的channe...
2019-05-21 09:57:58
1272
原创 【成神之路】Http网络相关面试题
OSI七层模型分别对应着五层模型的哪一部分;OSI七层模型,每层都说下自己的理解和知道的,说的越多越好;网络模型的分层、IP和Mac地址在那个层、TCP和HTTP分别在那个层;应用层:HTTP、FTP、TELNET等传输层:UDP,TCP网络层:IP(32位),ICMP数据链路层:ARP,RARP,MAC(48位)从游览器中输入URL到页面加载的发生了什么?可参考《...
2019-05-15 10:10:36
2046
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人