
Java
文章平均质量分 80
主要记录、分享Java的一些问题
JackSparrow414
认真对待问题、思考问题、解决问题
展开
-
Java中的锁(四)利用读写锁实现高性能网页缓存
看了上面的逻辑和读写锁的特性,实现起来就很简单了自定义一个Filter,该Filter在缓存网页时使用Ehcache3。具体做法是将网页的Response放到Ehcache中那怎么提高 高并发下对同一个网页的访问性能呢?使用读写锁每个需要缓存的网页url中应该都有一个标识,此标识作为缓存的key当多个并发请求都请求同一个网页时,拿到key去cache中找,找到则直接返回找不到则开始获取读锁,拿到读锁什么都不做,直接释放;如果拿不到读锁,则等待。原创 2024-09-01 10:45:07 · 1062 阅读 · 0 评论 -
JMX的快速入门与使用+使用JMX Exporter监控+集成OpenTelemetry
文章目录JMX应用场景JMX使用定义一个MXBean实现该MXBean将MXBean注册到JMX中去使用Jconsole监控JMX官方文档源码地址JMX应用场景用来监控JVM内各种对象的信息。一个经典场景就是,某一天我们忽然被前方告知,业务大面积瘫痪,这时经过排查,发现由于bug导致数据库连接使用完了没有被释放,导致后续业务没有可用的数据库连接而超时报错。假如我们使用JMX来监控我们系统中数据库连接池的信息,当数据库连接池出现短时间内连接被大量使用,这个时候可以搭配我们的监控报警系统(如Nagios)原创 2022-03-15 20:02:20 · 9982 阅读 · 0 评论 -
JavaRMI入门和使用
文章目录Java RMI背景基本原理示例服务端提供远程调用的接口服务端实现远程接口注册中心客户端进行远程调用验证其他官方文档Java RMI背景当不同JVM之间需要互相调用的时候,如何让JVMA中调用JVMB中的方法像在本地一样,这就出现了RMI-Remote Method Invoke不同的JVM既可以指同一机器上的不同的JVM,也可以值不同机器上的JVM基本原理至于什么存根、骨架这些,我觉得很难让人记住并且这两个词也不容易望文生义,所以这里借助目前流行的微服务的概念说一下。如果对微服务有所原创 2021-10-02 09:20:16 · 499 阅读 · 0 评论 -
Arthas
文章目录Arthas启动/重进入启动常见问题生产环境修改代码、更新场景实时修改生产环境日志级别场景便捷地修改JVM参数其他命令更好用的工具Arthas启动/重进入启动# 一般arthas的jar包下载都会放在默认当前位置下,如果当前为root角色# cd ~# cd .arthas/lib/3.4.3/arthas# 需要管理权限才可以启动,也可以进入 cd .arthas/lib/版本/arthas,再执行sudo java -jar arthas-boot.jar重进入重进原创 2020-11-01 17:07:27 · 4529 阅读 · 0 评论 -
Java中的锁(三)结合Condition实现等待通知
文章目录Java中的锁(三)使用ConditionCondition中的方法注意事项实现等待通知机制Java中的锁(三)使用ConditionCondition和Lock结合使用 = wait/notify和synchronized结合使用Condition中的方法void await() = waitvoid await(long nanos) 有超时时间 = wait(long timeout)void signal = notify 唤醒一个void signalAll() = no原创 2020-10-22 20:21:29 · 180 阅读 · 0 评论 -
Java中的锁(二)实现自定义锁
文章目录Java中的锁(二)实现自定义锁锁的语义自定义同步组件思路AQS的结构是一个FIFO的双向队列。为什么是双向队列?AQS支持重写的方法实现Lock接口AQS提供的可使用的模板方法实现代码线程间的通知机制场景实现方式一存在的问题实现方式二注意事项Java中的锁(二)实现自定义锁锁的语义当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中当线程获取锁时,JMM会把该线程对应的本地内存置为无效。从而使得被监视器保护的 临界区代码必须从主内存中读取共享变量。线程A释放一个锁原创 2020-10-21 22:03:50 · 276 阅读 · 0 评论 -
JAVA 中的锁(一)锁分类
文章目录JAVA 中的锁(一)锁分类偏向锁获取偏向锁的过程锁竞争的过程偏向锁的撤销偏向锁升级至轻量级锁利用JOL查看偏向锁信息疑问解答轻量级锁获取轻量级锁过程锁竞争锁释放利用JOL查看轻量级锁的信息疑问解答重量级锁JOL查看重量锁升级过程疑问解答整个锁的升级周期图备注JAVA 中的锁(一)锁分类锁的信息存储于对象头里的Mark Word中锁的量级:无锁<偏向锁<轻量级锁<重量级锁锁的标志是存在对象头的Mark Word中1一个bit表示是否为偏向锁,0否1是2个bit表示原创 2020-10-20 21:51:25 · 231 阅读 · 0 评论 -
java开发细节(三)
1.今天在Java中对字符串进行截取的时候,需要截取后面的几位。于是想到Java的substrsubstring方法,我们平时用的最多的应该是substring(begin index,end index)这个方法,但是今天的场景不适合,因为,用这种方式的话,我的截取的字符串的长度需要固定,但是目前的场景是字符串的前几位长度是可变的,只有后几位是不变的。所以这种方式不靠谱。那么就用另外一种方式,s...原创 2019-01-02 20:39:46 · 255 阅读 · 0 评论 -
java开发细节(二)
1.今天写mybatis的配置文件时,利用mybatis的动态SQL写SQL语句时,<select id=getBgtCompanyList" parameterType="com.ronhe.romp.bgt.bgtcompany.model.BgtCompanyModel" resultMap="BgtCompanyResultMap">写完之后,很自信的SVN提交了,后来...原创 2018-11-28 20:24:39 · 154 阅读 · 0 评论 -
java开发细节(一)
1.对于二维数组,int [] [] A = new int [a] [b];意思是说,这个二位数组有一个元素的一维数组,每个一维数组里面有b个元素如图:2.在java中字符串是不可变的我们都知道,如果想让字符串可变,我们一般都用stringBuffer和stringBuilder来进行字符串连接,在java中使用+符号来进行字符串的连接会非常慢,它会首先开辟新字符串的长度的空间,然后...原创 2018-08-17 15:33:53 · 226 阅读 · 0 评论 -
日常开发的坑
第一个坑:当我们用euqals比较一个字符串和一个变量时,假设STR1 =“你好”,STR2是一个变量,如果要对两者进行比较,正确并且规范的写法是:str1.equals(STR2);错误的写法是:str2.equals(“你好”);因为写法二,如果STR2为空,则会抛出空指针异常,写法一则不会,则会返回错误。不同类型的等于都会返回空。也就是两个变量比较,必然存在的那个...原创 2018-08-13 17:20:58 · 172 阅读 · 0 评论 -
日常开发中要注意的小细节
1.当try...catch时,异常不要抛出就可以了,要记得把异常记录在日志中。使用logger。2.遍历时使用entrySet效率比keySet效率高,而且可以取key和value,具体用法可以自己百度。3.使用indexof(字符串)对字符串进行查找时,尽量用单引号----' ' ,效率比双引号高。...原创 2018-08-14 15:11:55 · 212 阅读 · 0 评论 -
关于java中关键字static的说明
static关键字代表在内存中只有一份,今天看代码的时候发现一个每一个审批单据的查询的方法都是static的,这让我感到很好奇,这样把所有查询方法声明为static有什么用呢?static方法可以直接通过类名.方法名进行调用,并且会一直占用内存,省去了创建对象new时所消耗的资源。如果一个方法被频繁调用,可以考虑将它声明为static。static类在加载时就分配了内存,并且会一直占用内存...原创 2018-07-31 17:19:09 · 270 阅读 · 0 评论 -
关于java中equals和==的区别
在学校学习时,老师就告诉我们equals是值比较,==是引用比较,不知道背了多少遍,总感觉工作中用到的地方很少,满脑子都是各种框架,现在看来是真的打脸。今天写代码时,为了做一个逻辑控制,需要比较前台jsp传过来的值和后台自己定义的字符串是否一样,结果写代码的时候,就直接写成了==之间的比较,发现自己写的逻辑代码后台获取到的值和自己定义的字符串确实一样,但是if条件结果就是为false,怎么找也找不...原创 2018-07-09 19:38:19 · 209 阅读 · 0 评论 -
java编码和解码(二)
当浏览器向服务器发送URL请求时,非ACS码值的一个字节都会被转换为%xy的形式,utf8编码是将一个汉字编为3个字节。发送数据时,浏览器首先将url进行编码,会调用java.net下的URLEncoder下的encode方法,encode方法如下图依旧和原来一样,调用charset类,只不过这次获得编码格式是通过charset.forName()方法,当这个方法,点击进去,你会发现,它只不过是将...原创 2018-04-13 16:48:53 · 228 阅读 · 0 评论 -
关于java中编码和解码(一)
计算机中所能表示的字符仅仅为0-255个,平时我们用到的语言太多,计算机本身根本无法表示。必须将我们的不同的语言转换为计算机所能理解的语言----bit。好了,废话不多说,进入正题举个例子来说明java中编码和解码的过程 例如:java中将字符串转换为字节数组的方法为String.getBytes方法,此方法会调用StringCoding.encode方法,如下图接着StringCoding方法里...原创 2018-04-13 16:20:30 · 393 阅读 · 0 评论