Skip to content
This repository was archived by the owner on Oct 23, 2024. It is now read-only.

fastjson在jdk1.8上面开启asm效率不如关闭高,默认该关闭了吧? #385

Closed
qifanyang opened this issue Aug 5, 2015 · 8 comments

Comments

@qifanyang
Copy link
Contributor

        SerializeConfig config = new SerializeConfig();
        //config.setAsmEnable(false);//字关闭asm
        //long start = System.currentTimeMillis();

        //序列化一个200个属性的类,关闭asm用时大约0.160s,开启asm用时大约0.280s
        JSON.toJSONString(new _200FieldsBean(), config);

        //序列化三个200个属性的类,关闭asm用时大约0.214s,开启asm用时大约0.420s
//      JSON.toJSONString(new _200FieldsBean(), config);
//      JSON.toJSONString(new _201FieldsBean(), config);
//      JSON.toJSONString(new _202FieldsBean(), config);

        //序列化三个相同200个属性的类,关闭asm用时大约0.157s,开启asm用时大约0.280s
//      JSON.toJSONString(new _200FieldsBean(), config);
//      JSON.toJSONString(new _200FieldsBean(), config);
//      JSON.toJSONString(new _200FieldsBean(), config);
@qifanyang qifanyang reopened this Aug 5, 2015
@wenshao
Copy link
Member

wenshao commented Aug 5, 2015

跑一次预热不算啊

@qifanyang
Copy link
Contributor Author

我的理解是跑第一次,asm创建字节码花费时间多.第一次创建会放入IdentityHashMap缓存,第二次直接使用.

但是我的测试使用一个带有200字段的类运行几次,在JDK8中开启asm花费大概是关闭的两倍,估计是JDK对反射做了优化,暂时没去读源码.

下面是测试代码:

        SerializeConfig config = new SerializeConfig();
        config.setAsmEnable(true);
        long start = System.currentTimeMillis();
        JSON.toJSONString(new _200FieldsBean(), config);
        JSON.toJSONString(new _200FieldsBean(), config);
        JSON.toJSONString(new _200FieldsBean(), config);
        JSON.toJSONString(new _200FieldsBean(), config);
        JSON.toJSONString(new _200FieldsBean(), config);
        JSON.toJSONString(new _200FieldsBean(), config);
        System.out.println("open asm cost timeMillis: " + (System.currentTimeMillis() - start) + "ms");
//open asm cost timeMillis: 218ms

        SerializeConfig config = new SerializeConfig();
        config.setAsmEnable(false);
        long start = System.currentTimeMillis();
        JSON.toJSONString(new _200FieldsBean(), config);
        JSON.toJSONString(new _200FieldsBean(), config);
        JSON.toJSONString(new _200FieldsBean(), config);
        JSON.toJSONString(new _200FieldsBean(), config);
        JSON.toJSONString(new _200FieldsBean(), config);
        JSON.toJSONString(new _200FieldsBean(), config);
        System.out.println("close asm cost timeMillis: " + (System.currentTimeMillis() - start) + "ms");
//close asm cost timeMillis: 112ms;

bean里面是200个int字段

@zhaiyuyong
Copy link

环境信息:

java version:1.8.0_40
jetty version:9.2.9.v20150224
fastjson version:1.2.3

现在老是出现metaspace oom
打开jvm-verbose:class
一直出现加载这个类,请问是什么原因?

[Loaded Serializer_3725 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3726 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3727 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3728 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3729 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3730 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3731 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3732 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3733 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3734 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3735 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3736 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3737 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3738 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3739 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3740 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3741 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3742 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Unloading class sun.reflect.GeneratedConstructorAccessor128 0x00000007c099a028]
[Loaded Serializer_3743 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3744 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3745 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3746 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3747 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3748 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3749 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3750 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3751 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3752 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3753 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3754 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3755 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3756 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3757 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3758 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3759 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3760 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3761 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3762 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3763 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3764 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3765 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3766 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3767 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]
[Loaded Serializer_3768 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]

@qifanyang
Copy link
Contributor Author

metaspace oom? 估计是fastjson创建字节码占用了太多metaspace, 你把空间设置大一些就不会OOM了

@zhaiyuyong
Copy link

但是metaspace是一直增长的,之前设置到512M OOM 现在设置到1G ,class load count也是一直增长unload 没有变化

@qifanyang
Copy link
Contributor Author

[Loaded Serializer_3768 from file:/tmp/jetty-0.0.0.0-8080-bybev16.war-_bybev16-any-7392887708992491162.dir/webapp/WEB-INF/lib/fastjson-1.2.3.jar]

你这个估计是在不停的创建字节码,fastjson缓存的字节码没有使用到,你把JDK版本编程7或者6试试吧,然后再去看下jdk8 metaspace的模型这些, 我对jdk8 metaspace也不了解

@zhaiyuyong
Copy link

OK 我试试jdk7 但是这台机器上另外一个springboot应用也使用的fastjson同样版本没问题,出问题的是使用jetty启的war

@wenshao
Copy link
Member

wenshao commented Apr 13, 2016

需要将SerializeConfig缓存起来,或者使用SerializeConfig.globalInstance

@wenshao wenshao closed this as completed Apr 13, 2016
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants