mirror of
https://github.com/Tencent/Hippy.git
synced 2026-10-18 21:50:54 +08:00
4.6 KiB
Executable File
4.6 KiB
Executable File
V8 API
获取 V8 JS 引擎对象,并操作相关方法。
GetHeapStatistics
获取 js 堆内存信息。
!> 注意:该方法必须在 js 线程中调用(使用示例的 runInJsThread 方法)。
最低支持版本
2.15.0
V8 v8 = mHippyEngine.getV8();
if (v8 != null) {
mHippyEngine.getEngineContext().getBridgeManager().runInJsThread((param, e) -> {
boolean success = false;
try {
success = v8.getHeapStatistics(new Callback<V8HeapStatistics>() {
@Override
public void callback(V8HeapStatistics param, Throwable e) {
if (param != null) {
// success
} else {
// error
}
}
});
} catch (NoSuchMethodException ex) {
ex.printStackTrace();
}
if (!success) {
// error
}
});
}
GetHeapCodeStatistics
获取js堆中代码及其元数据的统计信息。
!> 注意:该方法必须在 js 线程中调用(使用示例的 runInJsThread 方法)。
最低支持版本
2.15.0
V8 v8 = mHippyEngine.getV8();
if (v8 != null) {
mHippyEngine.getEngineContext().getBridgeManager().runInJsThread((param, e) -> {
boolean success = false;
try {
success = v8.getHeapCodeStatistics(new Callback<V8HeapStatistics>() {
@Override
public void callback(V8HeapCodeStatistics param, Throwable e) {
if (param != null) {
// success
} else {
// error
}
}
});
} catch (NoSuchMethodException ex) {
ex.printStackTrace();
}
if (!success) {
// error
}
});
}
GetHeapSpaceStatistics
返回堆各个空间的统计信息。
!> 注意:该方法必须在 js 线程中调用(使用示例的 runInJsThread 方法)。
最低支持版本
2.15.0
V8 v8 = mHippyEngine.getV8();
if (v8 != null) {
mHippyEngine.getEngineContext().getBridgeManager().runInJsThread((param, e) -> {
boolean success = false;
try {
success = v8.getHeapSpaceStatistics(new Callback<ArrayList<V8HeapSpaceStatistics>>() {
@Override
public void callback(ArrayList<V8HeapSpaceStatistics> param, Throwable e) {
if (param != null) {
// success
} else {
// error
}
}
});
} catch (NoSuchMethodException ex) {
ex.printStackTrace();
}
if (!success) {
// error
}
});
}
WriteHeapSnapshot
生成一个堆快照(可导入 Chrome 浏览器开发者工具分析)。
!> 注意:该方法必须在 js 线程中调用(使用示例的 runInJsThread 方法)。
最低支持版本
2.15.0
V8 v8 = mHippyEngine.getV8();
if (v8 != null) {
File hippyFile = FileUtils.getHippyFile(mHippyEngine.getEngineContext().getGlobalConfigs().getContext());
String snapshotPath = hippyFile.getAbsolutePath() + File.separator + "snapshot" + File.separator + "1.heapsnapshot";
boolean success = false;
try {
success = v8.writeHeapSnapshot(snapshotPath, new Callback<Integer>() {
@Override
public void callback(Integer param, Throwable e) {
if (param == 0) {
// success
} else {
// error
}
}
});
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
if (!success) {
// error
}
}
printCurrentStackTrace
打印当前堆栈信息。
!> 注意:该方法必须在 js 线程中调用(使用示例的 runInJsThread 方法)。
最低支持版本
2.15.0
V8 v8 = mHippyEngine.getV8();
if (v8 != null) {
mHippyEngine.getEngineContext().getBridgeManager().runInJsThread((param, e) -> {
v8.printCurrentStackTrace((str, e1) -> LogUtils.e("hippy", "trace = " + str));
});
}
addNearHeapLimitCallback
添加一个回调。当 V8 堆大小接近最大限制的场景下会回调该方法。
!> 注意:该方法必须在 js 线程中调用(使用示例的 runInJsThread 方法)。
最低支持版本
2.15.0
V8 v8 = mHippyEngine.getV8();
if (v8 != null) {
mHippyEngine.getEngineContext().getBridgeManager().runInJsThread((param, e) -> {
v8.addNearHeapLimitCallback((currentHeapLimit, initialHeapLimit) -> currentHeapLimit * 2);
});
}
requestInterrupt
请求 V8 打断当前正在执行耗时长的 js 任务,并调用我们注入的回调方法。回调完成后控制权将会返回给 js 代码。
!> 该方法可以在任意线程中调用。
最低支持版本
2.15.0
V8 v8 = mHippyEngine.getV8();
if (v8 != null) {
v8.requestInterrupt((param, e) -> {
v8.printCurrentStackTrace((str, e1) -> LogUtils.e("hippy", "trace = " + str));
});
}