Java
文章平均质量分 85
JAVA基础,JAVA多线程
=PNZ=BeijingL
always be learning
展开
-
线程变量引发的session混乱问题
问题排查:线程变量引发的session混乱问题原创 2023-12-04 20:01:23 · 1250 阅读 · 1 评论 -
线程池技术总结
1. 线程池解决了什么问题线程池是集中管理线程的,以实现线程的重用,降低资源消耗,提高响应速度,提高线程的可管理性等。线程用于执行异步任务,单个的线程既是工作单元也是执行机制,从JDK1.5开始,为了把工作单元与执行机制分离开,Executor框架诞生了,他是一个用于统一创建与运行的接口。Executor框架实现的就是线程池的功能。使用线程池可以进行统一的分配,调优和监控。使用线程池的优势降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。原创 2023-12-01 15:01:39 · 1073 阅读 · 0 评论 -
使用Arthas排查性能问题
记使用Arthas排查性能问题原创 2023-11-28 01:00:00 · 2454 阅读 · 0 评论 -
如何处理 java.lang.NoClassDefFoundError
java.lang.NoClassDefFoundError: ch/qos/logback/classic/spi/ThrowableProxy原创 2023-11-07 18:20:13 · 1586 阅读 · 0 评论 -
GC overhead limit exceeded问题
程序包运行时候发生了java.lang.OutOfMemoryError: GC overhead limit exceeded异常原创 2023-10-21 11:28:35 · 1003 阅读 · 0 评论 -
JVM虚拟机如何查看.class文件
Java标志是一杯热咖啡,这杯热咖啡你很难与计算机编程联想到一起,这杯热咖啡却是Java这个名字的由来。故事是这样的,JAVA语言起名时,简姆斯 古斯林注意到自己办公室外一棵茂密的橡树Oak,这是一种在硅谷很常见的树。所以他将这个新语言命名为Oak。但Oak是另外一个注册公司的名字。这个名字不可能再用了。他的一个同事马克 奥颇门(Mark Opperman)在一家咖啡店于同事品尝咖啡时得到了灵感,想到了Java一词。Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。国外的许多咖啡店用Jav...原创 2021-09-13 18:17:21 · 366 阅读 · 0 评论 -
Java内存模型(Java Memory Model)
起初是因为看到论坛里一个朋友提了一个Java内存模型的问题,经过查询一些资料以及再论坛中讨论后,突然想写一篇整理性的文章转载 2021-06-15 13:44:07 · 233 阅读 · 0 评论 -
JVM源码分析之synchronized实现
java内部锁synchronized的出现,为多线程的并发执行提供了一个稳定的环境,有效的防止多个线程同时执行同一个逻辑,其实这篇文章应该写在JVM源码分析之Object.wait/notify实现机制之前,本文不会讲如何使用synchronized,以HotSpot1.7的虚拟机为例,对synchronized的实现进行深入分析。synchronized的HotSpot实现依赖于对象头的Mark Word,关于Mark Word的描述可以参考这篇文章JVM源码分析之Java对象头实现..转载 2021-07-19 09:39:03 · 276 阅读 · 0 评论 -
JVM虚拟机垃圾回收中的finalize方法作用
C垃圾回收最主要的作用是回收程序中不再使用的内存。当使用new创建对象后, Java虚拟机会给其分配一块内存资源, 当对象无用的时候Java的垃圾回收器负责回收无用对象占用的内存资源。如果你的对象并非用new获取了一块“特殊”内存,垃圾回收只知道释放那些由New分配的内存, 它并不知道如何释放对象的“特殊内存”,为了应对这种情况,Java允许在类中命名finalize方法 GC垃圾回收过处理可达性分析算法中不可达的对象被标记成需要回收, 一但垃圾回收器准备释放对象占用的...原创 2021-09-08 18:30:40 · 273 阅读 · 0 评论 -
JVM记一次java.lang.NoSuchMethodError问题排查过程
项目场景: 最近在看深入理解JAVA虚拟机,很巧,这两天正好遇到一个相关的问题,记录一下排查过程和问题产生的原因 ,希望帮助到看这篇文章的朋友。NoSuchMethodError问题是由于系统开发补丁引起的问题描述:系统日志出现NoSuchMethodErrorjava.lang.NoSuchMethodError: com.star.sms.richclient.businessquery.form.ProductInfoView.getProduct()Lcom/star/sms/..原创 2021-10-08 17:46:54 · 429 阅读 · 0 评论 -
使用Javap命令查看class文件的字节码
今天有个同事问我如何查看class文件的字节码, 今天写下来原创 2021-06-21 19:13:24 · 617 阅读 · 0 评论 -
JVM从虚拟机字节码中看关键字synchronized实现
Java语言中的synchronized关键字表示同步,可以作为函数的修饰符或者函数内的语句,当一个线程访问实例对象中被synchronized修饰的方法或者synchronized修饰的同步块时,线程获取该实例的对象级别的锁,此时其他线程如果要访问相同方法的时候就需要阻塞等待,直到前面的线程从同步块或者同步方法中退出并释放锁。 Java虚拟机可以支持指令序列的同步,同步是通过监视器(Monitors)来实现的, 监视器主要功能是监控一段代码,确保在同一时间只有一个线程在执行。...原创 2021-09-14 18:21:43 · 220 阅读 · 0 评论 -
频繁GC引起卡顿问题排查与解决
本问题是因为开发提交了几行未经测试的代码引起, 此代码直接引起内存泄露,系统频繁GC。这也是提交未测试代码引起故障的典型案例原创 2023-04-23 16:36:43 · 2340 阅读 · 0 评论 -
JVM如何用Eclipse Memory Analyzer分析堆内存溢出
Eclipse Memory Analyzer是一个Java堆内存析工具。工具可以帮助开发者检测内存泄漏和分析内存消耗情况。Eclipse Memory Analyzer用于分析Java堆转储文件(Heap Dump)文件。本文介绍如何实用Eclipse Memory Analyzer(MAT)插件。Eclipse安装Eclipse Memory Analyzer插件设置虚拟机启动参数:-XX:+HeapDumpOnOutOfMemoryError -XX:H...原创 2021-09-02 12:03:36 · 673 阅读 · 0 评论 -
JVM如何读GC日志以及如何使用工具分析
GC 垃圾回收必须要保证一直性的快照中进行, 一直性的意思是指分析工作期间整个系统就像静止在一个时间点上, 不能在分析过程中对象关系还在发生变化,所以GC分析过程中必须要让JAVA程序停顿,Sun把这个事件称之为STW (Stop the World) , 打个比方, 《深入理解Java虚拟机》里作者举了一个例子, 我觉得十分恰当: 当你要打扫孩子的屋子时,你会让孩子做在椅子上不动,然后才能顺利的完成打扫房间。如果你一边打扫房间,孩子一边在房间里仍东西,你将永远无法完成打扫房间的工作 ...原创 2021-09-10 11:16:30 · 424 阅读 · 0 评论 -
JVM记一次堆内存溢出OutOfMemoryError: Java heap space
项目场景:前段时间现场报了一个内存溢出的OutOfMemoryError: Java heap space的问题,这个问题十分典型,所以记录下来,希望能帮助到看这篇文章的朋友问题描述:问题项目: 改问题出现在省网的BOSS系统, 这是一个BS架构的系统, 前台使用的Spring Rich Client 也叫Spring胖客户端,Spring Richclient 是一个基于 Spring的企业级富客户端开发框架,使用该框架,可以轻易构建出具有良好可维护性和可扩展性的企业级 Swing .原创 2021-08-31 19:36:08 · 2825 阅读 · 0 评论 -
JVM从虚拟机层面了解重载和重写
本文是读周志明先生著的《深入理解Java虚拟机》一书有感后写的一篇读书笔记。想要更多了解相关内容建议去度此书。 言归正传,众所周知,面向对象的三个基本特征是继承,封装,多态,本文将介绍在Java虚拟机中如何实现的“重载”与“重写”...原创 2021-09-24 17:01:41 · 253 阅读 · 0 评论 -
JVM记 jstack命令的时候报错Unable to open socket file
记一次CPU飙升并且内存溢出异常排查原创 2022-06-06 11:20:55 · 5652 阅读 · 1 评论 -
JVM从虚拟机类加载看java.lang.NoSuchMethodError
Java虚拟机中类加载过程经过5个过程加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization),其中验证、准备,解析这三个阶段又叫做连接(Linking)过程类加载过程1. 加载(Loading)读取Class文件定义类的二进制流,将字节流代表的静态存储结果转换成方法区的存储结构在内存中生成一个java.lang.Class对象2. 验证(Verification)...原创 2021-09-17 17:13:44 · 174 阅读 · 0 评论 -
JSch登录sftp时发现需要Kerberos身份验证
项目开发中使用了SFTP,debug调试程序时发现了每次都需要手动输入 Kerberos的口令信息。这就很奇怪了难道每次连接SFTP时候都需要手动输入吗?本问记录使用JSch登录sftps时遇到的Kerberos验证问题并记录了解决方法原创 2023-06-26 18:58:33 · 740 阅读 · 0 评论 -
编译时不好的注释会让代码丢失并产生问题
不知道有没有人遇到过编译后部分代码缺失呢?反正我遇到了原创 2023-04-26 19:41:36 · 548 阅读 · 1 评论 -
了解高可用
高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。设计系统的可用性,最重要的是满足用户的需求。系统的失败只有当其导致服务的失效性足以影响到系统用户的需求时才会影响其可用性的指标。原创 2023-04-11 18:39:05 · 469 阅读 · 0 评论 -
解析异常SAXParseExceptionis如何处理
特殊字符串经常会造成字符串解析异常SAXParseException,本文记录某次问题的排查过程和处理方法。原创 2022-11-28 16:54:28 · 1583 阅读 · 0 评论 -
Log4j2安全 JNDI漏洞 CVE-2021-44228
12 月 10 日,Apache 开源项目 Log4j 的远程代码执行漏洞(CVE-2021-44228) 被公开原创 2021-12-15 15:44:12 · 1573 阅读 · 2 评论 -
JAVA多线程信号量Semaphore
Semaphore 通常我们叫它信号量, 这个对象有什么作用呢原创 2022-08-06 12:00:19 · 567 阅读 · 0 评论 -
JAVA多线程同步队列SynchronousQueue
SynchronousQueue是一个不存储元素的阻塞队列,每个put操作必须等待一个take操作,否则不能添加元素原创 2022-08-09 19:03:49 · 1319 阅读 · 0 评论 -
JAVA多线程同步计数器CountDownLatch作用
CountDownLatch 是一个同步辅助类,即倒数计数器。在完成一组正在其他线程中执行的操作前,它允许一个或者多个线程处于等待状态,在当前计数到达零前,await方法会一直阻塞原创 2022-08-01 20:09:12 · 1215 阅读 · 0 评论 -
JAVA多线程FutureTask作用
FutureTask是一个异步运算的任务,FutureTask里面可以可以传入Callable实现类作为参数,可以对异步运算任务的结果进行等待获取,判断是否已经完成,取消任务等操作。理解FutureTask之前先要知道Future接口.........原创 2022-08-01 10:20:40 · 873 阅读 · 0 评论 -
JAVA多线程面试中常问的问题
面试中常问的多线程问题原创 2022-07-20 19:30:37 · 396 阅读 · 0 评论 -
Java中double精度丢失如何处理
不论是double还是float都是浮点数, 计算机进行计算的时候采用二进制来计算,先将10进制转换成二进制,然后进行计算,最后再将二进制转换为十进制。浮点数会失去一定的精度原创 2022-07-14 19:45:50 · 1798 阅读 · 0 评论 -
Java中serialVersionUID作用
聊聊序列化接口java.io.Serializable和serialVersionUID原创 2022-06-11 16:37:28 · 2456 阅读 · 1 评论 -
Java中如何使用try…catch处理异常
try...catch 块try..catch块主要用于处理异常, 一般会将可能出现问题的代码写在try块中,以处理程序中出现的程序错误,如果一个异常发生在try块中,如果异常需要被相应的程序处理,那么就使用catch块来捕获异常,并在catch块中填写处理异常的代码,就像下面的方式try { //这里是可能出现问题的代码}catch(Exception e){ //捕获后处理的代码}举个例子实现从配置文件system.properties配置文件中读...原创 2022-03-26 15:34:16 · 2507 阅读 · 0 评论 -
Java中java.math.BigInteger用法
摘要:java.math.BigInteger用来表任意大小的整数,内部是用数组来表示数值,此对象最长用的构造器为参数为字符串的构造器,此构造器将参数数值字符串转换BigInteger数值,并且支持“+”、“-” 符号,“+”表示正值,“-”表示负值。但是数值字符串不能包含其他无关字符串原创 2022-03-22 11:31:20 · 3098 阅读 · 1 评论 -
Java面试中 == 、 equals 、hascode 相关问题如何回答
最近旁边的同学常常做电话面试, 经常听他问下面的这个问题。题目如下:== 比较和equals比较有什么区别, 说说你的理解这个问题看着比较容易,其实很容易对面试者的技术有个初步的理解 ,这个问题如何回答呢==比较对于==,比较的是值是否相等如果作用于基本数据类型的变量,则直接比较其存储的 值是否相等, 如果作用于引用类型的变量,则比较的是所指向的对象的地址是否相等。equals比较对于equals方法比较,比较的是其他对象和本对象是否相等先看Object#euq...原创 2022-03-07 19:28:32 · 564 阅读 · 0 评论 -
StandardServer.await: create[8005]: java.net.BindException问题原因分析
org.apache.catalina.core.StandardServer await严重: StandardServer.await: create[8005]: java.net.BindException: Cannot assign requested address: JVM_Bind原创 2022-02-28 11:08:55 · 1337 阅读 · 1 评论 -
ClassCastException: XXX are in unnamed module of loader ‘app‘异常分析
项目场景:SpringBoot 2.x + Spring5.3.14 测试使用Trigger实现任务调度问题描述:程序编译不报错, 启动SpringBoot后台报错,根据日志提示发现创建SchedulerFactoryBean的时候发生了ClassCastException类转换异常class org.quartz.impl.triggers.CronTriggerImpl cannot be cast to class [Lorg.quartz.Trigger; ...原创 2022-02-24 10:46:05 · 24912 阅读 · 3 评论 -
JAVA: JDK动态代理
什么是动态代理动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术。在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法。可以理解为运行期间,对象中方法的动态拦截,在拦截方法的前后执行功能操作。JDK动态代理JDK动态代理是一种基于接口的动态代理,代理对象必须是实现接口,通过使用JDK官方的Proxy类创建代理对象。JDK的动态代理主要涉及到java.lang.reflect包的两个类:Proxy和Invocation原创 2021-09-27 11:56:26 · 146 阅读 · 0 评论 -
JAVA:SimpleDataFormat格式化字符串引发的惨案
项目场景:项目中发现某类消息的时间字符串都是08分钟,消息的创建时间99%以上都不是08分钟创建的,数据十分整齐原因分析:经过排查发现本问题又和SimpleDateFormat有关, 新员工使用SimpleDateFormat 处理的时候格式字符串编写错误导致了这个问题public class Test { public static void main(String[] args) { SimpleDateFormat format1=new SimpleDateFormat原创 2021-08-19 13:10:07 · 269 阅读 · 0 评论 -
log4j 1.x版不适合高并发的场景使用
log4j版本1.x中,使用的是古老的synchronized(this),所有线程共用一个Category,而它通过log4j.properties指定。 同一个Category下的线程打log时,需要进行全局同步,因此它的效率会很低,log4j 1.x版不适合高并发的场景。原创 2021-05-09 23:28:30 · 207 阅读 · 0 评论 -
【JAVA多线程】线程变量ThreadLocal和InheritableThreadLocal区别
问题现象从数据库表中发现业务中一些用户信息丢失, 对这些问题数据进行分析, 数据产生有2中方式普通业务,即单线程处理, 这类数据都是完整的 批量业务,通过Spring线程池创建多个线程,同时处理多个任务, 发现这类数据中的用户信息都丢失了查询代码发现程序中用户信息是保存到主线程的线程变量ThreadLocal中, 因此怀疑和ThreadLocal 有关系 private static final ThreadLocal<ApplicationUserHolder> LOC..原创 2021-05-14 19:02:56 · 444 阅读 · 2 评论