最近发现游戏服产生了大量的Long临时对象,导致YGC的频率过高。

用Jprofiler调试了下,发现了大部分是从map的get()方法产生的(游戏里面有些线程会比较频繁的去一些map里面查询数据)

就像下面的例子:

import java.util.HashMap;

import java.util.Map;

import java.util.Timer;

import java.util.TimerTask;

public class GcTest {

public static Map map = new HashMap();

public static void main(String args[]) {

Timer timer = new Timer();

timer.schedule(new TimerTask() {

@Override

public void run() {

test1();

test2("a", "b", "c");

}

}, 100L, 100L);

}

public static void test1() {

long id = 12345678910L;

map.get(id);

System.out.println("test1");

}

public static void test2(String...params) {

System.out.println("test2");

}

}

首先map的key为Long类型,然而传给map.get()方法的参数却是普通的long,这时候java内部会先隐式的调用Long.valueOf(long),临时的产生了一个对应的Long对象,然后用它来去容器里面查询。ps:对于 -128 <= x <= 127 这种比较小的数,java本身会做缓存,不会去new 一个Long对象这个Long对象在查询完后,就没有引用了,一直呆在堆内存里,直到YGC发生时才回收

同样的,jdk1.5新增的方法动态参数,也会隐式的产生一个对应的数组对象

知道了问题所在就好办了,对于我的游戏来说,比较频繁的就是根据玩家的id去查询一些信息,只要把玩家的id从long改成Long,以后所有查询都通过这个唯一的Long对象来传送参数

java 隐式构造,java隐式创建的对象相关推荐

  1. python定义一个复数类complex、并实现复数相加_用java定义一个复数类Complex,能够创建复数对象,并且实现复数之间的加、减运算...

    题目: 用java定义一个复数类Complex,能够创建复数对象,并且实现复数之间的加.减运算 复数具有实部和虚部两部分,如2+5i就是一个复数,其中2为实部,5i为虚部;两复数相加时,实部与实部相加 ...

  2. C++隐式构造与显式构造

    <一>  class Stock { private:string _company;long _share;double _val; }; C++提供了两种使用构造函数来初始化对象的方法 ...

  3. java方法的构造,java方法与构造

    public class StaticClass { static int i = 50; int y; // 构造只能有访问修饰符public.protected.private 修饰 (访问修饰符 ...

  4. Java:伪造工厂的闭包以创建域对象

    最近,我们想要创建一个域对象,该对象需要具有外部依赖关系才能进行计算,并且希望能够在测试中解决该依赖关系. 最初,我们只是在领域类中新建依赖项,但这使得无法在测试中控制其值. 同样,我们似乎不应该将这 ...

  5. scala 隐式转换与隐式参数

    隐式转换函数 指的是以implicit关键字声明的带有单个参数的函数,这种函数会自动引用,将值从一种类型转换为另一种类型.就是说如果类型不匹配时,会自动寻找一个隐式方法,把这个格式不匹配的事情解决掉. ...

  6. java 推流_使用java执行ffmpeg命令进行推流操作

    视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpe ...

  7. 1.7 Java创建对象详解(显式创建和隐含创建)

    对象是对类的实例化.对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为.Java 对象的生命周期包括创建.使用和清除,本文详细介绍对象的创建,在 Java 语言中创建对象分显式创建与 ...

  8. python隐式等待_selenium中隐式等待和显示等待的区别

    Selenium显示等待和隐式等待的区别 1.selenium的显示等待 原理:显示等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那 ...

  9. Scala 高阶函数(作为值的函数、匿名函数、闭包、柯里化)+隐式转换和隐式参数...

    Scala高级特性 1.    学习目标 1.1.   目标一:深入理解高阶函数 1.2.   目标二:深入理解隐式转换 2.    高阶函数 2.1.   概念 Scala混合了面向对象和函数式的特 ...

  10. Selenium中的隐式等待和显式等待

    在Selenium中,"等待"在执行测试中起着重要作用.在本文中,您将学习Selenium中"隐式"和"显式"等待的各个方面. 在本文中,您 ...

最新文章

  1. Python3中出现“No module named ‘StringIO‘
  2. minAreaRect函数
  3. Unable to handle kernel paging request at virtual address 问题定位
  4. 20180530更新
  5. Linux 文件和目录的属性及权限
  6. linux 系统arp检测工具,基于LinuxARP检测与防御系统.doc
  7. android 编辑9图片,Android基础入门教程——1.6 .9(九妹)图片怎么玩
  8. bootstracp实现树形列表_Java实现一致性哈希算法,并搭建环境测试其负载均衡特性...
  9. java改变人物动作_Java创建对象的动作分析
  10. 数据湖产业生态联盟简介
  11. Java 多线程设计模式
  12. OpenERP中商品销售的处理及案例解析
  13. html标签 补全方法 python,Python Beautiful Soup学习之HTML标签补全功能
  14. 我的周刊(第042期)
  15. 性能优化系列(五)网络性能优化
  16. 向量ab怎么用计算机打出来,数学ab上面加一横线-数学符号如何打?急急急!!!向量AB上的剪 – 手机爱问...
  17. 开发、运维、业务都说好的全栈云原生长这样
  18. 找工作,攒人品(4)
  19. 网格搜索(调参)与数据预处理
  20. proto3字段值为空时被忽略问题

热门文章

  1. python学习笔记4:函数
  2. python 操作excel表格
  3. 《HelloGitHub》第 13 期
  4. Python内置函数(28)——hash
  5. android深度探索第二章
  6. 解决Linux下SSH等终端乱码问题
  7. [转]通过秘钥实现scp不输入密码传送文件
  8. mysql 清理relay日志_Mysql 删除从数据库的relay logs最佳方式、最安全方式
  9. 使用Asp.net的TreeView来构建用户选择输入
  10. nginx+iis、NLB、Web Farm、Web Garden、ARR