- 博客(26)
- 收藏
- 关注
原创 JVM篇<十>调优
一、调优的概述1.1调优的目的防止出现OOM,进行JVM规划和预调优解决程序运行中各种QOM减少Full GC出现的频率,解决运行慢、卡顿问题二、堆溢出原因:1、代码中可能存在大对象分配2、可能存在内存泄漏,导致在多次GC之后,还是无法找到一块足够大的内存容纳当前对象。解决方法:1、检查是否存在大对象的分配,最有可能的是大数组分配2、通过jmap命令,把堆内存dump下来,使用MAT等工具分析一下,检查是否存在内存泄漏的问题3、如果没有找到明显的内存泄漏,使用-Xmx加大堆内存
2022-03-02 13:25:30 1241 2
原创 Nacos1.4.2源码<二>服务端配置
一、配置储存从整体上Nacos服务端的配置存储分为三层:内存:Nacos每个节点都在内存里缓存了配置,但是只包含配置的md5(缓存配置文件太多了),所以内存级别的配置只能用于比较配置是否发生了变更,只用于客户端长轮询配置等场景。文件系统:文件系统配置来源于数据库写入的配置。如果是集群启动或mysql单机启动,服务端会以本地文件系统的配置响应客户端查询。数据库:所有写数据都会先写入数据库。只有当以derby数据源(-DembeddedStorage=true)单机(-Dnacos.standalon
2021-12-28 22:46:25 897
原创 Nacos1.4.2源码<一>客户端配置
一、获取配置NacosConfigServiceprivate String getConfigInner(String tenant, String dataId, String group, long timeoutMs) throws NacosException { group = this.blank2defaultGroup(group); ParamUtils.checkKeyParam(dataId, group); ConfigRespo
2021-12-27 22:07:41 633
原创 JVM<七> ThredLocal
一、ThredLocal作用每一个线程都有自己专属的本地变量副本,主要解决了让每个线程绑定自己的值,通过使用get()和set()方法,获取默认值或将其值更改为当前线程所存的副本的值从而避免了线程安全问题。二、源码分析2.1ThredLocal中get方法 public T get() { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null
2021-12-22 00:17:06 215
原创 MySQL存储引擎之InnoDB
一.MySQL组成部分插件式存储引擎连接池组件管理服务和工具组件SQL接口组件查询分析器组件优化器组件缓冲(Cache)组件物理文件1.1mysql的连接方式在windows的窗口下发送TCP/IP连接请求mysql -h127.0.0.1 -u root -p二.InnDB存储引擎查看inindb版本SHOW VARIABLES LIKE 'innodb_version';查看innodb信息SHOW ENGINE INNODB STATUS\G;2.1I
2021-12-14 11:26:57 619
原创 分布式锁之redis
一、redis实现分布式锁问题一:释放了不是自己加的锁1.客户 1 获取锁成功并设置设置 30 秒超时;2.客户 1 因为一些原因导致执行很慢(网络问题、发生 FullGC……),过了 30 秒依然没执行完,但是锁过期「自动释放了」;3.客户 2 申请加锁成功;4.客户 1 执行完成,执行 DEL 释放锁指令,这个时候就把客户 2 的锁给释放了。解决:在加锁的时候设置一个「唯一标识」作为 value 代表加锁的客户端。SET resource_name random_value NX PX
2021-12-13 16:06:14 1862
原创 jvm概述
一、JVM架构二、字节码文件2.1前端编译器前端编译器的主要任务就是负责将符合Java语法规范的Java代码转换为符合JVM探范的字节码文件。javac编译器在将Java源码编译为一个有效的字节码文件过程中经历了4个步骤,分别是词法解析、语法解析、语义解析以及生成字节码。2.1.1 javac(IDEA默认使用的)javac是一种能够将Java源码编译为字节码的前端编译器2.1.2 ECJ编译器在Java的前端编译器领域,除了javac之外,还有一种被大家经常用到的前端编译器,那就是
2021-12-12 23:32:41 673
原创 juc之CAS
一、CASCAS有3个操作数,位置内存值N,旧的预期值A,要修改的更新值B,当且仅当旧的预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做或重来 private static final long valueOffset; static { try { valueOffset = unsafe.objectFieldOffset (AtomicInteger.class.getDeclaredField("v
2021-12-12 17:42:31 765
原创 java面试题收集
1.String str=“haha”,这个字符串对象在栈内存中明明有一个引用(str[ox00014]),为什么说这个字符串是匿名对象呢?所谓的字符串是匿名对象,实际上是因为只要使用了“’’”声明,那么就表示将在堆内存空间里面开辟一个新的字符串对象(String对象),这个对象是可以直接使用的,例如:““haha”.length()”。“haha”这个时候还没有被引用,称为称为匿名对象,如果此时的“String str=“haha””,已经明确的为str对象进行实例化,所以“hello”对应的堆内存的地
2021-12-10 15:17:07 209
原创 JUC知识点
一.线程中断标记1.interrupt实例方法interrupt()仅仅是设置线程的中断状态为true,不会停止线程1.如果线程处于正常活动状态,那么会将该线程的中断标志设置为 true。被设置中断标志的线程将继续正常运行,不受影响。所以,interrupt()并不能真正的中断线程,需要被调用的线程自己进行配合才行。2.如果线程处于被阻塞状态(例如处于sleep, wait,join等状态),在别的线程中调用当前线程对象的interrupt方法,那么线程将立即退出被阻塞状态,并抛出一个Inte
2021-12-09 23:43:39 1212
原创 Nacos源码2.03二、服务注册
#spring容器完成之后会发布事件,当前这个接口实现了服务注册接口AbstractAutoServiceRegistrationpublic class NacosServiceRegistry implements ServiceRegistry<Registration> { private static final Logger log = LoggerFactory.getLogger(NacosServiceRegistry.class); private fina
2021-12-05 20:32:31 372
原创 java方法以及框架总结
一.Nacos字符串null转换为""this.logName = Objects.toString(this.logName, "");1.1#获取ip信息commons.util工具类InetUtils inetUtils;this.ip = this.inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();#网络接口名在大多数操作系统上(包括Windows、Linux和Unix)是以eth开头,后面是网络接口的索引号,从0
2021-12-05 18:43:22 622
原创 SpringBoot注解
一.@ConditionalOnProperty的作用和用法@Retention(RetentionPolicy.RUNTIME)@Target({ ElementType.TYPE, ElementType.METHOD })@Documented@Conditional(OnPropertyCondition.class)public @interface ConditionalOnProperty { /** * 数组,获取对应property名称的值,与name不可同时使用。
2021-12-04 16:33:15 198
原创 Ideal快捷键的记录
https://www.jianshu.com/p/6d752d85cd35查找接口的实现类:ctrl + alt +B查看类或接口的继承关系:ctrl + h
2021-12-04 16:28:50 112
原创 Nacos源码2.0.3一、源码环境搭建以及启动
一. Nacos服务注册进行服务注册NamingProxy 366行 使用了故障转移的算法 大致思路:如果有5个注册中心,那么会随机取一个服务请求注册如果注册成功直接返回,如果注册失败就会尝试下一个,如果所有的都注册失败则直接抛出异常疑问:只在一个上注册,那么其他服务是怎么知道到这个服务注册的呢? 猜测应该是用了定时任务拉取后做的同步数据 public String reqAPI(String api, Map<String, String> params, List<St
2021-11-28 20:34:30 1675
原创 jdk源码之ReenTrantLock
一.非公平锁非公平锁会导致锁饥饿现象final boolean nonfairTryAcquire(int acquires) { final Thread current = Thread.currentThread(); int c = getState(); if (c == 0) { if (compareAndSetState(0, acquires)) {
2021-11-28 19:29:14 237
原创 Synchronized源码解读
一.java反编译工具1.1 jdk自带的反编译工具在target包中找到需要反编译的类右击打开控制台,然后在控制台中输入javap -c -v 类名.class1.2使用ideal插件1.2.1安装插1.2.2 构建项目1.2.3查看字节码文件二.Synchronized源码查看2.1 Synchronized如何加锁的2.1.1java对象在内存中的布局使用工具查看对象在内存中布局 <dependency> <grou
2021-11-28 15:02:27 601
原创 jdk源码环境及调试
1.搭建jdk源码环境1.1找到jdk安装目录1.2.获取jdk下src安装包1.3将src复制到其他目录并解压,然后在ideal中配置原源码路径1.4去除源码保护1.5debug调试源码
2021-11-26 10:44:59 662
原创 linux安装nacos2.0.3
#安装包地址链接:https://pan.baidu.com/s/15v4VpQCR-TNzSmV5iY0qGw 提取码:6655 #解压文件tar -zxvf nacos-server-2.0.3.tar.gz #切换到bin目录下cd ../bin/#单节点启动./startup.sh -m standalone
2021-11-25 13:51:36 1725
原创 linux相关命令
#开放6379端口iptables -I INPUT -p tcp --dport 6379 -j ACCEPT #查看日志 tail -f +日志文件名称 less +日志文件名称 #改变文件格式 set tt=unix
2021-11-24 19:38:40 477
原创 linux在线安装jdk1.8
#在线下载jdk1.8wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz#如果提示没有wget 需要安装yum -y ins
2021-11-24 19:33:13 894
原创 Linux相关命令
1.查询已经对外开放的端口netstat -anp2.查询指定端口是否已经开放firewall-cmd --query-port=8848/tcp
2021-11-24 15:01:57 268
原创 docker安装redis以及集群
#下载redis-6.0.5wget http://download.redis.io/releases/redis-6.0.5.tar.gz#解压安装包tar xf redis-6.0.5.tar.gz#升级gcc yum -y install centos-release-scl devtoolset-7 yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils#切换gcc7 scl ena
2021-11-24 10:47:29 801
原创 docker安装mysql
#拉取mysql镜像docker pull mysql:5.7# 创建mysql镜像映射的数据库目录mkdir /usr/local/server/mysql/data#创建mysql镜像映射的数据库配置文件mkdir /usr/local/server/mysql/conf#创建mysql镜像映射的数据库日志目录mkdir /usr/local/server/mysql/logs#查看mysql镜像iddocker images#启动容器 将8b43c6af2ad0替换成查出来的
2021-11-23 19:59:15 448
原创 docker相关命令
//查看镜像docker images//搜索镜像docker search 镜像名称//拉取镜像docker pull 镜像名称//删除镜像docker rmi 镜像ID//删除所有镜像docker rmi `docker images -q`#查看正在运行的容器docker ps#查询所有容器(正在运行或未运行)docker ps -a#运行容器,交互式方式docker run -it --name=容器名称 镜像名称:标签 /bin/bash#创建容器,守护式方式
2021-11-23 19:38:10 347
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人