java
文章平均质量分 80
择维士
专注技术分享
展开
-
Spring AOP aspect切面指北
spring aspect切面基础写法和示例原创 2022-12-02 17:03:55 · 464 阅读 · 0 评论 -
如何使用JSONPath
介绍JSONPath的语法和使用原创 2022-07-21 19:54:49 · 867 阅读 · 0 评论 -
我是如何使用quarkus优化jvm性能的
背景公司在重度使用aws的ECS 功能。 ECS 简单来说就是亚马逊版本的docker服务。最近aws默认的cloudwatch free-tier已经超过限制了。 所以就想自己搭建日志平台。大致平台如下:因为公司的使用了各种语言python nodejs java和各种开源软件服务比如airflow而我们需要解决的就是:对各种服务的日志如何快速统一的收集到我们的平台之中。调查发现后, aws实际上提供了一个服务:aws firelens 可以用于快速的将日志转发到其他地方, 比如splunk。原创 2021-08-24 21:09:25 · 487 阅读 · 0 评论 -
小而美的java webserver框架--Javalin
javalin 是一个非常简单易用的web框架, 官网https://javalin.io/ 对于想快速搭建一个简单地web请求通讯服务器非常方便, 这篇文章就来介绍下:build gradle在build.gradle中引入: compile 'io.javalin:javalin:3.13.5'上手起来非常简单如下:import io.javalin.Javalin;public class HelloWorld { public static void .原创 2021-08-11 14:08:43 · 736 阅读 · 0 评论 -
Docker kafka
工作中经常用到kafka,为了方便需要一个docker版的kafka,有人问为啥不是原生的? 原生的每次要自己手动启动zk和kafka(新版只需要kafka)。那为啥不用k8s的呢?k8s本身比较zhan'y原创 2021-06-16 14:23:21 · 135 阅读 · 0 评论 -
Postgresql JDBC的 OOM问题
Abstract最近在用亚马逊的postgre rds做数据处理的过程中 发现同步某些数据时竟然会OOM.代码出问题的代码:(使用的是springboot的jdbctemplate) @Override public <T> List<T> getList(String sql, RowMapper<T> rowMapper, Object... args) { return this.jdbcTemplate.query(sql,原创 2021-05-19 21:57:03 · 536 阅读 · 2 评论 -
[Spring]用100行代码来模拟解决Spring的循环依赖问题
Abstract好久没写文章了, 最近喜欢上了springboot, 也发现这个开发起来确实很方便和快捷。 包括spring kafka, jdbc, & actuator. 一天, 比较惊讶于spring如何优雅的解决循环依赖的问题的, 因为自己代码有时候也没注意, @Autowired 到处都是, 但是发现spring竟然可以正常工作,于是好奇的想了解下其实现。 所以就有了这个文章。Spring如何解决循环依赖的?官方文档:hereCircular dependenciesIf原创 2021-02-02 22:12:52 · 228 阅读 · 0 评论 -
JMC在macos无法运行以及hprof无法运行
问题现在线上有个方法很慢, 做的是导出文件的操作…现在想知道到底是代码中的哪个部分太慢了?hprof在jdk7的时候有这个工具: https://docs.oracle.com/javase/7/docs/technotes/samples/hprof.html可以采用如下方式进行spring boot类应用的调试:-agentlib:hprof=cpu=times但是在jdk8运行失败了:Exception in thread "main" java.lang.NoClassDefFound原创 2020-05-18 18:13:23 · 740 阅读 · 0 评论 -
Lombok入坑指南
常见的一些注解@Builder -- 生成链式方法@Cleanup -- 自动close closeable对象... 带有继承的entity如果lombok要支持继承的话, 要注意:(1)使用@SuperBuilder时, 整个链路上都要有该注解.(2)@SuperBuilder 配合lombok.accessors.prefix += _ 会有bug. 需要更新版本(我用的最新版1.18.12 fix了该问题)报错:error: cannot find symbol@Super原创 2020-05-18 12:50:57 · 1708 阅读 · 2 评论 -
Java拾遗03- 各个时期的HashMap和ConcurrentHashMap
引子最近在看小灰灰算法.里面有一节讲到散列表相关的比较有意思. 本文记录散列表相关, 以及JDK中的hashmap concurrenthashmap 是如何优化的.书中所说解决散列表冲突时候的2种办法:开放寻址法如下图, 我们想放入Entry6 (hash后需要放的位置是3)但是位置3上面已经有Entry5, 那么我们会**向数组后面接着找下一个有空的位置**. 这就是开放寻址...原创 2019-12-27 22:16:12 · 166 阅读 · 0 评论 -
Java拾遗系列目录
Abstract关于java相关的一些小细节的文章记录列表文章列表hashmap如何导致死循环volitale和cpu指令原创 2019-12-27 18:26:45 · 129 阅读 · 0 评论 -
真实还原定位java内存OOM步骤
文章目录abstract问题现象头大的分析步骤如何获取内存dump?尝试1尝试2尝试3如何分析内存dump?根本原因学到的参考abstract自己做了很久的java开发了, 很久没有写关于内存泄漏/溢出相关的问题定位了. 本文会描述一个十分曲折的定位过程. 从本文里面可以学到:jdk11的内存dump如何分析大对象如何结合OQL还原真实的问题现场问题现象产品某一台服务器发现...原创 2019-12-26 16:57:09 · 1523 阅读 · 1 评论 -
Java拾遗2 - volatile和内存屏障和cpu指令
某一天看书, 发现AtomicInteger里面有个lazySet方法. 很奇怪 不知道是干啥. 所以就有了这篇文章.lazySet方法源代码: /** * Eventually sets to the given value. * * @param newValue the new value * @since 1.6 */ ...原创 2019-11-28 14:57:52 · 364 阅读 · 0 评论 -
Java拾遗01HashMap
这是一个拾遗系列, 觉得Java中有些比较有意思的点可以拿来记录一下 分享一下.Abstract半年前?, 对于从业Java快5年了,觉得自己已经比较了解HashMap了, 直到有一天去XX公司面试, 被问到(1)HashMap为什么会导致100%? 我回答到因为在扩容过程中可能导致死循环而导致CPU高. 然后又被问到(2)怎么导致的死循环? 额 这个具体就不知道了(3) 然后惊呆的...原创 2019-11-13 23:37:22 · 125 阅读 · 0 评论 -
[翻译]Java Garbage Collection Basics Java 垃圾回收基础 之2 Java 技术与JVM
Java 技术与JVMJAVA概述JAVA是Sun公司在1995年发布的一个编程语言和计算平台.并在工具/游戏/商业应用上大放异彩.Java在超过850 * 百万 的个人电脑, 在10亿级的设备上运行(包括了移动设备和TV).java有一系列关键组件组成,最终构建了Java平台.Java运行时版本当你下载java后,你得到了一个Java运行时环境(Java Runtime Environment,J翻译 2016-04-24 13:59:55 · 775 阅读 · 0 评论 -
Java synchronized 中的while 和 notifyAll
问题1大多数人都知道常见的使用synchronized代码:synchronized (obj) { while (check pass) { wait(); } // do your business}那么问题是为啥这里是while而不是if呢? 这个问题 我最开始也想了很久, 按理来说 已经在synchronized块里面了嘛 就不需要了. 这个原创 2017-05-08 20:31:02 · 1846 阅读 · 4 评论 -
使用JMX来获取CPU利用率和GC 所占用的CPU利用率
这篇博客会介绍如何通过JMX 来获取JAVA 进程占用的CPU利用率和GC所占用的CPU利用率在使用JVisualVM的时候,发现它可以查看当前JAVA 进程占用的CPU利用率和GC 所占用的CPU利用率,很奇怪它是如何计算的或者怎么获取的. 本文会根据JVisualVM的源码来描述JVisualVM是如何计算的.获取源码GITHUB 地址: https://github.com/visualvm原创 2016-10-08 22:23:16 · 7622 阅读 · 0 评论 -
[翻译]Java Garbage Collection Basics Java 垃圾回收基础 目录
这一系列文章来自于原Oracle 上的java垃圾回收基础入门,写的很好 遂翻译了下.原文: http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html#overview译文: 1. 概览 2. Java 技术与JVM 3. 描述垃圾回收 4. 分代的垃圾回收过程 5. 自己动手观翻译 2016-04-24 13:52:58 · 558 阅读 · 0 评论 -
[翻译]Java Garbage Collection Basics Java 垃圾回收基础 之6 Java垃圾回收器
Java垃圾回收器现在你知道垃圾回收的基础知识,也了解了如何在一个示例项目上观察gc过程。本节会介绍java可用的垃圾收集器和如何在命令行启用他们。通用堆相关参数JAVA中有很多命令行开关。这节展示了在本文中常用的开关。 开关 描述 -Xms 设置初始堆大小 -Xmx 设置最大堆大小 -Xmn 设置年轻代大小 -XX:PermSize 设置持久代初始大小 -翻译 2016-04-24 14:55:58 · 654 阅读 · 0 评论 -
[翻译]Java Garbage Collection Basics Java 垃圾回收基础 之7 总结
总结在本文中,关于java jvm的垃圾回收系统有了一个大的了解。首先,你应该了解了为啥垃圾回收器和堆死Java JVM的关键部分。一旦你了解了这个过程,你可以通过Visual VM工具来观察。最后,你了解在HotSpot JVM中可用的垃圾回收器。 在这个初学者指南中,你学会了:Java VM 组成部分自动垃圾回收是如何工作的分代GC的过程如何使用VisualVm监控你的JVMJVM翻译 2016-04-24 14:56:49 · 797 阅读 · 0 评论 -
[翻译]Java Garbage Collection Basics Java 垃圾回收基础 之5 自己动手观察
自己动手观察概览在本节观察GC过程是如何处理的.你会运行一个java应用并通过VisualVM 工具 分析GC过程. (译注:这里更多的图示是根据本地环境重新截图,更多是译者操作,使用jdk 为jdk 1.8.5 64 version)动手操作Step1 初始操作(1)安装jdk并确保java环境变量正确. (2)下载前面的java demos and samples. 百度云下载Step2翻译 2016-04-24 14:54:46 · 613 阅读 · 0 评论 -
[翻译]Java Garbage Collection Basics Java 垃圾回收基础 之4 分代的垃圾回收过程
分代的垃圾回收过程现在我们知道了为什么堆被分为不同代,那么用一点时间来看看这些不同代之间是如何交付的.下面的这些图片描述了在JVM中.对象的分配和变老的过程. 1.任何新创建的对象都在eden区分配,2个survivor都是空的. 2.当eden区满了,会触发一次minor gc 3.此时还被引用的对象会移到第一个Survivor区S0.清除Eden区时,未被引用的对象被删除 4.在下次mi翻译 2016-04-24 14:52:14 · 697 阅读 · 0 评论 -
[翻译]Java Garbage Collection Basics Java 垃圾回收基础 之3 描述垃圾回收
描述垃圾回收什么是自动垃圾回收自动垃圾回收是一个处理过程,包括:观察堆内存,找到哪些对象在使用,哪些没有,并且删除掉没有使用的对象.一个在使用的对象或者被引用的对象,意味这你程序的某个部分依然维系这一个指向该对象的指针.一个没有使用的对象或者未被引用的对象意味这该对象不再被你程序的任何部分引用.所以被这些不再使用的对象占用的内存可以得到回收.在一般的编程语言,比如C,内存的释放和分配都需要手动处理.翻译 2016-04-24 14:47:55 · 807 阅读 · 0 评论 -
JVM OOM & JAVA finalizer 引发的OOM & Thread.stop
背景本文绝对干货. 某天发现客户环境一直有OOM发生,而且是阶梯状的内存增长. 比较郁闷. Abstract这个文章里面会描述以下几件事情: 1. 在java中有OOM应该怎么分析? 2. JAVA finalizer为什么会引发OOM? 3. 为什么不能使用Thread.stopJava中发生OOM应该怎么分析大多数时候Java都做得足够好. 但是没办法还是有可能会有OutOfMemor原创 2017-06-23 18:19:34 · 3795 阅读 · 1 评论 -
关于java中的double check lock
实现一个正确的单例模式在熟悉的单例模式中你或许会遇到下面的方式来实现一个单例:// version 1class Singleton { private static Singleton _INSTANCE static Singleton getInstance() { if (_INSTANCE == null) { _INSTANCE原创 2017-09-07 21:55:17 · 1706 阅读 · 2 评论 -
Spring or hibernate saveOrUpdateAll 偶然失效
最近遇到的一个问题当我们使用hibernatetemplate的saveOrUpdateAll 方法,在数据量达到一定程度时,会必然出现如下的错误:“identifier of an instance altered from X to Y”?这是很奇怪的,问题【1】该方法实现是这个样子的:public void saveOrUpdateAll(final Coll原创 2014-03-29 20:55:39 · 2583 阅读 · 0 评论 -
搞懂ThreadLocal
文章目录什么是ThreadLocalThreadLocal可以做什么?存储一些本身不是线程安全的类记录一些上下文相关的信息实现细节set 方法get方法什么是ThreadLocalJava doc的解释ThreadLocal提供了线程局部可用的变量. 这些变量在每个线程中都维护有自己的独立副本. ThreadLocal类型的变量一般是一个类的静态变量来存储与线程相关的变量 (比如用户ID, ...原创 2019-07-10 14:34:41 · 125 阅读 · 0 评论 -
升级jdk11
最近我们完成了从JDK8到JDK11的升级.我写了一个如何完成这个升级的GIT:https://github.com/gaoxingliang/jdk11TemplateProject这里面也包括如何基于jdk11 构建JRE的脚本. 因为现在默认已经没有JRE 发行版本可以使用了....原创 2019-04-30 16:32:01 · 727 阅读 · 2 评论 -
Java中的BIO,NIO,AIO详解以及Echo实现示例
Abstract在本博客当中我们主要会分为如下几点:Java中的BIO NIO AIO是啥BIO NIO AIO实现的简单Echo client和serverNIO AIO 深入之内部实现NIO AIO的设计模式: Reactor 以及 Proactor本文所有的代码都可以在最后的github找到.IO 的分类BIOBIO 是 blocking io, 在jdk1.0的时候引...原创 2019-02-01 16:03:33 · 2659 阅读 · 0 评论 -
Java cpu 监控 分析
Abstract在这篇文章中我们会综合性的介绍如何监控JVM cpu, thread 级别cpu, 以及如何通过JFR技术来分析JVM的CPU 问题. 如何获取CPU这里我们会先介绍如何在进程内部获取JVM的CPU. 这里我们主要采用JVM 自带的JMX来实现对自己的监控.获取整个系统的JVM cpu可以通过调用mbean中的getProcessCpuTime方法来得到中...原创 2018-12-27 19:15:33 · 5655 阅读 · 0 评论 -
记录一次TCP连接异常问题使用btrace
Abstract在这篇文章中, 记录了如何定位TCP连接异常问题. 主要使用的是BTrace工具(大量使用). 整个过程非常有意思,所以记录下来.Introduction本文主要使用的是BTrace工具,BTrace在诊断JAVA方面的疑难问题还是非常有用的. 它使用的是java里面的javaagent来达到无侵入的动态调查JVM内部问题.以前曾经用BTrace做过线程创建追踪,这...原创 2018-07-17 15:46:05 · 1058 阅读 · 0 评论 -
DNS域名解析为IPv6地址杂集
1. Linux中查询某个域名的ipv6地址:nslookup -query=AAAA betax.cc2. Windows中查询某个域名的ipv6地址:nslookup -q=AAAA betax.cc3. Java/Groovy中根据域名获取IPv6的实现:[1]调用getAll会获取所有的地址:for (InetAddress i : InetAddress.getAllByName("be原创 2018-01-18 16:40:22 · 13078 阅读 · 0 评论 -
SNMP 系列 Blog
主要分为几个大的部分:1. SNMP 协议介绍 2.安装和使用SNMP协议3.Java SNMP4J 使用原创 2018-01-11 16:38:42 · 375 阅读 · 0 评论 -
SNMP系列 1- 协议介绍
SNMP协议介绍snmp, 全称Simple Network Management Protocol. 目前应用非常广泛的协议, 绝大多数都采用UDP协议实现, 多用于网络设备,以及很多IoT设备都提供了对应的SNMP支持. 多用来方便外部采集设备的内部状态比如CPU, 内存啥的.重要概念基础概念SNMP Agent: 可以理解为一个个的设备, 可以有各种各样的原创 2018-01-11 16:37:48 · 820 阅读 · 0 评论 -
[翻译]Java Garbage Collection Basics Java 垃圾回收基础 之1 概览
概览目标本基础教程覆盖HotSpot JVM如何实现GC.主要包括如下内容: (1)了解GC如何工作的. (2)使用VisualVM监控GC过程. (3)了解Java SE 7 Hotspot JVM中的GC 收集器.预估完成时间1小时.简介这个OBE(译注:SRY,不知道啥意思,应该是一个组织的意思???),覆盖Java 中Java虚拟机(JVM) 垃圾回收(Garbage Collecto翻译 2016-04-24 13:55:12 · 467 阅读 · 0 评论 -
Java 引用类型及常见应用
引用的类型主要关注的是该引用如何与GC交互。1.Strong References java中常见的引用类型:StringBuffer buf = new StringBuffer();这里buf就是一个强引用。如果一个对象在一条强引用链上可达,那么它不适合GC,也不会被回收。2.Weak References 弱引用,是一种较弱的引用,它不会阻止GC回收只被弱引用引用的对象。 当一个对象最强原创 2016-05-08 21:56:43 · 719 阅读 · 0 评论 -
如何查看一个java对象的大小
最近一直着迷于缓存行,要想正确理解缓存行以及伪共享就一定要知道java对象的大小,以及如何分布.在这里演示了使用JOL 工具来查看一个对象的大小和分布.JOL (Java Object Layout) is the tiny toolbox to analyze object layout schemes in JVMs. These tools are using Unsafe,原创 2016-02-25 20:11:31 · 11095 阅读 · 0 评论 -
关于java.ext.dirs
[1]当我们运行jar包时,一般可以通过如下的命令:java -cp ".\a.jar;.\b.jar" -jar myjar.jar MainClass (-cp不支持文件夹的方式)。【2】如果需要指定其他依赖lib包的文件夹,可以采用:java -Djava.ext.dirs="mydirectory" -jar myjar.jar MainClass 【3】但是上原创 2015-01-28 22:30:55 · 19246 阅读 · 2 评论 -
关于RMI服务比较有意思的几点
当你使用UnicastRemoteObject.export(Remote)发布一个对象时会触发一次FULL GC。你必须手动管理你发布的Remote对象,意即如果没有别的客户端访问,你发布的对象/服务会被回收,然后你会收到如下的错 “NO SUCH OBJECT IN TABLE.”package test;import static java.u原创 2014-11-29 20:08:18 · 734 阅读 · 0 评论 -
RMI 监听本地端口
如何让RMI端口真正只监听本地端口?127.0.0.1原创 2014-07-30 19:22:09 · 1956 阅读 · 0 评论