zoukankan      html  css  js  c++  java
  • ByteBuffer

    1. 向ByteBuffer写入数据之后, 要先执行flip才能进行读取操作

    ByteBuffer中有两个关键属性:position与limit

    在写入模式的时候,position表示下一个byte会被写入的位置,limit表示这个ByteBuffer可以写入的最大容量

    在读取模式的时候,position表示下一个byte会被读取的位置,limit表示这个ByteBuffer可以读取的最大容量

    如果写入一些数据之后,不执行flip立即读取,那么会读出写入position后的无意义数据

    所以必须要执行flip切换状态

    public final Buffer flip() {
            limit = position;
            position = 0;
            mark = -1;
            return this;
        }

    执行flip操作后,就可以正确读取刚刚写入的数据了

    实话说我觉得ByteBuffer这种设计挺恶心的,相比之下netty的ByteBuf就好多了,设置了readerIndex与writerIndex这两个属性,无需状态切换就能正常读写

    2. 直接内存满引起的无限full gc

    日志如下:

    特点是:无限的full gc,但实际上heap内存占用极少

  • 相关阅读:
    利用 localStorage 储存css js
    实现图片延迟加载的一些 库
    less 应用
    vue 问题集合||
    一个简易的登录框
    python_协程方式操作数据库
    爬取知名社区技术文章_分析_1
    python_爬百度百科词条
    python_爬校花图片
    python_猜年龄
  • 原文地址:https://www.cnblogs.com/stevenczp/p/6785537.html
Copyright © 2011-2022 走看看