我应该避免在全局队列中创建 JSContext 吗?

2024-02-19

我刚刚收到客户设备的崩溃日志,它在这里崩溃了:

dispatch_async(dispatch_get_global_queue(0, 0), ^{

    JSContext *javaScriptContext = [[JSContext alloc] init];

这是崩溃日志:

Thread 11 Crashed:
0   JavaScriptCore                  0x31009cd6 WTFCrash + 54
1   JavaScriptCore                  0x30e0edf6 WTF::OSAllocator::reserveAndCommit(unsigned long, WTF::OSAllocator::Usage, bool, bool, bool) + 166
2   JavaScriptCore                  0x30e0ed2a WTF::OSAllocator::reserveUncommitted(unsigned long, WTF::OSAllocator::Usage, bool, bool, bool) + 14
3   JavaScriptCore                  0x30e14736 JSC::JSStack::JSStack(JSC::VM&, unsigned long) + 74
4   JavaScriptCore                  0x30e146d2 JSC::Interpreter::Interpreter(JSC::VM&) + 22
5   JavaScriptCore                  0x30e10fb8 JSC::VM::VM(JSC::VM::VMType, JSC::HeapType) + 2516
6   JavaScriptCore                  0x30fbf48e JSC::VM::createContextGroup(JSC::HeapType) + 22
7   JavaScriptCore                  0x30fbdc86 JSContextGroupCreate + 14
8   JavaScriptCore                  0x30fd209e -[JSVirtualMachine init] + 6
9   JavaScriptCore                  0x30fbd122 -[JSContext init] + 46
10  <redacted>
11  libdispatch.dylib               0x3a776d78 _dispatch_call_block_and_release + 8
12  libdispatch.dylib               0x3a77dda0 _dispatch_root_queue_drain + 216
13  libdispatch.dylib               0x3a77df88 _dispatch_worker_thread2 + 52
14  libsystem_pthread.dylib         0x3a8b8dbc _pthread_wqthread + 296
15  libsystem_pthread.dylib         0x3a8b8c80 start_wqthread + 4

确实是 WTFC 崩溃。

此时,其他几个线程正忙于处理与 Javascript 相关的内存内容:

Thread 10:
0   libsystem_kernel.dylib          0x3a83f970 _kernelrpc_mach_vm_deallocate_trap + 20
1   libsystem_kernel.dylib          0x3a83fc5a mach_vm_deallocate + 26
2   libsystem_kernel.dylib          0x3a83fc36 vm_deallocate + 14
3   JavaScriptCore                  0x30e18f20 JSC::BlockAllocator::releaseFreeRegions() + 64
4   JavaScriptCore                  0x30f89784 JSC::CopiedSpace::~CopiedSpace() + 20
5   JavaScriptCore                  0x30faea28 JSC::Heap::~Heap() + 336
6   JavaScriptCore                  0x30fbf434 JSC::VM::~VM() + 2600
7   JavaScriptCore                  0x30e0bb82 JSC::JSLockHolder::~JSLockHolder() + 90
8   JavaScriptCore                  0x30fbdcf8 JSContextGroupRelease + 76
9   JavaScriptCore                  0x30fd21be -[JSVirtualMachine dealloc] + 22
10  libobjc.A.dylib                 0x3a29eb06 objc_object::sidetable_release(bool) + 170
11  libobjc.A.dylib                 0x3a290002 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 354
12  libdispatch.dylib               0x3a77de08 _dispatch_root_queue_drain + 320
13  libdispatch.dylib               0x3a77df88 _dispatch_worker_thread2 + 52
14  libsystem_pthread.dylib         0x3a8b8dbc _pthread_wqthread + 296
15  libsystem_pthread.dylib         0x3a8b8c80 start_wqthread + 4

Thread 15 name:  JavaScriptCore::BlockFree
Thread 15:
0   libsystem_kernel.dylib          0x3a851f38 __psynch_cvwait + 24
1   libsystem_pthread.dylib         0x3a8ba224 _pthread_cond_wait + 536
2   libsystem_pthread.dylib         0x3a8bb040 pthread_cond_timedwait + 40
3   JavaScriptCore                  0x30e12eb8 WTF::ThreadCondition::timedWait(WTF::Mutex&, double) + 104
4   JavaScriptCore                  0x30e12ce4 JSC::BlockAllocator::blockFreeingThreadMain() + 88
5   JavaScriptCore                  0x30e103a8 WTF::wtfThreadEntryPoint(void*) + 12
6   libsystem_pthread.dylib         0x3a8bac1a _pthread_body + 138
7   libsystem_pthread.dylib         0x3a8bab8a _pthread_start + 98
8   libsystem_pthread.dylib         0x3a8b8c8c thread_start + 4

Thread 16 name:  JavaScriptCore::Marking
Thread 16:
0   libsystem_kernel.dylib          0x3a851f38 __psynch_cvwait + 24
1   libsystem_pthread.dylib         0x3a8ba224 _pthread_cond_wait + 536
2   libsystem_pthread.dylib         0x3a8bb000 pthread_cond_wait + 36
3   JavaScriptCore                  0x30fae23e JSC::GCThread::waitForNextPhase() + 74
4   JavaScriptCore                  0x30fae298 JSC::GCThread::gcThreadMain() + 48
5   JavaScriptCore                  0x30e103a8 WTF::wtfThreadEntryPoint(void*) + 12
6   libsystem_pthread.dylib         0x3a8bac1a _pthread_body + 138
7   libsystem_pthread.dylib         0x3a8bab8a _pthread_start + 98
8   libsystem_pthread.dylib         0x3a8b8c8c thread_start + 4

Thread 17 name:  JavaScriptCore::BlockFree
Thread 17:
0   libsystem_kernel.dylib          0x3a851f38 __psynch_cvwait + 24
1   libsystem_pthread.dylib         0x3a8ba224 _pthread_cond_wait + 536
2   libsystem_pthread.dylib         0x3a8bb040 pthread_cond_timedwait + 40
3   JavaScriptCore                  0x30e12eb8 WTF::ThreadCondition::timedWait(WTF::Mutex&, double) + 104
4   JavaScriptCore                  0x30e12ce4 JSC::BlockAllocator::blockFreeingThreadMain() + 88
5   JavaScriptCore                  0x30e103a8 WTF::wtfThreadEntryPoint(void*) + 12
6   libsystem_pthread.dylib         0x3a8bac1a _pthread_body + 138
7   libsystem_pthread.dylib         0x3a8bab8a _pthread_start + 98
8   libsystem_pthread.dylib         0x3a8b8c8c thread_start + 4

那么...创建一个有什么问题JSContext在全局队列中?我应该采取什么不同的措施来避免这个问题?


幸运的是它是开源的!

http://www.opensource.apple.com/source/JavaScriptCore/JavaScriptCore-7534.57.3/wtf/OSAllocatorPosix.cpp http://www.opensource.apple.com/source/JavaScriptCore/JavaScriptCore-7534.57.3/wtf/OSAllocatorPosix.cpp

void* OSAllocator::reserveAndCommit(size_t bytes, Usage usage, bool writable, bool executable, bool includesGuardPages)

尝试通过分配一些内存来分配虚拟机

result = mmap(result, bytes, protection, flags, fd, 0);
    if (result == MAP_FAILED) {
       ...
            CRASH();
    }

内存分配失败并且应用程序崩溃。

所以我最好的猜测是由于内存不足而出现此问题。

您要分配多少个?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该避免在全局队列中创建 JSContext 吗? 的相关文章

  • 在 Swift 中使用 commitEditingStyle 动态删除 UITable 部分

    我正在处理一个无法解决的问题 我有一个来自客户数据库数组的名称表 每个客户在其他数据成员中都有一个名称属性 我可以成功删除某个部分中的行 但我不能删除该部分 当该部分中的最后一行被删除时 该部分必须消失 I got NSInternalIn
  • 如何将字符串从 Applescript 传递到 Objective C

    我正在开发一个应用程序 我需要能够传递一个字符串变量 from 苹果脚本 to 目标C 我已经弄清楚如何从 Objective C 类中的方法运行 Applescript 但我需要能够将 NSString 设置为 Applescript 中
  • 如何在 SQLite 中替换字符串?

    如何更新具有以下内容的表列 var mobile 233KKFSDK3234 Documents Page jpg 并将其替换为 Documents Page jpg 在 SQLite 中 注意 所有文字 除了 Documents 是动态的
  • 有没有办法阻止 iOS 上的 Safari 在关闭时清除网站的 cookie?

    我的移动网络应用程序的一位用户抱怨说 每次他关闭手机屏幕后使用该应用程序时 他都必须重新登录该应用程序 发生的情况是 当屏幕关闭时 或者当您通过双击主页按钮并滑开 Safari 来完全关闭 Safari 时 Safari 会清除该网站的 C
  • 如何从 iOS 应用程序检测不安全的 wifi 网络

    我想检测我的应用程序中是否存在不安全的 wifi 网络 是否有任何公共 iOS API 可以实现相同的目的 没有记录的 API 可以获取该信息 如果您的应用程序需要通过网络发送和接收敏感数据 您通常应该假设没有安全连接
  • NSOperation 中委托的使用

    我正在尝试利用CLLocationManager in an NSOperation 作为其中的一部分 我需要能够startUpdatingLocation然后等到收到 CLLocation 后才完成操作 目前我已经完成了以下操作 但是委托
  • iOS 解析如何通过 URL 下载文件

    我正在将 parse 用于我的聊天应用程序 当我上传文件时 我保留该 url 并将该 url 发送给其他用户 然后其他用户可以通过该 URL 下载文件 这是我上传文件的代码 void uploadBlob NSData blob fileN
  • 核心数据:为什么必须调用重新加载数据才能使我的应用程序运行?

    我花了整个晚上调试一个简单的应用程序 该应用程序从网络检索一张图像 是的 是的 旨在让我的生活更轻松 并将其显示在表格视图中 我这样做是为了练习学习核心数据 在我修复它之前 错误消息显示如下 2012 09 30 06 16 12 854
  • 如何将 UIImageView 裁剪为自定义形状

    用户是否可以在该位周围画一条虚线 圆圈 UIImageView他们希望裁剪到 然后为UIImageView调整大小到这些点 这有点像 Photoshop 中的套索 选取框效果 更新 从 iOS 8 x 开始 UIImageView 提供了m
  • ShareKit + Facebook 身份验证不起作用

    我正在使用 ShareKit 从我正在开发的 PhoneGap 应用程序发布到 Facebook 我在 Facebook 中创建了该应用程序 并在我的项目中安装了该插件 Twitter 工作正常 但当我尝试在 Facebook 上分享时出现
  • iOS NSURLSession,如何在didCompleteWithError中重试

    我想在我的服务器上尝试一次调用 直到成功为止 我想每 30 秒尝试一次 所以我使用 NSURLSession 进行通话 NSURLSessionDownloadTask task self session downloadTaskWithR
  • 使用prepareForSegue传递数据

    我试图将数据从viewController 1传递到viewController2 我有2个按钮和1个segue 因此有一个segue标识符 这2个按钮 按下时每个按钮应显示 1个标签用于显示标题 1个textView用于显示定义 我很难显
  • 使用 Cocoa/OSX 合并/堆叠两个图像

    我有一个 CGImageRef 我们称之为原始图像 和一个透明 png 水印 我正在尝试编写一种方法将水印放置在原始内容之上 并返回 CGImageRef 在 iOS 中 我会使用 UIKit 将它们绘制到上下文中 但这在 OSX 中似乎不
  • 将捕获的图像精确裁剪为 AVCaptureVideoPreviewLayer 中的外观

    我有一个使用 AV Foundation 的照片应用程序 我使用 AVCaptureVideoPreviewLayer 设置了一个预览层 它占据了屏幕的上半部分 因此 当用户尝试拍照时 他们只能看到屏幕上半部分看到的内容 这很好用 但是当用
  • 为每行 NSTableView 文本着色

    我有一个 NSTableView 它显示我拥有的对象数组 对于每个对象 行 我想根据在每个对象上运行的函数的结果来更改显示的文本的颜色 因此 例如表中存在于另一个列表 或其他一些要求 中的所有对象 我想以绿色文本显示它们 不存在的对象以红色
  • 如何在 Swift 中创建 UIAlertView?

    我一直在努力在 Swift 中创建 UIAlertView 但由于某种原因我无法得到正确的语句 因为我收到此错误 找不到接受提供的 init 重载 论点 我是这样写的 let button2Alert UIAlertView UIAlert
  • Xcode 在代码签名身份中看不到我的开发人员证书

    我续订了 IOS 开发人员证书 从钥匙串中删除了旧证书 然后单击了我的证书 钥匙串中的一切看起来都很正常 我有分发 开发人员 WWDC 证书 每个配置文件看起来都有效 并带有绿色标记 在组织器中的团队和配置文件部分下 但在代码签名身份下的
  • 使用 UItableViewCell 类型的表达式初始化“CustomCellView *”的指针类型不兼容

    你能帮我理解和 修复下面的错误吗 我不明白CustomCellView是一个子类UItableViewCell 代码已编译 但警告仍然存在 Incompatible pointer type initializing CustomCellV
  • iOS 13 检查 CLLocationManager 的临时授权状态

    根据 WWDC 视频 https developer apple com videos play wwdc2019 705 https developer apple com videos play wwdc2019 705 当你要求 Al
  • 如果加载 dylib,垃圾收集工作队列会崩溃

    我们正在将应用程序从 10 6 移植到 10 8 我正在查看我们在应用程序中加载的 dylib 我面临着非常不寻常的崩溃垃圾收集工作队列并附有以下消息 malloc Thread suspend unable to suspend a th

随机推荐