
JAVA
文章平均质量分 66
Mistra丶
凡心所向,素履以往,生如逆旅,一苇以航。
展开
-
SynchronousQueue的不恰当使用,瞬时过载导致线程池任务被拒绝
瞬时过载导致任务被拒绝。原创 2025-03-26 18:07:34 · 302 阅读 · 0 评论 -
JDK21虚拟线程、OS线程、GO协程性能对比测试
Java虚拟线程(Virtual Threads)是Java的一种轻量级线程实现,于Java 19通过预览功能引入,并在Java 21中正式稳定。它旨在减少多线程编程的复杂性并提高应用程序的并发性能。虚拟线程的目标是提供与传统平台线程(OS线程)一样的语义,但以更低的资源开销运行更多线程。原创 2025-01-26 17:20:40 · 568 阅读 · 0 评论 -
Java常见CodeReview及编码规范
鉴于自己的开发经验,以及常见容易产生bug及性能问题的点做个记录.原创 2023-11-29 17:40:17 · 1409 阅读 · 0 评论 -
基于Nacos自动刷新ThreadPoolExecutor线程池参数
注册Nacos配置监听回调方法即可,基于注解@ConditionalOnClass(value = NacosConfigManager.class)实现自动装配。基于Spring容器启动事件ApplicationStartedEvent @EventListener实现监听注册。做了个注解启动动态线程池开关@EnableDiversityThreadPool,使用时加在启动类即可。业务上为了支撑动态刷新线程池核心参数,所以集成Nacos配置中心实现自动刷新。前提是系统已经集成Nacos相关依赖,比如。原创 2023-05-25 17:12:39 · 311 阅读 · 0 评论 -
计算线程池最佳参数和队列大小
计算线程池最佳参数和队列大小原创 2023-02-28 12:51:27 · 533 阅读 · 0 评论 -
Java调用so动态库方法
在Java里面调用so动态库的方法原创 2022-10-26 13:57:07 · 4711 阅读 · 0 评论 -
Java后端,我的技术栈思维导图
自己整理了一份我自己的技术栈思维导图,有些技术点重点写的比较粗。思维导图下载:链接: https://pan.baidu.com/s/1l8dCGzRcyoExSHa3eCbX1g 密码: dfwd原创 2020-10-30 16:54:25 · 2296 阅读 · 3 评论 -
不得不吹一波!JVM在线诊断利器-Arthas(阿里开源)
JVM诊断工具何其多,今天才发现又一利器 - Arthas!可直接用于生产环境!在这之前很多工具是不能用于生产环境。可以直接看官网文档:Arthas下载压缩包,解压到服务器上https://github.com/alibaba/arthas/releases先启动个官方demojava -jar arthas-demo.jararthas-demo是一个简单的程序,每隔一秒生成一个随机数,再执行质因数分解,并打印出分解结果。然后启动arthasjava -jar arthas-boo原创 2020-08-24 14:32:19 · 900 阅读 · 0 评论 -
JMT - 自研JVM性能监控与调优系统(一)
公司的项目后台实现采用的Java。系统中存在很多后台任务。线程池,队列,缓存也是遍布整个系统。平常测试的时候也因为一些OOM导致程序无法响应请求。还因为某些基础库的问题导致CPU错误,导致程序挂掉。脑子里就冒出个想法,想设计一个基础库,能监控系统中的线程池,队列,缓存的内存使用情况,记录关键方法的执行时间,找出耗时的方法,才能精准的优化,提高系统整体性能。所以我就想设计一个这样的性能监控系统。还要结合微服务的相关服务治理中间件。服务注册,统一配置中心,微服务管理中心等等。实现对系统服务的整体监控。最近原创 2020-05-31 22:07:45 · 974 阅读 · 0 评论 -
Java应用/JVM宕机排查步骤
相信大家都遇到过,自己的Java应用运行一段时间就宕机了或者响应请求特别慢。这时候就需要我们了来找出问题所在了。绝大部分都是代码问题导致的。一、服务宕机如果是服务宕机,发生致命问题导致进程已经死掉了,那么已经访问不了了,通常都是CPU问题引起的,程序一般会自己生成javacore文件,一般生成位置在/root目录或jar包同目录下。JavaCore文件主要保存的是Java应用各线程在某一时刻的运行的位置,即JVM执行到哪一个类、哪一个方法、哪一个行上。找到这个文件,执行命令gdb java <原创 2020-05-24 00:02:30 · 2932 阅读 · 0 评论 -
JVM内存模型及垃圾收集器介绍
一、JVM的内存模型Metaspace:Class、Package、Method、Field、字节码、常量池、符号引用等CCS:32位指针的Class,没开启短指针压缩的话不会有这个。-XX:+UseCompressedClassPointersCodeCache:JIT编译后的本地代码,JNI使用的C代码。开启编译执行才有。-Xint=解释执行。运行时数据区程序计数器PC RegisterJVM支持多线程同时执行,每一个线程都有自己的程序计数器,线程正在执行的方法叫做当前方法,如果是Java原创 2020-05-23 23:11:21 · 421 阅读 · 0 评论 -
JVM调优参数大全及G1GC调优
一、JVM常见参数1、标准参数-verbose:class 打印每个class信息-verbose:gc 打印每次gc信息2、非标参数 -X-Xloggc:filename 设置GC log文件的位置 -Xloggc:log/gc.log-Xms大小 设置堆的初始化大小 -Xmx2048m =-XX:InitialHeapSize-Xmx大小 设置堆的最大大小 -Xms1024m =-XX:MaxHeapSize 一般Xms=Xmx,防止扩容和缩容-Xmn大小 设置年轻代大小(初始化和最大原创 2020-05-23 23:00:04 · 27925 阅读 · 4 评论 -
JVM---jstack分析Java线程CPU占用,线程死锁
本文章主要演示在Windows环境,Linux环境也差不多。一、分析CPU占用飙高首先写一个Java程序,并模拟一个死循环。让CPU使用率飙高。CPU负载过大的话,新的请求就处理不了了,这就是很多程序变慢了甚至不能访问的原因之一。下面是我这里的Controller,启动程序之后,开多个请求访问这个方法。死循环代码就不贴了,自己构造。我这里模拟的一个截取字符串的死循环。/** * 演示...原创 2020-04-19 15:27:58 · 480 阅读 · 0 评论 -
JUC---AbstractQueuedSynchronizer(AQS)解析(JDK13)
java.util.concurrent包系列文章JUC—ThreadLocal源码解析(JDK13)JUC—ThreadPoolExecutor线程池源码解析(JDK13)JUC—各种锁(JDK13)JUC—原子类Atomic*.java源码解析(JDK13)JUC—CAS源码解析(JDK13)JUC—ConcurrentHashMap源码解析(JDK13)JUC—CopyOnWr...原创 2020-04-06 23:23:39 · 616 阅读 · 1 评论 -
JUC---多线程下控制并发流程(JDK13)
一、概览控制并发流程的工具类概览二、CountDownLatch倒数计数器,倒数结束之前,一直处在等待状态,直到计时结束,此线程才能继续工作唯一的构造方法// 传入倒数计数数量public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count <...原创 2020-04-06 17:49:19 · 474 阅读 · 0 评论 -
JUC---并发队列源码解析(JDK13)
一、并发队列先看全家福并发队列又分为阻塞队列与非阻塞队列实现了BlockingQueue的就是阻塞队列,最下层左边5个。队列满的时候放不进去,队列空的时候null都取不出来,会阻塞。最右边2个就是非阻塞队列。以* Deque结尾的是双端队列,头和尾都能添加和删除。双进双出。一般使用*Queue结尾的。Queue只能一段进一端出。二、阻塞并发队列通常,应用于生产者消费者模型。阻...原创 2020-04-06 15:51:01 · 427 阅读 · 0 评论 -
JUC---CopyOnWriteArrayList源码解析(JDK13)
一、CopyOnWrite*系列CopyOnWriteArrayList和CopyOnWriteArraySet也是常用的并发集合类。他们支持并发的读写。线程安全的。不过有它的缺点。本篇就分析下CopyOnWriteArrayList的原理和源码。CopyOnWriteArraySet也是类似的。二 、CopyOnWriteArrayListCopyOnWriteArrayLis...原创 2020-04-06 13:32:22 · 392 阅读 · 0 评论 -
JUC---ConcurrentHashMap源码解析(JDK13)
一、Map家族本篇只分析ConcurrentHashMap的源码。HashMap就简略带过,但是必须先明白了HashMap的相关原理再来了解ConcurrentHashMap更好。Map是我们工作中用到最多的数据结构,key-value形式。看看整个Map家族HashMap,根据键值的hashcode寻找存储位置,查询的时候速度也非常快。线程非安全的。HashTable,在HashMa...原创 2020-04-06 11:46:04 · 390 阅读 · 0 评论 -
JUC---CAS源码解析(JDK13)
本篇介绍什么是CAS。一、什么是CAS?我认为某一个变量在内存的值是A,如果是的话,我就把它设置为B。如果不是的话,就不修改了。典型的乐观锁思想。避免多人同时修改出错。CAS方法有3个参数,内存值V,预期值A,要修改为的值B。仅当V=A时,才将内存值修改为B。否则什么都不做。最后返回现在的V。compareAndSet,compareAndSweap等等。比较并设置,比较并交换。等等操...原创 2020-04-05 19:56:36 · 388 阅读 · 0 评论 -
JUC---原子类Atomic*.java源码解析(JDK13)
一、什么是原子类不可分割性一个操作是不可中断的,在多线程下也可以保证相比于锁,原子变量可以把竞争资源缩小到变量级别,粒度更细。通常情况下比锁的效率更高,但是在高度竞争的情况下性能更低。以AtomicInteger为例,看看它的方法int get();//获取到当前值int getAndSet(int newValue) {//获取到当前值并设置新的值 return U.g...原创 2020-04-05 19:13:15 · 420 阅读 · 0 评论 -
JUC---各种锁(JDK13)
本篇偏概念性,附带部分源码。常用的锁常用的2种加锁方式synchronized和Lock。synchronized的缺点效率低,试图获得锁时不能设定超时,不能中断一个正在试图获得锁的线程不够灵活,加锁和释放的时机单一,每个锁仅有单一的条件(某个对象)无法知道是否成功获取到锁Lock作为synchronized的一种补充,他们都是可重入锁。Lock的主要方法lock():获取...原创 2020-04-05 17:26:45 · 444 阅读 · 0 评论 -
JUC---ThreadPoolExecutor线程池源码解析(JDK13)
线程池的组成线程池管理器 -> thread-pool工作线程(线程池中在运行的线程)-> t0,t1,t2…t9任务队列-> blocking-queue任务接口(task)-> 队列中的task1,task2…Executor 顶层接口,只有一个 execute方法void execute(Runnable command);Executo...原创 2020-04-01 23:18:35 · 383 阅读 · 0 评论 -
JUC---ThreadLocal源码解析(JDK13)
ThreadLocal -> 线程本地变量强调同一个请求内(同一个线程内)不同方法间的共享让某个需要用到的对象在线程间隔离(每个线程都有自己独有自己独立的对象)ThreadLocal的优点达到线程安全不需要加锁提高执行效率 高效利用内存节省开销 避免传参的麻烦Thread、ThreadLocal、ThreadLocalMap三者的关系每个Thread对象中都持有一...原创 2020-03-30 23:08:04 · 309 阅读 · 0 评论 -
采用ConcurrentLinkedQueue实现生产者,消费者模型
生产者,消费者模型在我们实际开发过程中经常用到。就用ConcurrentLinkedQueue来实现个简单的Demo。一、介绍ConcurrentLinkedQueue是单向链表结构的无界并发队列。从JDK1.7开始加入到J.U.C的行列中。使用CAS实现并发安全,元素操作按照 FIFO(first-in-first-out 先入先出) 的顺序。适合“单生产,多消费”的场景。内存一致性遵...原创 2020-02-17 22:22:10 · 1147 阅读 · 0 评论 -
Java服务端对接支付宝支付,付款,退款,查看支付信息
史上最简单Java服务端对接支付宝支付教程,前端为APP。一、支付业务流程官方开发文档:https://docs.open.alipay.com/204/105297/下单时前端请求后台获取支付字符串后台接收到请求支付字符串的请求,先处理自己的业务(生成待支付订单),然后根据支付配置参数生成加密字符串返回给前端前端接收到支付字符串,吊起支付宝支付支付宝支付完成后会主动访问我们配置...原创 2019-08-08 10:33:04 · 3969 阅读 · 1 评论 -
java.lang.NoClassDefFoundError 和 java.lang.ClassNotFoundException 错误分析
在日常Java开发中,我们经常碰到java.lang.NoClassDefFoundError这样的错误,需要花费很多时间去找错误的原因,具体是哪个类不见了?类明明还在,为什么找不到?而且我们很容易把java.lang.NoClassDefFoundError和java.lang.ClassNotfoundException这两个错误搞混,事实上这两个错误是完全不同的。我们往往花费时间去不断尝试一翻译 2017-07-17 16:09:13 · 1188 阅读 · 0 评论 -
Java读取properties文件内容
package com.dongnao.workbench.vipStudent.controller;import java.io.IOException;import java.io.InputStream; import java.util.Properties;/** * @author Michael * @Time 2017年6月8日上午9:46:32 */pub原创 2017-06-08 10:07:53 · 470 阅读 · 0 评论 -
报错The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
完整错误信息:THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOTLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND原创 2017-06-07 15:43:58 · 1468 阅读 · 0 评论 -
JDK开发环境搭建及环境变量配置
生命壹号:http://www.cnblogs.com/smyhvae/文章来源:http://www.cnblogs.com/smyhvae/p/3788534.html1、安装JDK开发环境下载网站:http://www.oracle.com/开始安装JDK:修改安装目录如下:确定之后,单击“下一步”。转载 2017-06-07 15:38:03 · 606 阅读 · 0 评论 -
DBCP连接池配置参数说明(转)
bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close">property name="driverClassName" value="com.mysql.jdbc.Driver"/>property name="url" value="jdbc:mysql:/转载 2017-06-07 15:27:33 · 548 阅读 · 0 评论 -
Java Calendar 类的时间操作
Java Calendar 类时间操作,这也许是创建和管理日历最简单的一个方案,示范代码很简单。演示了获取时间,日期时间的累加和累减,以及比较。原文地址:blog.youkuaiyun.com/joyous/article/details/9630893注意事项:Calendar 的 month 从 0 开始,也就是全年 12 个月由 0 ~ 11 进行转载 2017-06-07 11:43:12 · 414 阅读 · 0 评论 -
Java读取文本文件中文乱码问题(转)
最近遇到一个问题,Java读取文本文件(例如csv文件、txt文件等),遇到中文就变成乱码。读取代码如下:[java] view plain copyList lines=new ArrayList(); BufferedReader br = new BufferedReader(new FileReader(fileName))转载 2017-06-07 11:33:20 · 822 阅读 · 0 评论 -
Java模拟http请求调用远程接口工具类(转)
package ln;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.util.HashMap;import java.util.List;import java.util.转载 2017-06-07 11:00:43 · 2564 阅读 · 0 评论 -
JAVA读取模板,向Linux服务器写入html文件
需求:对不同岗位的员工进行线上考核,然后生成考核文件(以html文件形式保存在服务器)1>一共6个岗位,写好了6个模板,在浏览器预览效果如下(截取一部分):--------------------------------------------------------------------------------------------------------原创 2017-06-06 17:12:35 · 2135 阅读 · 0 评论 -
JAVA反射机制
Java语言允许通过程序化的方式间接的对Class进行操作。当一个类被类装载器加载以后,Java JVM就会自动产生一个Class对象,在JVM中形成一份描述Class结构的元信息对象,通过该元信息对象可以获取Class的结构信息,如构造函数、属性和方法等。并以编程的方式通过这些反射对象对目标类对象进行操作。反射机制就是在程序运行时,对于任意一个类,都能够知道、获取到这个类的所有属性和方法;对于任原创 2017-09-06 17:53:18 · 511 阅读 · 0 评论 -
Java Servlet 工作原理
问题:Servlet是如何工作的?Servlet 如何实例化、共享变量、并进行多线程处理?假设我有一个运行了大量 Servlet 的 web 服务器。通过 Servlet 之间传输信息得到 Servlet 上下文,并设置 session 变量。现在,如果有两名或更多使用者向这个服务发送请求,接下来 session 变量会发生什么变化?究竟是所有用户都是用共同的变量?还是不同的用户使用的变量都不一样?转载 2017-10-18 09:52:46 · 710 阅读 · 0 评论 -
Java生成随机邀请码
Java生成随机10位不重复邀请码 public static void main(String[] args) { for (int i = 0; i &lt; 10; i++) { System.out.println(createShareCode()); } } /** * 生成邀请码 ...原创 2019-02-19 15:53:19 · 2118 阅读 · 0 评论 -
Java8新特性之Lambda表达式解析及其常见用法
Lambda表达式是Java8更新的一大新特性,与同期更新的Stream是此版本的最大亮点。 “这是你从来没有玩过的全新版本” —– 扎扎辉-> 举个栗子 : 创建一个线程//oldThread thread1 = new Thread(new Runnable() { @Override public void run() { System....原创 2018-09-01 17:31:57 · 899 阅读 · 0 评论 -
Java中Object转换为int类型或String类型
一、判断Object的类型下面是截取的一个判断Objec的类型,然后给Excel的单元格设置类型和添加值的操作:obj instanceof 类型Object obj = entityMap.get(j);if (obj instanceof Integer) { cell.setCellType(Cell.CELL_TYPE_NUMERIC); cell.s...原创 2018-04-13 09:35:43 · 4238 阅读 · 0 评论 -
Java中的泛型<T>类与方法
————–> 原文链接 泛型就是变量类型的参数化。在使用泛型前,存入集合中的元素可以是任何类型的,当从集合中取出时,所有的元素都是Object类型,需要进行向下的强制类型转换,转换到特定的类型。而强制类型转换容易引起运行时错误。 泛型类型参数只能被类或接口类型赋值,不能被原生数据类型赋值,原生数据类型需要使用对应的包装类。一、介绍例子一:使用了泛型class Tes...转载 2018-04-12 16:19:17 · 1602 阅读 · 0 评论