为什么在JVM内部类中存在的某些代码模式被转换为内部函数,而从我自己的类调用时相同的模式则不然.
例:
bitCount函数,当从Integer.bitCount(i)内调用时,将变成一个内在函数.但是当复制到我的类中然后调用将需要更长的时间来执行.
相比
Integer.bitCount(i)
MyClass.bitCount(i)
public static int bitCount(int i) {
// HD, Figure 5-2
i = i - ((i >>> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
i = (i + (i >>> 4)) & 0x0f0f0f0f;
i = i + (i >>> 8);
i = i + (i >>> 16);
return i & 0x3f;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用OTP管理程序行为来监督和重新启动子进程.然而,当孩子死亡时,我想以崩溃前的状态重新启动它.
如果我自己编写自定义主管,我可以收到{EXIT,Pid,Reason}消息并对其进行操作.当使用OTP管理程序行为时,它全部由OTP管理,我无法控制它.我实现的唯一回调函数是init.
在这种情况下是否有任何标准方法?如何自定义otp主管动态重启的子状态?如何使用OTP获取终止进程的Pid?或者也许可以在终止之前获得孩子的状态,然后将孩子恢复到崩溃之前的状态?
我有一个监督程序进程,启动子进程的数量.目前,当孩子死亡时,我会用新的Pid产生一个新的过程.这意味着我丢失了刚刚去世的子进程的状态信息.我希望我的客户端使用始终相同的标识符与子进程通信.尽管儿童过程可能会死亡并由主管重新启动.
我正在考虑使用唯一名称注册子进程并将子状态存储在ets表中.问题是 - 在Erlang中推荐这种问题的方法是什么?
谢谢!
为什么分支预测准确?我们是否可以从较高的层面来思考代码的某些分支如何在 99% 的时间内执行,而其余的则是特殊情况和异常处理?
我的问题有点模糊,但我只对这个问题的高层观点感兴趣。让我举一个例子
假设你有一个带有参数的函数
void execute(Input param) {
assertNotEmpty(param)
(...)
}
Run Code Online (Sandbox Code Playgroud)
我有条件地执行我的函数,给定的参数不为空。99% 的情况下这个参数确实是非空的。那么我是否可以考虑基于神经网络的分支预测,例如,在某种程度上,由于它已经无数次看到这样的指令流(这样的断言很常见),它会简单地了解到大多数时候该参数非空并且相应地采取分支?
那么我们是否可以从以下角度来思考我们的代码:代码越干净,越可预测,甚至更常见,我们就越容易使用分支预测器?
谢谢!