Java
文章平均质量分 78
流子
我这个人很懒,所以没有简介
展开
-
Spring Data JPA 踩过的坑实录
游戏中台一直在使用spring 全家桶, 本文会左右使用Spring Data JPA的坑点记录总结 · 主要给大家总结介绍了关于使用Spring JPA注意事项及踩过的坑。原创 2024-01-12 16:14:09 · 691 阅读 · 3 评论 -
屌炸天的IDEA远程调试神器:Remote JVM Debug
IDEA的Remote JVM Debug功能可以用来在IDEA中调试远程服务器中的代码。其原理是在两个JVM间通过debug进行socket通信,以达到远程调试的目的。原创 2023-12-08 17:32:54 · 622 阅读 · 0 评论 -
JAVA内存深度分析报告
最近在对云主机的内存占用优化中,又有了新的认识,网上对JAVA的native memory 的认知五花八门,对direct memory 的获取的有偏差,今天我们来好好理一理,以便我们对JAVA 内存有个更好的认知。我们通过API ,MetaData , Native memory 快照,让我们对JAVA内存结构有了更深度的认识,以便以后在分析问题时,能有更客观的数据分析的基础。原创 2023-06-02 20:46:14 · 1900 阅读 · 0 评论 -
fastjson2使用Feature.WriteBooleanAsNumber踩坑
fastjson2 是 FASTJSON 项目的重要升级,目标是为下一个十年提供一个高性能的JSON库, fastjson2 性能相比原先旧的 fastjson 有了很大提升,并且 fastjson2 更安全,完全删除autoType白名单,提升了安全性。原创 2023-03-16 13:02:19 · 607 阅读 · 1 评论 -
在服务器端如何用JNI实现 NavMesh寻路
我们已经讲到的在服务器端使用 Easy3dNav来进行 NavMesh 来做寻路,但性能上能否更快一点呢?众所周知,C++ 版本的性能向来比JAVA版本要出色,所以我们尝试用JAVA调用JNI native 接口来提升寻路的性能。............原创 2022-07-13 21:22:54 · 1568 阅读 · 0 评论 -
JNI全流程实例使用总结
为了更好的获得一些比较独立的模块的性能,比如视频模块,寻路模块,通过对C++ 接口的封装,通过JNI技术对它进行跨语言调用。那什么是JNI呢?JNI (Java Native Interface,Java本地接口)是一种编程框架,使得Java虚拟机中的Java程序可以调用本地应用/或库,也可以被其他程序调用。 本地程序一般是用其它语言(C、C++或汇编语言等)编写的,并且被编译为基于本机硬件和操作系统的程序。.....................原创 2022-07-12 21:31:45 · 2311 阅读 · 1 评论 -
如何用 APT(Annotation Processing Tool)自动生成代码
我们很多人都写过代码自动生成的工具,比如用python结合moko模板引擎,或者java 结合freemarker模板引擎,protoc 等,实现解析策划数据类,proto协议类,或者数据库层的实体类。大大节省了我们开发的时间,让我们可以懒得光明正大。那么,有没有办法当你写好协议后,只要一保存编译,相关的协议接收和发送类的接口就自动实现了呢?答案是有的。注解处理器是(Annotation Processor)是javac的一个工具,用来在编译时扫描和编译,处理注解并生成锁期望的代码,提高生产效率。原创 2022-02-05 21:23:25 · 1289 阅读 · 0 评论 -
算数几何的绘制
算数几何的显示绘制,可用于几何图形的的旋转,坐标转换,移动等直观验证原创 2021-09-18 11:21:09 · 301 阅读 · 0 评论 -
VirtualThread Pin的处理总结
Pin的状态指的是VirtualThread在freeze时无法让出Carrier Thread(协程执行时挂载的物理线程)。主要有两种情况下会导致Pin:VirtualThread的调用栈包含JNI frame。因为JNI调用的实现是C++代码,可以做的事情非常多,例如它可以保存当前Carrier Thread的Thread ID,如果这时切换出去,那么下一次执行时,如果另一个Carrier Thread来执行这个协程,将会产生逻辑错误(Carrier Thread的ID不一致);VirtualThr原创 2021-09-10 21:02:40 · 541 阅读 · 0 评论 -
LOG4J2-MDC-全链路跟踪等功能研究
MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 、logback及log4j2 提供的一种方便在多线程条件下记录日志的功能。MDC 可以看成是一个与当前线程绑定的哈希表,内部是基于threadLocal实现,可以往其中添加键值对。MDC 中包含的内容可以被同一线程中执行的代码所访问。当开启isThreadContextMapInheritable属性后,当前线程的子线程会继承其父线程中的 MDC 的内容。当需要记录日志时,日志框架会自动从 MDC中获取所需原创 2021-08-10 14:54:38 · 2338 阅读 · 0 评论 -
Seata 分布式事务中间件
Seata分布式事务中间件原创 2020-11-25 22:08:49 · 275 阅读 · 0 评论 -
源码系列-LongAdder和AtomicLong对比
相当于一个AtomicLong数组,初始化时,初始化大小为2的数组,并初始化相对应位置的一个元素Cell,当每次去尝试获取时,根据当前线程获得的随机值threadLocalRandom取模(大小为cell的数组容量)获得索引值,然后回去找相应位置的元素,找不到则插入新的cell, 然后进行CAS操作(比如compareAndSwapLong),与AtomicLong原理相同,操作成功则结束,操作失败,会尝试扩容为原先cell数组大小的两倍,然后重新初始化要更新的索引值(threadLocalRando...原创 2020-10-29 19:51:09 · 395 阅读 · 0 评论 -
JUnit5使用总结
看一下几个注解在junit4和junit5版本不同的写法:junit4 junit5 使用场景 @BeforeClass @BeforeAll 在当前类的所有测试方法之前执行。注解在【静态方法】上 @AfterClass @AfterAll 在当前类中的所有测试方法之后执行。注解在【静态方法】上 @Before @BeforeEach 在每个测试方法之前执行。注解在【非静态方法】上 @After @AfterEach ...原创 2020-07-27 18:31:32 · 1070 阅读 · 0 评论 -
如何导出github项目并生成jar包
1.获取项目地址:https://github.com/nguyenq/tess4j.git2.import->git->project from git->clone URI->选择master->修改导出的项目地址,比如D:\workspace\trunk\tess4j->next->finishimport using the New P...原创 2019-12-31 15:44:10 · 4177 阅读 · 0 评论 -
神器Arthas使用小结
Arthas官方主页如果某个类没被加载器加载,jad反编译是读不到代码的windows 下执行attach.dll要放到JRE的bin下原创 2019-11-29 14:41:21 · 1170 阅读 · 0 评论 -
AJDK 8.0.0 Release Notes
记在这里,便于测试。版本号$ java -versionjava version "1.8.0_66"OpenJDK Runtime Environment (Alibaba 8.0.0) (build 1.8.0_66-b60)OpenJDK 64-Bit Server VM (Alibaba 8.0.0) (build 25.66-b60, mixed mode)转载 2017-01-18 11:30:04 · 9263 阅读 · 3 评论 -
JVM第一个外部种子客户/游戏行业的故事
以下这篇文章提到的游戏公司其实就是我所在的公司。感谢莫大大提供黑科技 我:很久很久以前~ 听众:打住,能不能直接一点? 我:好吧,重点:一、有客户提出JVM服务的需要;二、有家游戏企业试用JVM反馈很好;三、征集更多的JVM种子客户。 下面讲普通话 : 大家都看到,AJDK 8.0.0发布了, 阿里内部已经准备各种开搞(巨活跃)。没想到,外部也有一个种子客户在试用这个版转载 2017-01-17 22:53:06 · 1021 阅读 · 0 评论 -
UML使用总结
工欲善其事,必先利其器UML Lab Modeling IDEUML Lab is the first Modeling IDE to seamlessly combine modeling and programming with an intuitive UML diagram editor andnext-gen round-trip engineering. I原创 2016-08-29 01:45:46 · 2168 阅读 · 0 评论 -
Eclipse插件下载地址汇总
Properties Editorhttp://propedit.sourceforge.jp/eclipse/updates/svnhttp://subclipse.tigris.org/update_1.10.xwebtool(XML editor)http://download.eclipse.org/webtools/updates/maven http原创 2013-09-10 10:51:18 · 1764 阅读 · 0 评论 -
如何让Embed Tomcat和Netty支持HTTPS
背景:根据苹果 APPSTORE 于 2017年1月1日起 启用ATS 协议的要求(即客户端和服务器的HTTP 请求 需要启用SSL连接)需要尽快将我们 服务端的HTTP 转换成HTTPS,详见【SSL证书】应对IOS安全策略升级,你准备好了吗?版本要求:JDK:1.8Embed Tomcat 8.0.33 Netty 4.0.33申请证书:目前是在阿里云上申原创 2016-12-16 11:49:41 · 2320 阅读 · 0 评论 -
死循环记录
"ShutdownHook" #14 prio=5 os_prio=0 tid=0x00007fc689277000 nid=0x21d6 runnable [0x00007fc65b5fc000] java.lang.Thread.State: TIMED_WAITING (parking) at sun.misc.Unsafe.park(Native Method)原创 2016-04-18 22:40:13 · 2046 阅读 · 0 评论 -
游戏服务器JVM性能调优
最近开始优化页游服务端的性能,一些心得总结一下。现在的服务器硬件越来越好,几十G内存,十几个CPU。当硬件不是瓶颈的时候,如果让程序发挥最大效用就成了我们需要考虑的问题。就游戏服务器来说,得满足几个要求,高负载,低延时。特别是在开服当天,大量用户会涌进来,可能给服务器造成压力。使用Java作为服务器语言,除了程序本身的性能外,JVM的配置也直接影响到系统性能。参数调优入门级别的配置一般是:...原创 2013-11-08 23:44:39 · 3148 阅读 · 0 评论 -
游戏服务器内存占用动态调整
最近游戏在腾讯平台上线,已经快破200组,以前是一台机器可能就放一两组游戏区内存绰绰有余,只要没发生内存泄漏,也就没去关心。但现在为了节约成本,我们会尽量一台虚拟机上放尽量多的游戏区。所以我们默认放了4个区(每个区占用6G,共24G),还有放了logger 服,gate,flash,redis等应用,发现只要服务器维护后快一星期左右,内存占用从原先的10几个G一路高歌猛进,直到占满内存 9...原创 2015-03-21 23:07:34 · 2747 阅读 · 0 评论 -
使用Disruptor BlockingWaitStrategy遭遇死锁dead lock
发现跑了半天的game server登录不了,简单jstack了下,发现登录线程game-bus_init-X 被堵塞了,原因是Affects AAffects Version:3.3.2 Fix version:3.3.6JDK 1.8Cause:Nope this is not resolved by dropping the events. Ring Buffer Wor原创 2017-01-18 22:31:29 · 6947 阅读 · 0 评论 -
数据库连接池Druid使用总结
根据综合性能,可靠性,稳定性,扩展性,易用性等因素替换成最优的数据库连接池。原创 2017-03-30 11:48:25 · 16354 阅读 · 2 评论 -
HashMap进行put操作时遇到的并发问题
今天遇到了个问题,在全局服务器重启的时候,原有的4游戏逻辑服务器会马上再注册过来,通过多线程对HashMap进行操作,结果从后续的日志发现,id=1的数据丢失了。查了一下原因,多线程环境下put还是可能会有问题 .原创 2013-10-24 14:28:40 · 8684 阅读 · 1 评论 -
MAT(Memory Analyzer)使用总结
unreachable Objects Histogram:可被回收的对象,但是现在仍然在内存当中Shallow Heap指这个对象它自己占了多少内存,Retained Heap指在这个引用链之上,这些对象总共占了多少内存with outgoing references:这个类引用到了哪些类with incoming references:这个类被哪些类所引用在查找内存泄露的过程中,...原创 2019-09-29 15:36:27 · 1809 阅读 · 0 评论 -
JStorm使用总结
JStorm 是一个类似Hadoop MapReduce的系统, 用户按照指定的接口实现一个任务,然后将这个任务递交给JStorm系统,JStorm将这个任务跑起来,并且按7 * 24小时运行起来,一旦中间一个Worker 发生意外故障, 调度器立即分配一个新的Worker替换这个失效的Worker。因此,从应用的角度,JStorm应用是一种遵守某种编程规范的分布式应用。从系统角度, JSto...原创 2019-04-24 16:57:32 · 1844 阅读 · 0 评论 -
greys使用总结
安装 curl -sLk http://ompc.oss.aliyuncs.com/greys/install.sh|sh./greys.sh 24787https://github.com/oldmanpushcart/greys-anatomy使用手册https://github.com/oldmanpushcart/greys-anatomy/wiki/greys-pd...原创 2018-11-22 22:45:44 · 2260 阅读 · 1 评论 -
btrace使用总结(完全突破安全限制,引用第三方包)
由于认识JAVA代码热更新在先,所以Btrace这一神器似乎失去了一些光芒,但他的优势是无任何侵入性,可以做一些代码热更新没法做的事情,做到两者互补。比如1 可以直接运行java文件,少了一步编译,更可以在线上直接修改代码2.可以独立的打印到单独的文件中3.想进第三方jar包里的方法里方法内的数据track,4.输入和返回数据track5.内存不够时的track6.异常未有捕获时的t...原创 2018-11-22 21:17:05 · 1168 阅读 · 0 评论 -
JAVA代码的热修复实现
用于处理线上的一些逻辑bug的利器,这样,就不会为了一些几行代码的错误导致的bug,需要重新发版本重启服务器,而严重影响在线活跃,收入了。1.实现一个代理类:package com.lingyu.common.hotcode;import java.lang.instrument.ClassDefinition;import java.lang.instrument.I...原创 2017-06-29 18:41:58 · 7238 阅读 · 0 评论 -
服务器延迟原因汇总
1.Full GC导致CPU被垃圾回收占用jstat -gcutil -h5 [pid] 1s2.业务逻辑耗时较大,比如登陆登出逻辑,看CPU ,top -p pid H 看哪根线程CPU占用较高看游戏内监控grep 'message interval=[0-9]\{4,\}.' /data/log/game/546/game 看哪个协议占用较高3.带宽达到上限4.网卡吞...原创 2015-05-10 19:24:04 · 3243 阅读 · 0 评论 -
Log4j2使用总结
Log4j 2 包含了基于LMAX 分离库的下一代的异步日志系统,在多线程环境下,异步日志系统比 Log4j 1.x 和Logback 提高了10倍性能提升(吞吐量和延迟率 )。原创 2013-09-08 22:32:59 · 51287 阅读 · 10 评论 -
JAVA各种引用(Reference)的汇总
HardReference 强引用一般的人一般的程序最常用的引用SoftReference 软引用除非JVM即将OutOfMemory,否则不会被GC回收。这个特性使得它特别适合设计对象Cache。对于Cache,我们希望被缓存的对象最好始终常驻内存,但是如果JVM内存吃紧,为了不发生OutOfMemoryError导致系统崩溃,必要的时候也允许JVM回收Cache的内存,待后原创 2015-10-20 19:17:56 · 1262 阅读 · 0 评论 -
Zelix KlassMaster混淆工具使用摘要
混淆后的代码遇到异常抛出堆栈信息时,代码行号完全没有意义,一直以为就此没法准确定位,除非不用混淆功能,今天查了一下,发现只要简单配置一下就能达到在程序出错时抛出精确的堆栈信息,也就是能保持行号的准确性在.text里设置["lineNumbers" "=" ("delete" | "scramble" | "keep")]其中delete 为堆栈信息里完全没有行号信息scramb原创 2014-07-16 22:09:38 · 5455 阅读 · 3 评论 -
如何让JAVA应用在Eclipse中也能调用shutdownhook
大家都知道 Eclipse的红色的Terminate按钮是强制关闭程序,她无法触发shutdownhook 关机钩,就像在linux下执行kill -9 一样的效果,那么,难道我们没有任何措施了吗?答案当然不是的。在你的主程序里加上以下的程序段,在console下回车,就可以触发执行shutdownhook 关机钩.原创 2014-04-23 00:26:39 · 4074 阅读 · 0 评论 -
Disruptor使用笔记
在一个生产者和一个消费者的场景中测试表明,无锁队列相比有锁队列,qps有大约10倍的提升,latency更是有几百倍的提升。不管怎么样,现在大家都渐渐都这么一个意识了:锁是性能杀手。所以这些无锁的数据结构和算法,可以尝试借鉴来使用在合适的场景中。原创 2014-04-20 23:51:46 · 1155 阅读 · 0 评论 -
Httpclient使用总结
PoolingHttpClientConnectionManagerPoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();cm.setDefaultMaxPerRoute(10); // 每个主机的最大并行链接数// 为每个区设置最大的并发连接数,默认每个路由基础上的连接不超过2原创 2014-05-06 10:41:30 · 2295 阅读 · 0 评论 -
spring 类扫描功能使用
private static final String MSG_PATH = "com.lingyu.msg.http";private static final String RESOURCE_PATH = "classpath*:" + StringUtils.replace(MSG_PATH, ".", "/") + "/*.class";private Map funMap = n原创 2014-04-30 11:06:36 · 2292 阅读 · 0 评论 -
JAVA环境配置常用知识点总结
下载:下载页Windows x8669.72 MB jdk-6u37-windows-i586.exe环境变量JAVA_HOME=D:\Program Files\Java\jdk1.6.0_37CLASSPATH=.;%JAVA_HOME%\lib\toos.jar;%JAVA_HOME%\lib\dt.jar;Path=%原创 2012-11-08 22:51:46 · 770 阅读 · 0 评论