java 性能优化实践——JAVA 语言性能技术

	/**
     * java 性能优化实践
     *      @JAVA 语言性能技术
     *          Collections
     *          Map
     *              MultiMap Google
     *      C++情况下动态内存是手动处理的,在程序员的控制之下显式管理对象生命周期,当对象被删除,析构就发生
     *          资源的获取和释放直接和对象的生命周期相关
     *
     *      Java的内存管理子系统是一个根据需要运行的垃圾收集器
     *          在用于分配的可用内存耗尽时做出响应
     *
     *      @方法句柄
     *          @invokedynamic 更灵活的确定在调用点要执行哪个方法?
     *              直到运行时才能确定调用哪个方法
     *              当调用点通过解释器到达时,回调用一个特殊的辅助方法,所谓的引导方法BSM ,BSM返回一个对象
     *              该对象表示在这个调用点应该调用的实际方法,被称为调用目标,被加入到了这个调用点中
     *
     *          一个关键的概念是方法句柄(method handle)是一个对象,表示应该从invokedynamic调用点调用的方法
     *
     *      @并发性能技术
     *          @JMM java 内存模型
     *              试图处理的问题
     *                  当两个处理器核心访问相同的数据会发生什么?
     *                  什么时候能够保证他们看到的数据是相同的?
     *                  内存缓存对这些答案有什么影响?
     *              做出的两个保证
     *                  与排序相关的保证
     *                  与跨线程更新的可见性相关的保证
     *              @强内存模型(strong memory model)
     *                  所有核心在任何时候看到的值总是相同的
     *              @弱内存模型 weak memory model
     *                  不同的核心可能看到不同的值
     *                  有特殊的缓存机制控制这种情况出现的时机
     *              @JMM的保证基于的主要概念
     *                  @先行发生
     *                      一个事件确定在另一个事件之前发生
     *
     *                  @同步
     *                      事件将导致对象图与主内存同步
     *
     *                  @类串行
     *                      指令在执行线程之外看上去是按顺序执行的
     *
     *                  @先释放再获取
     *                      锁要先被某个线程释放,之后才可以被下一个线程获取
     *
     *              @线程对对象的状态有自己的描述,它所做的任何改变都必须刷新到主内存中,然后由访问其他先相同数据的线程重新获取。
     *              @现在我们看java关键字——synchronized指的就是持有管程(monitor)的这个线程的本地视图已经和主内存同步(synchronized-with)
     *                  synchronized 是保证数据跨多个线程的排序和可见性的一种机制。
     *
     *              @同步的方法和块不仅定义了线程必须执行同步的接触点,还定义了一些代码块,这些代码块必须在其他同步的块或方法启动之前全部完成。
     *
     *              @对于非同步访问,JMM没做出任何说明,在一个线程上所做的更改何时会对其他线程可见,没有任何保证。
     *
     *              synchronized的局限性
     *                  同等对待已锁定对象上的所有synchronized操作
     *                  锁的获取和释放必须在一个方法的级别或一个方法内的synchronized块内完成
     *                  要么获取锁,要么线程被阻塞;如果无法获取锁,则无法尝试获取锁并继续执行处理。
     *
     *              @线程之间的java同步是一种合作机制,一个不遵守则不能正常工作——苛刻的要求
     *
     *         @构建并发库
     *              java提供的核心构建块——多线程
     *                  锁(lock)和信号量(semaphore)
     *                  原子(atomic)
     *                  阻塞队列(blocking queue)
     *                  锁存器(latch)
     *                  执行器(executor)
     */

在这里插入图片描述
图来源《java 性能优化实践》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

P("Struggler") ?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值