![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA
文章平均质量分 73
低调的杉菜
这个作者很懒,什么都没留下…
展开
-
CompletableFuture 使用详解
1、 runAsync 和 supplyAsync方法CompletableFuture 提供了四个静态方法来创建一个异步操作。public static CompletableFuture<Void> runAsync(Runnable runnable)public static CompletableFuture<Void> runAsync(Runnab...转载 2019-08-13 14:35:50 · 197 阅读 · 0 评论 -
java性能调优及问题追踪--Btrace的使用
在生产环境中经常遇到格式各样的问题,如OOM或者莫名其妙的进程死掉。一般情况下是通过修改程序,添加打印日志;然后重新发布程序来完成。然而,这不仅麻烦,而且带来很多不可控的因素。有没有一种方式,在不修改原有运行程序的情况下获取运行时的数据信息呢?如方法参数、返回值、全局变量、堆栈信息等。Btrace就是这样一个工具,它可以在不修改原有代码的情况下动态地追踪java运行程序,通过hotswap技术,动...原创 2019-07-31 17:37:13 · 127 阅读 · 0 评论 -
JConsole/JvisualVM 远程连接
Ubuntu 16.04 运行了一个Java进程,其运行的参数如下:java -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false 进程名于是,我直接在Windows下运行Jvisu...转载 2019-06-20 15:45:28 · 306 阅读 · 0 评论 -
ThreadLocal详解
ThreadLocal是什么ThreadLocal是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不通的变量值完成操作的场景。从数据结构入手下图为ThreadLocal的内部结构图ThreadLocal结构内部从上面的结构图,我们已经窥见ThreadLo...原创 2019-08-14 17:46:42 · 69 阅读 · 0 评论 -
jmap -histo pid 输出的[C [B [I [S methodKlass constantPoolKlass含义
JMAP 输出[hadoop@DEV logs]$ jmap -histo 24527 | head -30num #instances #bytes class name---------------------------------------------- 1: 31939 98883072 [C 2:...转载 2019-06-20 10:19:50 · 716 阅读 · 0 评论 -
java8 stream接口终端操作 count,anyMatch,allMatch,noneMatch
<p>对于中间操作和终端操作的定义,请看<a href="https://blog.csdn.net/qq_28410283/article/details/80634725" rel="nofollow" data-token="86e8956c2bcb3c3cc7a3033c6ce4dc52"&g...原创 2019-08-12 17:39:21 · 3512 阅读 · 0 评论 -
Google Guava官方教程(中文版)
引言Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/O 等等。 所有这些...转载 2019-08-27 15:46:39 · 2617 阅读 · 0 评论 -
JAVA 8 特性
前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级。在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java 8 – Lambdas and Concurrency、Java 8 Date Time API Tutorial : LocalDateTime和Abstract Class Versus Inte...转载 2019-03-01 11:10:48 · 110 阅读 · 0 评论 -
CMS GC日志分析
JVM调优——之CMS GC日志分析 最近在学习JVM和GC调优,今天总结下CMS的一些特点和要点,让我们先简单的看下整个堆年轻代和年老代的垃圾收集器组合(以下配合java8完美支持,其他版本可能稍有不同),其中标红线的则是我们今天要着重讲的内容:垃圾回收器的可用组合:ParNew and CMS"Concurrent Mark and Sweep" 是...转载 2019-05-23 12:13:11 · 700 阅读 · 0 评论 -
server 配置
#Server配置server: port: 8080 address: 127.0.0.1 contextPath: /haha #项目根路径 max-http-header-size: 0 #HTTP消息头的最大字节数 max-http-post-size: 0 #HTTP内容的最大字节数 server-header: servlet-path: #主...原创 2019-04-18 09:28:59 · 431 阅读 · 0 评论 -
强大的 actuator 服务监控与管理
1. Endpoints 1.1. 内置Endpoints 2. 导入依赖 3. 属性配置 4. 自定义 - 重点 4.1. 默认装配 HealthIndicators 4.2. 健康端点(第一种方式) 4.3. 健康端点(第二种方式) 4.4. 定义自己的端点 4.5. 主函数 4.6. 测试 5. 总结 6. 说点什么SpringBoot 是为了简...转载 2019-03-04 20:23:08 · 466 阅读 · 0 评论 -
MySQL Explain详解
在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略...转载 2019-03-05 15:12:11 · 80 阅读 · 0 评论 -
深入解读springmvc--1,摸清DispatcherServlet
一,前言很惭愧最近没更新博客,闲的慌废寝忘食地看了几本小说,还好一周时间就看吐了,上周空闲之余粗略看了下Spring MVC的源码,先把上周的一些思路整理一下,走一下springmvc的流程。打算写一个springmvc系列的博客,从源码解读,到自己实现一个处理请求,生成视图和模型并且可以进行视图的解析的A货MVC框架。DispatcherServlet是整个SpringMvc框架的核心,...转载 2019-02-25 17:33:20 · 159 阅读 · 0 评论 -
深入解读springmvc--2,处理Http请求以及自定义一个DispatcherServlet
一,一个Http请求进入SpringMVC的完整流程:首先看下动态请求的处理:(静态资源请求的处理其实比较简单,只是以流的方式把静态资源写入response中而已)在Servlet容器中,一个请求的完整流程是:1.Servlet容器调用Servlet.service()2.HttpServlet.service()分发get,post等3.FrameworkServlet....转载 2019-02-25 17:31:09 · 769 阅读 · 0 评论 -
jvm的GC分代收集算法及jvm配置说明
官方文献https://docs.oracle.com/javase/8/https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/https://docs.oracle.com/javase/specs/index.html 摘要当前商业虚拟机的垃圾收集都采用“分代收集”(Generational...转载 2019-02-14 15:25:57 · 647 阅读 · 1 评论 -
promotion failed和concurrent mode failure
CMS并行GC收集器是大多数JAVA服务应用的最佳选择,然而, CMS并不是完美的,在使用CMS的过程中会产生2个最让人头痛的问题:promotion failed该问题是在进行Minor GC时,Survivor Space放不下,对象只能放入老年代,而此时老年代也放不下造成的。(promotion failed时老年代CMS还没有机会进行回收,又放不下转移到老年代的对象,因此会出现下一...转载 2019-02-14 14:16:16 · 3404 阅读 · 1 评论 -
JAVA常用工具
这个是复制自以下博客:http://www.blogjava.net/killme2008/archive/2012/04/17/374936.html自己加了一部分一、编码工具1.IDE:IDEA,熟悉尽可能多的快捷键2.插件: (1) Findbugs,在release之前进行一次静态代码检查是必须的(2) Clover,关心你的单元测试覆盖率(3) Checkstyle ...转载 2019-02-14 14:09:34 · 215 阅读 · 0 评论 -
Tomcat常用配置参数
官方提供的常用配置参数# EMBEDDED SERVER CONFIGURATION (ServerProperties)server.address= # Network address to which the server should bind to. server.compression.enabled=false # If response compression is en...原创 2019-02-15 10:29:42 · 1287 阅读 · 0 评论 -
正则表达式
1. 正则表达式规则1.1 普通字符 字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号,都是"普通字符"。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。 举例1:表达式 "c",在匹配字符串 "abcde" 时,匹配结果是:成功;匹配到的内容是:"c";匹配到的位置是:开始于2,结束于3。(注:下标从0开始还是从1开始,因当前编程语言的不...转载 2019-03-07 18:02:35 · 86 阅读 · 0 评论 -
Netty server端工作原理
server端工作原理如下图:NettyServer整体架构图.pngserver端启动时绑定本地某个端口,将自己NioServerSocketChannel注册到某个boss NioEventLoop的selector上。server端包含1个boss NioEventLoopGroup和1个worker NioEventLoopGroup,NioEventLoopGroup...转载 2019-03-20 20:13:07 · 172 阅读 · 0 评论 -
Druid配置
spring: datasource: druid: access-to-underlying-connection-allowed: false #允许访问底层连接 active-connection-stack-trace: #活跃连接堆跟踪 active-connections: #活跃连接列表 aop-patterns: #A...原创 2019-04-18 09:14:03 · 2660 阅读 · 1 评论 -
修改request请求参数
//@WebFilter(filterName = "paramFilter", urlPatterns = "/*")//拦截器拦截所有请求//@Order(100)//括号中的数字越大,在多个拦截器的执行顺序越靠前public class ParamFilter extends OncePerRequestFilter{ @Override protected void...转载 2019-04-17 08:31:59 · 1522 阅读 · 0 评论 -
MySQL EXPLAIN 命令
简介MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化.EXPLAIN 命令用法十分简单, 在 SELECT 语句前加上 Explain 就可以了, 例如:EXPLAIN SELECT * from user_info WHERE id < 300;准备为了接下来方便演示...转载 2019-04-03 20:18:05 · 58 阅读 · 0 评论 -
IDEA重构快捷键
Refactor 重构 Signarture 签名 Extract 提取 Field 属性 Constant 常量 Method 方法 Parameter 参数 Surround 环绕 重命名文件、方法、属性等(Rename):Shift+F6,同时被修改处在其...原创 2019-03-28 20:04:18 · 2185 阅读 · 0 评论 -
Promise模式
Promise模式是一种异步编程模式 。它使得我们可以先开始一个任务的执行,并得到一个用于获取该任务执行结果的凭据对象,而不必等待该任务执行完毕就可以继续执行其他操作。等到我们需要该任务的执行结果时,再调用凭据对象的相关方法来获取。这样就避免了不必要的等待,增加了系统的并发性。这好比我们去小吃店,同时点了鸭血粉丝汤和生煎包。当我们点餐付完款后,我们拿到手的其实只是一张可借以换取相应食品的收银小票(...转载 2019-03-26 18:05:47 · 402 阅读 · 0 评论 -
Future 模式与 Promise 模式
这篇文章主要涉及了以下几个具体的问题:同步,异步,阻塞,非阻塞的关联及区别。 JAVA 中有 callback 调用吗? jdk 包中的 Future 怎么用? Future 模式和 Promise 模式是包含的关系,还是交集的关系,还是没有关系?带着上面这些疑问,来看看我到底要拾遗些啥。浅析同步,异步,阻塞,非阻塞这几个概念一直困扰着我,说实话我现在依旧不能从一个很深的层次去...转载 2019-03-26 17:43:22 · 5282 阅读 · 1 评论 -
JAVA8 写法
访问接口的默认方法Lambda表达式中是无法访问到默认方法的,以下代码将无法编译:复制代码 代码如下:Formula formula = (a) -> sqrt( a * 100);Built-in Functional InterfacesJDK 1.8 API包含了很多内建的函数式接口,在老Java中常用到的比如Comparator或者Runnable接...转载 2019-03-22 17:44:04 · 2400 阅读 · 0 评论 -
RPC线程模型
1. RPC线程模型1.1. BIO线程模型在JDK 1.4推出Java NIO之前,基于Java的所有Socket通信都采用了同步阻塞模式(BIO),这种一请求一应答的通信模型简化了上层的应用开发,但是在性能和可靠性方面却存在着巨大的瓶颈。因此,在很长一段时间里,大型的应用服务器都采用C或者C++语言开发,因为它们可以直接使用操作系统提供的异步I/O或者AIO能力。当并发访问量增大、响应...转载 2019-03-22 11:14:07 · 1253 阅读 · 0 评论 -
springboot中配置tomcat的access log
原文地址:https://www.cnblogs.com/shamo89/p/8134865.html在tomcat的access中打印出请求的情况可以帮助我们分析问题,通常比较关注的有访问IP、线程号、访问url、返回状态码、访问时间、持续时间。在Spring boot中使用了内嵌的tomcat,可以通过server.tomcat.accesslog配置tomcat 的access日志,这...转载 2019-02-15 10:00:11 · 564 阅读 · 0 评论