
java基础
文章平均质量分 73
小吴先森
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
通俗易懂的双亲委派机制
双亲委派机制转载 2022-07-09 11:26:13 · 400 阅读 · 0 评论 -
kafka使用教程、快速上手
kafka使用教程转载 2022-06-14 09:06:57 · 1078 阅读 · 0 评论 -
Sentinel:万字详解微服务的哨兵机制
Sentinel解读转载 2022-06-14 09:02:54 · 450 阅读 · 0 评论 -
jvm系列(四):jvm调优-命令篇
运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole、大名鼎鼎的VisualVM,IBM的Memory Analyzer等等,但是在生产环境出现问题的时候,一方面工具的使用会有所限制,另一方面喜欢装X的我们,总喜欢在出现问题的时候在终端输入一些命令来解决。所有的工具几乎都是依赖于jdk的接口和底层的这些命令,研究这些命令的使用也让我们更能了解jvm构成和特性。Sun JDK监控和故障处理命令有jps jstat jmap j转载 2022-04-28 14:35:09 · 368 阅读 · 0 评论 -
最详细的JVM&GC讲解
这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的差异也比较大。不过文中一些JVM参数示例都是实际项目里调优的结果,还是经受过实战考验的。目录JVM简介JVM结构 2.1 方法区 2.1.1 常量池 2.1.1.1 Class文件中的常量池 2.1.1.2 运行时常量池 2.1.1.3 常量池的好处 2.1.1.4 基本类型的包装类和常量池 2.2 堆 2.3 Java栈 2.3.1 栈帧 2.3.转载 2022-04-26 21:18:33 · 2821 阅读 · 1 评论 -
聊聊jvm的-XX:MaxDirectMemorySize
序本文主要研究一下jvm的-XX:MaxDirectMemorySize-XX:MaxDirectMemorySize-XX:MaxDirectMemorySize=size用于设置New I/O(java.nio) direct-buffer allocations的最大大小,size的单位可以使用k/K、m/M、g/G;如果没有设置该参数则默认值为0,意味着JVM自己自动给NIO direct-buffer allocations选择最大大小System.initPhase1ja转载 2022-04-26 21:11:23 · 9938 阅读 · 0 评论 -
JVM内存调优 -Xms -Xmx -Xmn -Xss 参数设置
案例-Xms128M: 最小堆的大小, 也就是当你的虚拟机启动后, 就会分配这么大的堆内存给你-Xmx512m: 是指设定程序运行期间最大堆的大小。如果程序运行需要占用更多的内存,超出了这个设置值,就会抛出OutOfMemory异常。-XX:PermSize=64M: JVM初始分配的非堆内存-XX:MaxPermSize=128M:JVM最大允许分配的非堆内存,按需分配-Xss: 是指设定每个线程的堆栈大小。这个就要依据你的程序,看一个线程大约需要占用多少内存,可能会有多少线程同时运.转载 2022-04-26 20:48:45 · 9908 阅读 · 0 评论 -
Kafka和RabbitMQ有哪些区别,各自适合什么场景?
经常有人问我有个 xx 需求,我应该用 Kafka 还是 RabbitMQ ?这个问题很常见,而且很多人对二者的选择也把握不好。所以我决定写篇文章来详细说一下:Kafka 和 RabbitMQ 的区别,适用于什么场景?同时,这个问题在面试中也经常问到。下面我会通过 6 个场景,来对比分析一下 Kafka 和 RabbitMQ 的优劣。一、消息的顺序有这样一个需求:当订单状态变化的时候,把订单状态变化的消息发送给所有关心订单变化的系统。订单会有创建成功、待付款、已支付、已发转载 2022-04-21 13:44:12 · 501 阅读 · 0 评论 -
java应用源码解析
Caffeine基础:《Caffeine入门使用》->《Caffeine基础源码解析》->《Caffeine 驱逐算法》原创 2022-04-21 13:31:20 · 473 阅读 · 0 评论 -
Caffeine教程
如果是想直接看官网教程的请移步:https://github.com/ben-manes/...而如果还想结合实际应用场景,以及各种坑的,请看本文。最近来了一个实习生小张,看了我在公司项目中使用的缓存框架Caffeine,三天两头跑来找我取经,说是要把Caffeine吃透,为此无奈的也只能一个个细心解答了。后来这件事情被总监直到了,说是后面还有新人,让我将相关问题和细节汇总成一份教程,权当共享好了,该份教程也算是全网第一份,结合了目前我司游戏中业务场景的应用和思考,以及踩过的坑。实习生小张:转载 2022-02-09 20:31:50 · 1998 阅读 · 0 评论 -
深入理解JavaVM与JNIEnv
遇到的问题,Native层本地多线程回调Java函数时env->findClass()失败。前面的代码是这样的在 JNI_OnLoad记录全局变量g_vm static JavaVM* g_vm = NULL; 1 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) 2 3 { 4 5 JNIEnv * env = NULL; 6 7 if (g_vm == NULL) 8 {转载 2021-09-22 10:27:55 · 1114 阅读 · 0 评论 -
Syschronized的底层实现原理以及各种锁的理解
java中每个对象都可作为锁,锁有四种级别,按照量级从轻到重分为:无锁、偏向锁、轻量级锁、重量级锁。每个对象一开始都是无锁的,随着线程间争夺锁,越激烈,锁的级别越高,并且锁只能升级不能降级。java对象头 锁的实现机制与java对象头息息相关,锁的所有信息,都记录在java的对象头中。用2字(32位JVM中1字=32bit=4baye)存储对象头,如果是数组类型使用3字存储(还需存储数组长度)。对象头中记录了hash值、GC年龄、锁的状态、线程拥有者、类元数据的指针。Syschron..转载 2021-09-11 13:33:27 · 922 阅读 · 0 评论 -
synchronized 和Lock区别
0、synchronized实现原理Java中每一个对象都可以作为锁,这是synchronized实现同步的基础:普通同步方法,锁是当前实例对象 静态同步方法,锁是当前类的class对象 同步方法块,锁是括号里面的对象 当一个线程访问同步代码块时,它首先是需要得到锁,当退出或者抛出异常时必须要释放锁,那么它是如何来实现这个机制的呢?我们先看一段简单的代码:package cn.alibab.javap;public class SynchronizedTest { publi转载 2021-09-09 13:42:04 · 399 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volatile关键字的实现原理,最后给出了几个使用volatil原创 2021-09-09 11:31:11 · 82 阅读 · 0 评论 -
HttpClient连接池
推荐Springboot集成http连接池 https://blog.youkuaiyun.com/hellozpc/article/details/106861972 常用的http客户端有JDK原生的URLConnection、Netty的异步HTTP Client、Spring的RestTemplate、Spring Cloud中的Feign。 虽然RestTemplate、Feign使用极其方便,但是屏蔽了太多底层细节,不利于全局把控。 本文主要记载一下基于Apache HttpClient转载 2021-08-20 17:09:32 · 3866 阅读 · 0 评论 -
Java压缩算法性能比较
前言游戏开发中,经常在玩家进入游戏的时候进行必要的信息初始化,往往这个初始化信息数据包是相对来说还是比较大的,一般在30-40kb左右,还是有必要进行压缩一下再发送消息,刚好前段时间看过,里面列举了一些常用的压缩算法,如下图所示:是否可切分表示是否可以搜索数据流的任意位置并进一步往下读取数据,这项功能在Hadoop的MapReduce中尤其适合。下面对这几种压缩格式进行简单的介绍,并进行压力测试,进行性能比较DEFLATEDEFLATE是同时使用了LZ77算法与哈夫曼编码(Huffma转载 2021-05-28 10:45:52 · 432 阅读 · 0 评论 -
HashSet介绍
HashSet 简介HashSet 是一个没有重复元素的集合。它是由HashMap实现的,不保证元素的顺序,而且HashSet允许使用 null 元素。HashSet是非同步的。如果多个线程同时访问一个哈希 set,而其中至少一个线程修改了该 set,那么它必须 保持外部同步。这通常是通过对自然封装该 set 的对象执行同步操作来完成的。如果不存在这样的对象,则应该使用 Collections.synchronizedSet 方法来“包装” set。最好在创建时完成这一操作,以防止对该 set转载 2021-03-24 22:56:01 · 25431 阅读 · 1 评论 -
【Java必修课】ArrayList与HashSet的contains方法性能比较(JMH性能测试)
1 简介在日常开发中,ArrayList和HashSet都是Java中很常用的集合类。ArrayList是List接口最常用的实现类; HashSet则是保存唯一元素Set的实现。本文主要对两者共有的方法contains()做一个简单的讨论,主要是性能上的对比,并用JMH(ava Microbenchmark Harness)进行测试比较。2 先看JMH测试结果我们使用一个由OpenJDK/Oracle里面开发了Java编译器的大牛们所开发的Micro Benchmark Fram.转载 2021-03-24 22:54:27 · 1062 阅读 · 0 评论 -
HttpClient 4.3连接池参数配置及源码解读
目前所在公司使用HttpClient 4.3.3版本发送Rest请求,调用接口。最近出现了调用查询接口服务慢的生产问题,在排查整个调用链可能存在的问题时(从客户端发起Http请求->ESB->服务端处理请求,查询数据并返回),发现原本的HttpClient连接池中的一些参数配置可能存在问题,如defaultMaxPerRoute、一些timeout时间的设置等,虽不能确定是由于此连接池导致接口查询慢,但确实存在可优化的地方,故花时间做一些研究。本文主要涉及HttpClient连接池、请求的参数配转载 2020-12-28 10:06:30 · 1088 阅读 · 0 评论 -
Java解析XML(4种方法)
解析xml四种方式:DOM,SAX,DOM4J,JDOMxml文件<?xml version="1.0" encoding="utf-8" ?><class> <student> <firstname>cxx1</firstname> <lastname>Bob1</lastname> <nickname>stars1</nickname&原创 2020-10-22 22:06:07 · 4639 阅读 · 0 评论 -
java集合遍历的几种方式总结及比较
集合类的通用遍历方式, 用迭代器迭代:Iterator it = list.iterator();while(it.hasNext()) { Object obj = it.next();}Map遍历方式:1、通过获取所有的key按照key来遍历//Set<Integer> set = map.keySet(); //得到所有key的集合for (Integer in : map.keySet()) { String str = map.ge..转载 2020-10-22 22:01:34 · 231 阅读 · 0 评论 -
Springboot2 RestTemplate设置超时时间
Spring boot 版本>=2.0@Configurationpublic class BeanConfig { @Bean public RestTemplate restTemplate() { SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); requestFactory.setConnectTimeout(500转载 2020-10-22 22:00:13 · 2194 阅读 · 0 评论 -
Java使用GZIP进行压缩和解压缩(GZIPOutputStream,GZIPInputStream)
使用GZIPOutputStream进行GZIP压缩: public static byte[] compress(String str, String encoding) { if (str == null || str.length() == 0) { return null; } ByteArrayOutputStream out = new ByteArrayOutputStream(); GZIPOutputStream gz..转载 2020-10-13 15:08:13 · 3400 阅读 · 0 评论 -
@Component, @Repository, @Service的区别
@Component, @Repository, @Service的区别官网引用引用spring的官方文档中的一段描述:在Spring2.0之前的版本中,@Repository注解可以标记在任何的类上,用来表明该类是用来执行与数据库相关的操作(即dao对象),并支持自动处理数据库操作产生的异常在Spring2.5版本中,引入了更多的Spring类注解:@Component,@Service,@Controller。@Component是一个通用的Spring容器管理的单例bean组件。而@R转载 2020-10-09 13:18:42 · 178 阅读 · 0 评论 -
lombok离线安装
用idea自带的软件中心下载lombok插件失败,可以采用离线安装的方式。下载插件包插件包可以在两个地方下载,分别是IDEA的官方插件仓库和GitHub里lombok-intellij-plugin仓库中的release包。地址分别是:http://plugins.jetbrains.com/plugin/6317-lombok-plugin,网址打开后可以看到各个版本信息:或者是https://github.com/mplushnikov/lombok-intellij-plugin/原创 2020-05-11 22:07:27 · 742 阅读 · 0 评论 -
注解之 @RestController 和 @RequestMapping
Controller 是 Spring 中最基本的组件,主要处理用户交互,一般每个业务逻辑都会有一个 Controller,供用户请求接口进行数据访问;@RequestMapping 注解用于绑定URI到具体处理器。二者相辅相成,共同完成前后端数据交互。一、简介 本文软件环境:IntelliJ IDEA version:2018.3Spring Boot version: 2.1.4.RELEASE;Java version:1.8。 Controller ...转载 2020-05-11 16:35:34 · 5458 阅读 · 0 评论