当前位置: 首页 > news >正文

建筑局网站沈阳世纪兴电子商务服务中心

建筑局网站,沈阳世纪兴电子商务服务中心,个人博客登录入口,wordpress文档阅读器从Java的第一个版本开始#xff0c;每天都有许多开发人员试图至少达到与C / C 一样好的性能。 JVM供应商正在通过实现一些新的JIT算法来尽力而为#xff0c;但仍有许多工作要做#xff0c;尤其是在我们如何使用Java方面。 例如#xff0c;对象-文件序列化有很多优… 从Java的第一个版本开始每天都有许多开发人员试图至少达到与C / C 一样好的性能。 JVM供应商正在通过实现一些新的JIT算法来尽力而为但仍有许多工作要做尤其是在我们如何使用Java方面。 例如对象-文件序列化有很多优势尤其是在易于存储的对象的读写中。 我将尝试阐明该主题。 所有测试都在下面显示的简单对象上执行 public class TestObject implements Serializable {private long longVariable;private long[] longArray;private String stringObject;private String secondStringObject; //just for testing nulls/* getters and setters */ } 为了更简洁我将仅显示write方法尽管另一种方法也非常相似。 完整的源代码可在我的GitHubhttp://github.com/jkubrynski/serialization-tests上找到。 最标准的Java序列化我们都从这里开始如下所示 public void testWriteBuffered(TestObject test, String fileName) throws IOException {ObjectOutputStream objectOutputStream null;try {FileOutputStream fos new FileOutputStream(fileName);BufferedOutputStream bos new BufferedOutputStream(fos);objectOutputStream new ObjectOutputStream(bos);objectOutputStream.writeObject(test);} finally {if (objectOutputStream ! null) {objectOutputStream.close();}} } 加快标准序列化的最简单方法是使用RandomAccessFile对象 public void testWriteBuffered(TestObject test, String fileName) throws IOException {ObjectOutputStream objectOutputStream null;try {RandomAccessFile raf new RandomAccessFile(fileName, rw);FileOutputStream fos new FileOutputStream(raf.getFD());objectOutputStream new ObjectOutputStream(fos);objectOutputStream.writeObject(test);} finally {if (objectOutputStream ! null) {objectOutputStream.close();} } 更复杂的技术是使用Kryo框架。 新旧版本之间的差异很大。 我都检查了。 因为性能比较没有发现任何明显的不同所以我将重点介绍第二个版本因为它更加用户友好甚至更快。 private static Kryo kryo new Kryo(); // version 2.xpublic void testWriteBuffered(TestObject test, String fileName) throws IOException {Output output null;try {RandomAccessFile raf new RandomAccessFile(fileName, rw);output new Output(new FileOutputStream(raf.getFD()), MAX_BUFFER_SIZE);kryo.writeObject(output, test);} finally {if (output ! null) {output.close();}} } 最后一个选择是受Martin Thompson文章启发的解决方案。 它显示了如何以C 方式和Java处理内存 public void testWriteBuffered(TestObject test, String fileName) throws IOException {RandomAccessFile raf null;try {MemoryBuffer memoryBuffer new MemoryBuffer(MAX_BUFFER_SIZE);raf new RandomAccessFile(fileName, rw);test.write(memoryBuffer);raf.write(memoryBuffer.getBuffer());} catch (IOException e) {if (raf ! null) {raf.close();}} } TestObject的写入方法如下所示 public void write(MemoryBuffer unsafeBuffer) {unsafeBuffer.putLong(longVariable);unsafeBuffer.putLongArray(longArray);// we support nullsboolean objectExists stringObject ! null;unsafeBuffer.putBoolean(objectExists);if (objectExists) {unsafeBuffer.putCharArray(stringObject.toCharArray());}objectExists secondStringObject ! null;unsafeBuffer.putBoolean(objectExists);if (objectExists) {unsafeBuffer.putCharArray(secondStringObject.toCharArray());} } 直接内存缓冲区类简称只是为了展示这个主意 public class MemoryBuffer {// getting Unsafe by reflectionpublic static final Unsafe unsafe UnsafeUtil.getUnsafe();private final byte[] buffer;private static final long byteArrayOffset unsafe.arrayBaseOffset(byte[].class);private static final long longArrayOffset unsafe.arrayBaseOffset(long[].class);// other offsets private static final int SIZE_OF_LONG 8;// other sizes private long pos 0;public MemoryBuffer(int bufferSize) {this.buffer new byte[bufferSize];}public final byte[] getBuffer() {return buffer;}public final void putLong(long value) {unsafe.putLong(buffer, byteArrayOffset pos, value);pos SIZE_OF_LONG;}public final long getLong() {long result unsafe.getLong(buffer, byteArrayOffset pos);pos SIZE_OF_LONG;return result;}public final void putLongArray(final long[] values) {putInt(values.length);long bytesToCopy values.length 3;unsafe.copyMemory(values, longArrayOffset, buffer, byteArrayOffset pos, bytesToCopy);pos bytesToCopy;}public final long[] getLongArray() {int arraySize getInt();long[] values new long[arraySize];long bytesToCopy values.length 3;unsafe.copyMemory(buffer, byteArrayOffset pos, values, longArrayOffset, bytesToCopy);pos bytesToCopy;return values;}/* other methods */ } 卡尺运行多个小时的结果如下所示 全程旅行[ns] 标准偏差[ns] 标准 207307 2362 英国皇家空军的标准 42661 733 KRYO 1.x 12027 112 KRYO 2.x 11479 259 不安全 8554 91 最后我们可以得出一些结论 不安全的序列化比java.io.Serializable的标准用法快23倍以上 使用RandomAccessFile可以将标准缓冲序列化速度提高近4倍 Kryo动态序列化比手工实现的直接缓冲区慢约35。 最后我们可以看到仍然没有金锤。 对于我们很多人来说获得3000 ns0.003ms的值不值得为我们要与文件序列化的每个对象编写自定义实现。 对于标准解决方案我们主要选择Kryo。 然而在低延迟系统中100ns似乎是永恒的选择将完全不同。 参考来自JavaBLog博客的JCG合作伙伴 Jakub Kubrynski的快速Java和文件序列化加速。 翻译自: https://www.javacodegeeks.com/2013/09/speed-up-with-fast-java-and-file-serialization.html
http://www.sadfv.cn/news/81623/

