java 隐式构造,java隐式创建的对象
最近发现游戏服产生了大量的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隐式创建的对象相关推荐
- python定义一个复数类complex、并实现复数相加_用java定义一个复数类Complex,能够创建复数对象,并且实现复数之间的加、减运算...
题目: 用java定义一个复数类Complex,能够创建复数对象,并且实现复数之间的加.减运算 复数具有实部和虚部两部分,如2+5i就是一个复数,其中2为实部,5i为虚部;两复数相加时,实部与实部相加 ...
- C++隐式构造与显式构造
<一> class Stock { private:string _company;long _share;double _val; }; C++提供了两种使用构造函数来初始化对象的方法 ...
- java方法的构造,java方法与构造
public class StaticClass { static int i = 50; int y; // 构造只能有访问修饰符public.protected.private 修饰 (访问修饰符 ...
- Java:伪造工厂的闭包以创建域对象
最近,我们想要创建一个域对象,该对象需要具有外部依赖关系才能进行计算,并且希望能够在测试中解决该依赖关系. 最初,我们只是在领域类中新建依赖项,但这使得无法在测试中控制其值. 同样,我们似乎不应该将这 ...
- scala 隐式转换与隐式参数
隐式转换函数 指的是以implicit关键字声明的带有单个参数的函数,这种函数会自动引用,将值从一种类型转换为另一种类型.就是说如果类型不匹配时,会自动寻找一个隐式方法,把这个格式不匹配的事情解决掉. ...
- java 推流_使用java执行ffmpeg命令进行推流操作
视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpe ...
- 1.7 Java创建对象详解(显式创建和隐含创建)
对象是对类的实例化.对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为.Java 对象的生命周期包括创建.使用和清除,本文详细介绍对象的创建,在 Java 语言中创建对象分显式创建与 ...
- python隐式等待_selenium中隐式等待和显示等待的区别
Selenium显示等待和隐式等待的区别 1.selenium的显示等待 原理:显示等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那 ...
- Scala 高阶函数(作为值的函数、匿名函数、闭包、柯里化)+隐式转换和隐式参数...
Scala高级特性 1. 学习目标 1.1. 目标一:深入理解高阶函数 1.2. 目标二:深入理解隐式转换 2. 高阶函数 2.1. 概念 Scala混合了面向对象和函数式的特 ...
- Selenium中的隐式等待和显式等待
在Selenium中,"等待"在执行测试中起着重要作用.在本文中,您将学习Selenium中"隐式"和"显式"等待的各个方面. 在本文中,您 ...
最新文章
- Python3中出现“No module named ‘StringIO‘
- minAreaRect函数
- Unable to handle kernel paging request at virtual address 问题定位
- 20180530更新
- Linux 文件和目录的属性及权限
- linux 系统arp检测工具,基于LinuxARP检测与防御系统.doc
- android 编辑9图片,Android基础入门教程——1.6 .9(九妹)图片怎么玩
- bootstracp实现树形列表_Java实现一致性哈希算法,并搭建环境测试其负载均衡特性...
- java改变人物动作_Java创建对象的动作分析
- 数据湖产业生态联盟简介
- Java 多线程设计模式
- OpenERP中商品销售的处理及案例解析
- html标签 补全方法 python,Python Beautiful Soup学习之HTML标签补全功能
- 我的周刊(第042期)
- 性能优化系列(五)网络性能优化
- 向量ab怎么用计算机打出来,数学ab上面加一横线-数学符号如何打?急急急!!!向量AB上的剪 – 手机爱问...
- 开发、运维、业务都说好的全栈云原生长这样
- 找工作,攒人品(4)
- 网格搜索(调参)与数据预处理
- proto3字段值为空时被忽略问题