Java高性能计算若干内容

1、分布式系统中高性能问题及难点(单一节点能力最高)
  • 内存和并发编程领域的难题;
  • 网络通信;
  • 事件编程;
2、内存和并发编程领域的难题
  • Java建立线程与CPU之间的映射及Heap与内存之间的透明化;
  • Java无法直接操作物理内存,目前可以DirectByteBuffer(可在堆外分配内存,可以跳过GC,但是内存释放有一些问题,移动过程中存在内存复制及CPU消耗(序列化与反序列化数组));
  • JEP(Java堆外内存),将已经定义外某些域(局部)中的变量(不会溢出)时可以分配在栈上而不是堆上,堆外放对象;
  • 内存存储通用难题
    • 内存使用效率问题;
    • 内存不足时磁盘溢出问题,透明访问;
    • 内存回收的问题;
  • CPU方面的问题
    • NUMA是内存共享设计下的一个难点;
  • 缓存友好的数据结构
    • 实现CPU的一次加载
    • 边界对齐;
    • 数据结构预算法;
    • 使用小类型;
    • 区分冷热数据;
    • 空间上连续分布;
    • Spark在缓存计算上进行了很多优化,在CPU的L1、L2、L3的缓存上进行设计;
    • 二分检索是查找有序数组的最简单并且最有效的算法之一,然而二分检索的随机跳跃性,导致算法并非缓存友好;
    • CATree基于B-数结构,降低查找算法及访问次数;HAT-trie是一个Cache敏感的字符串存储方法
    • “之前的算法都是基于单核,现在走入多核时代需要改进一些算法以适应多核”
  • GPU并行编程
    • CUDA编程,进行Java中逻辑的变化;
3、网络编程
  • Netty是否是性能最好的NIO?
  • CoraReactor网络交互工具(比Netty速度快很多,2μs);
  • Netty在进行select的时候产生大量垃圾;
  • OpenOnload高性能网络栈
4、高性能事件派发机制探讨
  • 线程切换的代价;
  • 时间片用完后,系统CPU正常调度下一个任务;
  • 当任务遇到IO阻塞,调度器将挂起此任务,继续下移任务;
  • 多任务抢占锁资源,当前任务没抢到,挂起;
  • 用户挂起让出CPU时间
  • 终端。硬件终端,外设发送电信号
  • 尽量避免线程频繁切换
  • Disruptor(高性能派发):RingBuffer(每个元素都有一个序列号):Cache编程、无锁编程,事件处理;
5、高性能的问题
  • 新硬件、数据规模、实时性带来挑战:新的数据结构及新的算法;
  • 分布式和云计算发展带来的挑战:网络性能及编程模型的改进;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值