相关文章:

  • 如何在木上做网站表白网页生成器软件
  • 企业建设网站公司名称大全网站别名
  • 辽宁省建设工程招投标协会网站中国企业500强中海油排名
  • 西安网站制作公司怎么选自己开发app所需的各种费用
  • net实用网站开发网站运营阶段
  • 湖北专业网站建设公司网站建设工作室介绍范文
  • 浦口区网站建设质量推荐做企业网站的字体大小要求
  • 高端服装产品网站建设后端和前端哪个是青春饭
  • 邹平做网站润东电子科技 网站建设
  • 他们怎么做的刷赞网站神农架网站建设
  • 网站架构思维导图怎么装wordpress
  • 网站建设10个基本步骤wordpress免费教育插件
  • 单页营销型网站建设网站功能建设描述书
  • 做网站赚广告费好做吗手机网游排行榜2022前十名最新
  • 重庆网站建设公司招聘长春仿站定制模板建站
  • 做网站通过什么赚钱哪些网站做英语比较好
  • 做宠物网站心得微信客户端登录入口
  • 营销网站制作方法智慧团建注册登录入口官网手机版
  • 云图书馆平台网站建设网络建设与运维
  • 中山网站建设文化案例怎么制作公司宣传图片
  • 营销型网站建设工资怎么查询企业信息
  • 唐河网站制作如何把一个静态网站
  • 西安有什么好玩的地方嘉兴优化网站价格
  • asp门户网站源码商城网站项目工作的流程
  • 做网站学生作业免费网站推广方式
  • 山东天成水利建设 网站网站支付链接怎么做的
  • 2018年深圳建设网站公司网站推广工具 刷链接
  • 中国建设银行南京分行网站首页网站大学报名官网入口
  • 哈尔滨网站建设 博客网站建设分金手指专业十九
  • 自己网站做第三方支付西安营销推广