Java
文章平均质量分 66
对不起我是一个厨子
Others tell you how ,I tell you why,,,,,,
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
科普篇之Java堆内缓存优化-重复数据集复用
通过观察发现主播在短时间内识别出的ai标签变化并不大,目前线上是保留主播最近120个识别标签集,对于同一个主播有可能120个识别标签集完全一样,而主播与主播间也可能存在相同的识别结果。那么是不是可以从之前的120个识别标识集中找到一个与最新识别相同的标签集的引用,而不是new一个新的标签结果集?如此看来对一些识别结果变化不大的主播则可以大大的减少的内存使用。每个在线主播的ai标签每5s生成一个,包含50多个标签识别集。通过对比垃圾回收后的内存占用,粗略估计减少了近3G的内存使用。还记得主播ai标签的优化?原创 2025-03-04 10:50:39 · 314 阅读 · 0 评论 -
科普篇之Java堆内缓存优化-对象or基本类型
由于基本类型本身占用内存比较小此处float是4个字节,而使用一个包装类型做为类成员变量就会多占用24字节,如果当堆内缓存中存在大量的包装类型时,就会额外占用大量内存。如下声明对象,B对象就比A对象多占用24字节,怎么又多了8个字节?因为B.data中存放的只是指向堆内对象的引用又占用了8字节。在我们的场景中使用float替换Float后通过对比垃圾回收后的内存占用,粗略估计减少了近2G的内存使用。在64位下无指针压缩,不考虑内存对齐,对象头8字节+指向类型信息的指针8字节=16字节。原创 2025-03-04 10:41:33 · 309 阅读 · 0 评论 -
科普篇之Java堆内缓存优化-StringCache的使用
在推荐服务内部会缓存很多i2i的相似词表,结构为Map<String,List<String>>,key为主播id,value的List中存放的是与key相似的主播id列表(用途就是比如你看过主播a,就会把与主播a相似的其它主播推荐给你),虽然只有3万量级的主播,但这样一个Map,往往会有1000多万个主播id,其中绝大部分是重复的主播id。在我们的场景中使用String.intern()优化i2i词表后通过对比垃圾回收后的内存占用,粗略估计减少了近6G的内存使用。原创 2025-03-04 10:15:33 · 481 阅读 · 0 评论 -
科普篇之Java堆内缓存优化-IntegerCache的使用
假如在4000个主播正在直播,那么内存中就会存在4000*120*50=24000000,2千多万重复的主播标签id,而标签id在我们系统中要么是String,要么是int,对于String类型的我们可以用String.intern()优化,对于int类型我们可以使用包装类型Integer,利用其IntegerCache进行优化,消除重复的标签id。在我们的场景中使用String.intern()和IntegerCache优化ai标签后通过对比垃圾回收后的内存占用,粗略估计减少了近4G的内存使用。原创 2025-03-04 10:29:02 · 369 阅读 · 0 评论 -
百无聊赖篇之我与netty的第一次亲密接触-BrpcJava误用之堆外内存泄漏
话不多说jstack导出线程栈,不得不说运气是好到爆炸,只有brpc-jave使用的是NIO,如果dubbo,lettuce,brpc-java,使用的都是NIO,或都是EPOLL,那么我们就无法区分,就需要我们手动进行设置,其中一个与其它两个不同,以便确认是那个框架创建的ByteBuf泄漏了。由日志我们知道,泄漏的ByteBuf是netty的EvetLoop线程创建的,接下来我们要确定的是,到底是dubbo,lettuce,brpc-java中的那个框架在使用ByteBuf后没有release。原创 2025-03-04 09:59:24 · 690 阅读 · 0 评论 -
使用arthas进行接口性能测试
Arthas 用户文档 — Arthas 3.5.4 文档下载安装arthascurl -O https://arthas.aliyun.com/arthas-boot.jar启动sudo /data/zgc/jdk-11/bin/java -jar arthas-boot.jar选择需要attach的进程,输入1此次修改了recommend.algoframe.recaller.BaseNewCFSimi类的getrecall接口使用arthas的monito.原创 2021-09-10 10:15:29 · 1110 阅读 · 0 评论 -
LogBack指定时间间隔生成日志文件
LogBack指定时间间隔生成日志文件支持小时,分钟,秒比如每2小时,每5分钟,每30秒产生一个日志文件package dao.log;import ch.qos.logback.core.joran.spi.NoAutoStart;import ch.qos.logback.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy;import lombok.Getter;import lombok.Setter;im原创 2021-09-08 18:20:25 · 1833 阅读 · 0 评论 -
关于java线程状态的一点小小的疑惑
事情是这样了,一个月黑风高的晚上,窗外的冷空气是那么的可口解渴,让人沉浸地无法自拔,人们都沉沉的睡去了,它正贪婪地,,,,突然,,,,我这kafka不消费数据,是这个问题引起的?看着不像,正说着发来了线程堆栈看着不像kafkaConsumer的线程栈啊,其实另一张图有就不发了没啥看头如此如此这般这般,,,,,,,,,,,,,,,,,,,,,,最后同事那边说是卡在与数据库通信上了也不是kafka消费的问题但是,我看那个java线程的函数调用栈跟状态有点怪啊,明...原创 2020-05-30 22:10:45 · 373 阅读 · 1 评论 -
你知不知Java如何解析C++通过tcp socket传过来的结构体啊
你:知不知道Java如何解析C++通过TcpSocket传过来的结构体啊我:知道啊不久前,接到一个任务,使用Java写一个flume的TcpSource做为服务端,用于接收C++客户端程序发送的未序列化的C++结构体并解析成Java对象,要完成这个需求的开发,首先需要了解一点点,结构体内存对齐,字节填充,CPU大小端及网络字节序,然后就是一点点反汇编,会写点点C++ /Java代码,会简单的使...原创 2020-01-01 22:40:43 · 2563 阅读 · 9 评论 -
一条debug日志引发的性能问题排查
又到周天了啊!每次到周天都会有问题啊啊啊!加班,加班,呃呃呃,本来已经想好了,这个周天,红烧老鳖,搞点豆瓣酱爆出红油,再来点青红二荆条什么的,最后撒上葱花香菜,哇!肯定好看又好吃。但是,XXX啊这个问题你要解决啊,下周大家都等着用数据。。。。。我不知道大家知不知道?反正我身边的程序员一般都是特别敬岗爱业,长的特别好看,说话特别好听,职业道德又特别高尚的人,电话秒接,信息秒回,一年365天,...原创 2019-12-09 00:22:30 · 2548 阅读 · 0 评论 -
Java中static为什么不能修饰局部变量?
Java中static为什么不能修饰局部变量?问这样问题的人显然是学过c/c++的,因为在c/c++中static是可以修饰局部变量的如果你对这个问题百思不得其解,怎么都想不明白,你还是不要想了,因为没有什么为什么。不能就是不能,人为规定的规则罢了。如果你非要知道个为什么?我不介意在这误人子弟一下,,,,,, 首先让我们来看一下c语言中static的作用1.原创 2015-09-15 20:03:28 · 11938 阅读 · 0 评论
分享