- 博客(32)
- 资源 (1)
- 收藏
- 关注
原创 游戏X,Y坐标轴中,判断两节点之间是否存在障碍物。
arpg游戏中我们一般都用 1 代表可行走点 0 不可行走点。组成一个二维数组。byte[][] mapConfig。这样就可以使用 坐标系来求解一些问题。比如 这里所说的 如何知道两点之间是否存在障碍物。我的思路从起点开始 x轴 或 Y轴 循环加 0.5。判断当前点是否是阻挡点。checkNoBlockPosition(int map)...
2020-04-12 14:25:50 2138 2
原创 Java堆栈简单分析:线程中有队列堆积大量任务导致请求无响应。
使用 Jstack pid 打印出堆栈信息:进行初步分析:1.没看到线程有死锁的标志。2.通过top命令 分析。CPU确实存在异常,达到120%。初步判断是否有死循环的问题?3.判断死循环一般会gc 很频繁。gc线程也应该大量占用cpu,ps -mp pid -o THREAD,tid,time 发现有几条玩家线程cpu占用高。4.Jstack 打印出来。"async-or-r...
2020-03-16 11:28:31 1551
原创 AtomicInteger 处理边界问题的一种实现方式。
当使用到AtomicInteger 类时,我们需要特别注意它的边界问题。当它自增到Integer.MAX_VALUE 时,就会变成-Integer.MAX_VALUE的并自减下去。如果此时没有注意对负数值的影响。那么将会发生难以察觉的bug。 private static AtomicInteger atomicInteger = new AtomicInteger(Intege...
2020-01-13 20:15:27 728
原创 8g-4核的jvm参数参考。结合自己项目实际情况改变
-Dfile.encoding=utf-8 -Xms3072M -Xmx3072M -Xmn2048M -Xss1M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=10 -XX:PretenureSizeThreshold=1M -XX:+UseParNewGC -XX:+Us...
2019-08-06 17:46:58 1445
原创 方法内直接引用全局变量和通过声明局部变量来引用全局变量的到底有没区别?
看源码时相信看到过这个片段:声明局部变量再指向类的变量。为什么不直接引用呢?当时就想:java的内存模型中,方法只会存放对象的引用(this),不会存放对象中的信息,都是通过this访问对象中的信息。所有 直接引用 this.lock 就要先去访问this对象,然后获取lock的引用,最后再调用lock函数。如果采用框框中的吗,将对象赋值给局部变量在使用。之后就是不是不再访问t...
2019-07-27 15:37:06 1037
原创 【Java基础】Arrays.asList() 的使用注意。
Arrays.asList() 方法不理解就使用还是有很多坑的。比如,它返回的是自己内部类的java.util.Arrays.ArrayList"阉割版"的List。不可进行Add/Remove。 更要注意的是:如果我们在这里针对集合修改了某处元素值,那么原来数组的内容也会相应改变!即通过Arrays.asList()方法,得到的集合与原数组就已经关联起来,反之,如果我们修改了数组...
2019-06-25 19:46:15 1098
原创 ConcurrentHashMap computeIfAbsent的bug
public static void main(String[] args) { Map<String, Integer> map = new ConcurrentHashMap<>(16); map.computeIfAbsent("AaAa", key -> { return map.computeIfAbsent("BBBB", key2 -&...
2019-05-31 17:30:28 2645
原创 Java动态编译的实现
这里就不讲解啥是动态编译了,原理,区别的文章也有很多。这里主要使用线程池;重写 System.out的输出,并保存输出的结果。然后返回到客户端。1.获取字符串类型的源码,转化成编译后的byte[]数组.String source :客户端传过来的字符串类型的代码,DiagnosticCollector:编译结果收集器。 private static Pattern CLA...
2019-03-14 10:05:46 774
原创 netty 关于 Channel write()方法的一些理解
问题一channel.write()方法在哪个线程中执行。io.netty.channel.AbstractChannelHandlerContext#write(java.lang.Object, boolean, io.netty.channel.ChannelPromise)private void write(Object msg, boolean flush, Channe...
2019-02-27 17:14:48 3044
转载 正则表达式合集
转载 :https://segmentfault.com/a/1190000017834831?utm_source=tuicool&utm_medium=referral一.校验数字数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非零开头的最...
2019-01-16 15:15:45 98
原创 Java 多线程下如何使用Random生成随机数。
做游戏后台的,就避免不了生成随机数,随机物品给玩家,就会存在大量的调用随机方法的可能。我们探讨下哪种写法比较合适。java.util.Randomjava.util.Random 从Java 1.0开始就存在了。它是一个线程安全类,理论上可以通过它同时在多个线程中获得互不相同的随机数。这样的线程安全是通过AtomicLong实现的。Random 使用 AtomicLong CAS (c...
2019-01-09 16:56:16 6036
原创 Java 深拷贝和浅拷贝的应用
原理啥的就不深入介绍了,主要记录下 几个 对象复制的方法。1. 实现 Cloneable 接口 浅拷贝2. Apache的两个版本:(反射机制) org.apache.commons.beanutils.PropertyUtils.copyProperties(Object dest, Object orig) org.apache.commons.beanutils.BeanUtil...
2018-12-26 16:48:27 625
原创 java8 运用stream int[] 转 List<Integer>
int[] array = {1,2,3,4,5,6,7,8,9,10};List<Integer> list = Arrays.stream(array).boxed().collect(Collectors.toList());boxed() 其实就是 mapToObj(Integer::valueOf); 方法
2018-12-24 16:01:10 5219
原创 Java 判断当天某个时间是否在某个时间内
某些活动 需要判断 当前时间 是否处于规定的时间段,时间段: openWeek[]{1,5}, openTimes[]{"18:00:00-19:00:00","18:00:00-19:00:00"} 可能多个。public class Demo9_timeValid { // openTime = "18:00:00-19:00:00" public boole...
2018-12-13 20:46:31 2423
原创 Java正确的"停机"方式
我们关闭Java服务时,应该进行一些善后工作,比如,关闭线程池,释放连接资源等,而不是直接关闭,放弃未完成的任务。Java中,我们可以通过Runtime.getRuntime().addShutdownHook()方法来注册钩子,以保证程序平滑退出。举个例子:public class Demo8_shutdown { /** * 使用线程池处理...
2018-12-08 15:33:48 178
原创 Java 枚举查找不抛出异常的实现
Java枚举的values() 查找时,如果传入无效的名称则会抛错。初学者不态注意的话就会直接try catch 返回 null来处理异常,我们知道异常不应该用于控制流。try { return Function.valueOf(name); } catch (Exception ex) { log.warn("Exception Thrown", e...
2018-11-26 11:59:00 1595
转载 java中对 “锁”的一些认识
本文的一些认识皆以Jdk 8为基础。对一些锁的知识点,以及不同的适用场景。结合自己和他人的文章对它进行重新的认知与疏导。非原创 ,引用自:https://tech.meituan.com/Java_Lock.html?utm_source=tuicool&utm_medium=referral 下图:通过锁的特性来进行分类 可总结出,6大特性。a.根据对资源的锁住情况分 ...
2018-11-24 12:02:29 115
原创 Mac下设置Btrace的环境变量
1.下载Btrace包 btrace-bin-1.3.92.mac的环境变量设置:打开 .bash_profile vi ~/.bash_profileBTRACE_HOME=/Users/zz/zzh/btrace-bin-1.3.9export BTRACE_HOMEexport PATH=${PATH}:${BTRACE_HOME}/bin注意:前提是你已配置了ja...
2018-11-20 17:35:40 588
原创 随机产生不重复的[min,max] 范围的count大小的数组
public class Demo6_ArrayRandom { private static final Random random = new Random(System.currentTimeMillis()); /** * 随机产生不重复的[min,max] 范围的count大小的数组 * * @param count * @p...
2018-11-20 15:15:07 138
原创 如何使线程池加入任务一直达到MaximunPoolSize的值,再加入队列
public class Demo5_ThreadPool extends ThreadPoolExecutor { private final AtomicInteger submittedCount = new AtomicInteger(0); public Demo5_ThreadPool(int corePoolSize, int maximumPoolSize, ...
2018-11-20 15:11:24 566
原创 分段锁的实现
public class Demo4_SegmentLock { private static Integer segments = 16; private final static Map<Integer, ReentrantLock> lockMaps = new HashMap<>(); public Demo4_SegmentLock(...
2018-11-19 10:33:46 1548 1
原创 使用线程池newFixedThreadPool时注意队列过大造成阻塞而引起锁不释放的问题
自定义的线程或者newFixedThreadPool()使用LinkedBlockingQueue作为任务队列的需要注意案列1:有两处业务 共用了一把锁lock.writeLock().lock();try{while(true){//clean data}}finally{lock.writeLock().lock();}从这里看出,因为长时间持有lock,那么其...
2018-11-14 11:26:02 21750
原创 多线程下SimpleDataFormat的使用
static ThreadLocal<DateFormat> safeSaf = new ThreadLocal<DateFormat>{ @Override protected SimpleDateFormat initialValue(){ return new SimpleDateFormat("yyyy-MM-dd HH:...
2018-11-13 20:53:05 238
原创 Mysql blob字段转16进制再转成java对象
第一步假如有个表core_player字段 itemssql:select hex(items)from core_player where id = 1得到 一串 二进制,复制保存。第二步...
2018-11-13 20:46:32 1247
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人