Akka Actor 4个核心操作

来自:http://markusjura.github.io/akka-intro-slides/ 的笔记

  1. create:创建新的Actor。
    每个 Actor 表示为一个 ActorRef;
    没法访问 Actor 实例;
    一个Actor引用允许你发送消息到一个 Actor。

  2. send:发送消息到其他 Actor。
    需要一个 Actor 引用;
    异步和非阻塞(fire-and-forget);
    注意:消息必须是不可变的。
    最佳实践:
    使用 object 和/或 case 类;
    在 actor的伴生对象里定义消息协议。

  3. Become:为处理下一个消息改变行为。
    动态定义Actor的行为;
    通过接收消息触发;
    将对它接收到的消息作出不同的反应。

    用途:
    实现有限状态机;
    让高度竞争的Actor自适应地转换他自己为 Actor 池或路由Router;
    实现优雅的降级;
    派生出通用的工作者Actor,成为管理者当前需要的。

  4. Supervise:管理其他 Actor 的失败。
    监管策略:

      每个Actor有一个默认的监管策略:
           ActorInitializationException → Stop
           ActorKilledException → Stop
           Exception → Restart
           Throwable → Escalate
           Otherwise → Escalate
    
      策略可以被覆写;
    

欢迎关注我的微信公众号: coderbee笔记,可以更及时回复你的讨论。

Java 对象内存布局

本文来自:http://www.ibm.com/developerworks/cn/java/j-codetoheap/

寻址能力与用户空间

进程能够处理的位数取决于处理器能寻址的内存范围,处理器的寻址能力取决于处理器的位数,比如 32 位能寻址 2^32,也就是 4G。

处理器提供的部分可寻址范围由 OS 本身用,供操作系统内核以及 C 运行时。OS 和 C 运行时占用的内存数量取决于所用的 OS,比如 Windows 默认占用 2GB。剩余的可寻址空间是供运行的实际进程使用的内存(用户空间)。

对于 Java 应用程序,用户空间是 Java 进程占用的内存,实际上包含两个池:Java 堆和本机(非 Java)堆。Java 堆的大小由 JVM 的 Java 堆设置控制:-Xms 和 -Xmx 分别设置最小和最大 Java 堆。在按照最大的大小设置分配了 Java 堆之后,剩下的用户空间就是本机堆。
32bit JVM

可寻址范围总共有 4GB,OS 和 C 运行时大约占用了其中的 1GB,Java 堆占用了将近 2GB,本机堆占用了其他部分。请注意,JVM 本身也要占用内存,就像 OS 内核和 C 运行时一样,而 JVM 占用的内存是本机堆的子集。

继续阅读