java
huaye
爱好学习
展开
-
java 反射 根据字符串给字段赋值
import java.lang.reflect.Method;public class ReflectHelper { public static Object reflectObj(Class c,String str) throws Exception{ String[] strArrray = str.split(","); Class classType = C原创 2012-10-09 12:02:23 · 4171 阅读 · 0 评论 -
HashTable源码分析
public synchronized V put(K key, V value) { // Make sure the value is not null if (value == null) { throw new NullPointerException(); } // Makes sure the key原创 2017-01-13 20:23:50 · 243 阅读 · 0 评论 -
HashMap源码分析
1:hashcode的计算 不同数据类型 hashcode的计算方法是不一样的,归根结底是换算成一个整数便于存储和查找数据 2: public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } /** * Implements Map.put and r原创 2017-01-13 20:04:13 · 314 阅读 · 0 评论 -
JVM相关知识
根据<<深入理解Java虚拟机>>整理 JVM结构:运行时数据区和本地方法区 运行时数据区包括下面: 程序计数器:当前线程执行字节码的行号指示器,根据计数器执行对应的代码 Java 虚拟机栈:也是线程私有 每个方法都会创建一个栈帧,每一个方法调用完成就是在虚拟机栈从一个入栈到出栈的过程 本地方法栈:服务于本地方原创 2017-02-07 11:48:48 · 250 阅读 · 0 评论 -
Map类的分析
LinkedHashMap 继承HashMap 所以存储,获取数据还是hashmap 只不过使用链表标记了头和尾,所以可以从头和尾开始遍历TreeMap 是有序的,存储使用了红黑树结构,使用的时候对象需要实现Comparator接口。原创 2017-01-16 18:58:47 · 239 阅读 · 0 评论 -
java游戏服务器之数据层
先说下缓存数据层,通常在游戏服务器中经常会使用到数据缓存。如果是进程内的缓存,直接点就是HashMap ,List,一般会选择guava,Ehcache这些缓存框架。因为有很多数据都只需要暂时性缓存,不然会浪费太多的内存,而且容易造成内存泄漏选择guava的应该会多些 毕竟很多功能可以方便操作缓存,具体可以看下这个链接学习下google cache。进程外的缓存一般使用redis了,还可以利用原创 2017-05-14 21:01:35 · 855 阅读 · 0 评论 -
Java游戏服务器代码热更新
一般碰到这个问题首先想到的解决方案都是考虑new 一个classLoader来加载新的类,这样的解决方式有什么优点和缺点呢。使用ClassLoader的方式加载类就涉及到一些需要知道的知识点。双亲委托模型确保了一个类只会被一个类加载器加载一次,所以要更新旧的类就需要new一个新的类加载器。新的类可以添加字段添加方法还有很多强大的功能。如果仅仅只是一个简单的小程序是可以考虑的,毕竟牵涉到的模块不是很原创 2017-04-25 09:09:34 · 8617 阅读 · 0 评论 -
java 问题分析工具
一款在线分析代码BUG的利器 https://github.com/oldmanpushcart/greys-anatomy 性能分析 使用jprofile 内存泄漏可以使用mat 线上调用脚本代码使用beanshell 热修复方法级别代码 instrument原创 2017-07-12 20:06:02 · 342 阅读 · 0 评论 -
游戏服务器压力测试
游戏项目上线之前,一般需要对项目做个压力测试,从中可以评估项目的性能瓶颈,做出针对性的优化,这样就需要设计一个压力测试工具了。这里主要针对RPG游戏单线程还是多线程。游戏业务逻辑还是要单线程,这样上层业务逻辑不用考虑并发问题,降低编码复杂 度。如果整体只用一个线程支撑2000机器人跑压力测试,如果没有寻路,没有其他一些耗时的操作,还是可 以支撑的。如果整体只用一个线程跑多个机器人,那么可以原创 2017-09-06 11:52:05 · 10857 阅读 · 1 评论 -
Netty 添加 websocket 支持
首先还是在Netty官网找到demo的链接,Netty官网websocket demo 然后就是开始copy 对应的类 拿来测试了。然后就开始分析添加对应的handler了。WebSocketServerInitializer 里配置了@Override public void initChannel(SocketChannel ch) throws Exception {...原创 2018-05-17 15:08:58 · 852 阅读 · 0 评论 -
window bat 版本发布
1:用maven 构建项目jar和copy lib包 2:用bat copy部分其他资源文件<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> ...原创 2018-06-06 10:01:15 · 413 阅读 · 0 评论 -
HashSet源码分析
public HashSet(int initialCapacity, float loadFactor) { map = new HashMap<>(initialCapacity, loadFactor); } /** * Constructs a new, empty set; the backing <tt>HashMap</tt> instance原创 2017-01-13 20:16:48 · 281 阅读 · 0 评论 -
游戏服务器框架设计
好久没写东西了,慢慢开始整理点东西吧。 服务器架构网上有好多讨论了。这里只讨论一个游戏服务器设计的一些东西1. 网络层框架 一般现在都是用mina netty ,因 netty比mina提供现成的东西比较多,开发起来简单,更新比较快,越来越多的人开始用netty了。2. 逻辑层框架 一个消息从网络层传送过来,逻辑层需要做处理。这样就涉及到一个问题,逻辑并发处理问原创 2016-05-16 15:16:21 · 1348 阅读 · 0 评论 -
java nio
Position您可以回想一下,缓冲区实际上就是美化了的数组。在从通道读取时,您将所读取的数据放到底层的数组中。 position变量跟踪已经写了多少数据。更准确地说,它指定了下一个字节将放到数组的哪一个元素中。因此,如果您从通道中读三个字节到缓冲区中,那么缓冲区的 position 将会设置为3,指向数组中第四个元素。同样,在写入通道时,您是从缓冲区中获取数据。 position原创 2012-12-05 10:04:41 · 678 阅读 · 0 评论 -
Eclipse TPTP 分析程序性能
插件如何安装就不说了,我是直接下载带有该插件的Eclipse,少点折腾吧!新建java项目,新建一个类TestMethod.javapackage com.test;public class TestMethod { public static void main(String[] args) { calMul(1000); calSum(1000000); }原创 2013-03-28 17:41:28 · 1017 阅读 · 0 评论 -
java.lang.UnsatisfiedLinkError: no XXX in java.library.path
在window下文件名:xx.jni.dll传入System.loadLibrary("xx.jni"); 系统就会查找对应的文件名为xx.jni.dll 其中的java.library.path 可以自己在VM参数中加入-Djava.library.path=C:\data 假设xx.jni.dll在C:\data目录下在Linux下文件名:libxx.so原创 2013-06-21 17:49:39 · 10045 阅读 · 0 评论 -
java 缓冲区
基本上都有4个属性1:容量(Capacity) 代表能存储多少:2:上界(Limit)缓冲区不能读或者不能写的位置3:位置(Position)这个position会随着读或者写而改变位置4:mark(Mark)调用mark()来设置mark的位置四个属性的关系如下0原创 2014-03-02 21:04:22 · 1481 阅读 · 0 评论 -
java 程序的性能分析
有些时候会分析下程序的性能问题,仅根据个人的一些实践来说下。java web的程序的性能 一般都是针对访问多点的地方做个时间标记,模拟压测的打印log也是比较容易发现程序的一些问题的。下面主要介绍java应用程序的性能分析一些方法。1:使用jdk自带的jvisualvm 在window下的cmd直接启动就可以了。xp下因为盘文件格式的问题,可能导致无法访问,需要修改一些配置的路径原创 2014-03-29 22:18:50 · 782 阅读 · 0 评论 -
java btrace
对于线上项目的分析 有时需要线上的环境的时候 可以使用btrace来查找一些特殊的bughttp://blog.csdn.net/changewang/article/details/12057139先下载btrace 然后开始写btrace的脚本 根据https://kenai.com/projects/btrace/pages/UserGuide#btrace_a原创 2014-03-22 22:43:48 · 589 阅读 · 0 评论 -
Servlet 3.0 proxool 配置 数据库连接池
Servlet3.0没有配置web.xml 但要添加数据库原创 2014-10-23 22:31:30 · 713 阅读 · 0 评论 -
java 百度 登录
1:模拟浏览器登录百度前,先把浏览器的所有cookie都清除掉,这样看得比较清楚。2:使用chrome或者火狐浏览器都可以 .打开控制台 ,下面以chrome浏览器来介绍。https://passport.baidu.com/v2/?login 点击控制台的url后面就差不多是分析每个url请求的参数的数据是在哪里来的了。最麻烦的一步就是密码的加密。需要原创 2014-12-04 18:34:18 · 4051 阅读 · 1 评论 -
json-jackson多子类继承的反序列化
http://wangxinchun.iteye.com/blog/2195210?utm_source=tuicool后面可能会用的上的转载 2015-08-25 10:09:07 · 5341 阅读 · 0 评论 -
beanshell 线上修复BUG
有时服务器上线了 但是有些代码因为程序原因可能导致没有执行 需要主动调用执行下 或者为了排查线上问题 主动获取某个方法或者变量的返回值 可以使用脚本来做线上的修复处理 javascript 也是可以的 但是编写脚本 有些时候总有字段类型转换的问题 beanshell是java脚本 写起来方便很多 不过 使用这些脚本修复的一个基础是要有一个容器存放所有的对象 如果使用了spr原创 2016-04-16 17:04:18 · 704 阅读 · 0 评论 -
游戏服务器广播消息的优化
游戏服务器里经常有大量的消息需要广播 特别是同屏战斗的时候 释放技能 伤害输出 位置移动 hp变化。想起了之前做第一款游戏的优化,那时候还不知道做地图分线 ,这样可以显著降低同屏用户数,但是缺点也很大,玩家感觉不够热闹。只能硬着头皮做着千人同屏的优化,没想到那时候就是人生的巅峰,因为那个时候确实导量很厉害,很容易几千人在线,现在基本只有爆款游戏才能遇到这种情况了。一开始测试的时候,发现...原创 2019-09-03 01:31:06 · 944 阅读 · 0 评论