内存对象可移动的
使用内存管理器的
$memObject = $memoryManager->create($data);
"可移动"意思是这样的对象可以被交换并从内存中卸载,然后当应用程序代码访问该对象时再加载它. 锁定的
使用内存管理器的
$memObject = $memoryManager->createLocked($data);
"锁定的"意思是这样的对象绝不会被交换和从内存中卸载.
锁定的对象和可移动的对象提供相同的接口( 基于性能的考虑,应用程序或则开发者能决定一些对象应该决不会被交换是非常有用的. 访问锁定的对象更快,应为内存管理器不需要追踪这些对象的变化.
The locked objects class ( 内存容器 '值' 属性.
使用内存容器(可移动或者锁定)'
$memObject = $memoryManager->create($data);
echo $memObject->value;
$memObject->value = $newValue;
$memObject->value[$index] = '_';
echo ord($memObject->value[$index1]);
$memObject->value = substr($memObject->value, $start, $length);
访问内存对象数据的一个替代的方法是使用 内存容器接口内存容器提供下面的方法: getRef() 方法
public function &getRef();
如果此时对象不在内存中,可移动对象从缓存中加载. 如果对象从缓存中加载,并且受管理对象的内存使用量总和超过内存限制,将导致交换.
追踪数据的变化需要额外的资源.
$memObject = $memoryManager->create($data);
$value = &$memObject->getRef();
for ($count = 0; $count < strlen($value); $count++) {
$char = $value[$count];
...
}
touch() 方法
public function touch();
$memObject = $memoryManager->create($data);
...
$value = &$memObject->getRef();
for ($count = 0; $count < strlen($value); $count++) {
...
if ($condition) {
$value[$count] = $char;
}
...
}
$memObject->touch();
lock() 方法
public function lock();
它用于阻止一些你选择的对象被交换.正常情况,这是不需要的,因为内存管理器使用智能的算法决定候选的交换数据. 但是你明确地知道,在代码的这一部分对象不应该被交换,你可以锁定它们.
在内存中锁定的对象还保证了在解锁对象前
$memObject1 = $memoryManager->create($data1);
$memObject2 = $memoryManager->create($data2);
...
$memObject1->lock();
$memObject2->lock();
$value1 = &$memObject1->getRef();
$value2 = &$memObject2->getRef();
for ($count = 0; $count < strlen($value2); $count++) {
$value1 .= $value2[$count];
}
$memObject1->touch();
$memObject1->unlock();
$memObject2->unlock();
unlock() 方法
public function unlock();
当不再需要锁定是 isLocked() 方法
public function isLocked();
|