Java基础-工作总结

        1 ByteBuffer使用总结

        最近涉及到UDP通信协议,需要发送UDP数据包,需要组织字节数组。想到StringBuffer,就想字节是否也有类似的缓冲类呢?网上查找之后找到了ByteBuffer类,使用了DirectByteBuffer,组织字节数据很容易。却在不了解这个类实现原理的情况下用了,然后出错了。由于项目时间很赶,就自己简单实现了一个同名的类,封装了put和get方法。还没及时看看当时调用出错的原因。

       这两天仔细看了ByteBuffer类结构,深入了解了下这个类。才知道使用DirectByteBuffer容易导致OutOfMemoryError.因为这个类分配的内存空间是直接使用本地内存的,而且只有在堆内存空间不足触发FullGC时才会回收DirectByteBuffer占用的本地内存的。通常情况下如果堆空间足够,在没有FullGC的情况下,使用DirectByteBuffer会导致内存泄漏。

      ByteBuffer的两种实现HeapByteByffer和DirectByteBuffer。HeapByteBuffer是堆内存,由GC管理。DirectByteBuffer则是绕过了JVM,经过底层的JNI,直接分配的是本地内存,可以避免缓冲区复制。

       结论:想要更好的使用一个类,还是需要先了解这个类的本质,不能想当然。

       2 并发编程实践读书笔记

       最近在阅读并发编程实践,摘录文中比较重要的几个概念如下。

       1)并发环境需要考虑同步的情况:涉及到对共享可变状态变量的访问时,必须对线程执行操作进行管理。

       2)竞态条件:多线程环境中,由于不恰当的执行时序而导致不正确的结果的情况。

       3)加锁:用锁来保护共享状态可变变量时,同一个类的所有状态可变的变量,他们都应该由同一个锁保护。所有线程对共享变量的修改都必须在同一个锁上同步。

       4)voliatle:一种弱同步机制,有两种语义。第一,禁止指令重排序;第二,将变量的更新操作通知到其它线程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值