- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我基本理解托管代码和 native 代码的概念及其 difference .但是他们之间如何在技术上进行交流呢?想象一下以下示例:
我得到了一些为特定平台编译的静态或动态 C++ 库。现在我写了一个 Java Programm。在这段代码中,我使用“native”关键字调用库函数。我用字节码构建一个 jar 文件,c++ 库文件将保持独立。结果将不再与平台无关。
但是 java 程序如何知道调用的本地方法是否存在?
整个程序代码是如何在运行时执行的?我知道字节码将用 JIT 解释或编译。
这一切如何适应沙盒范式? native 代码是否也在沙箱内执行?
是否因为(java 和 c++)代码最终都是机器码才行得通?
也许这是个愚蠢的问题。但我一直想知道...
编辑:我得到了 3 个好的答案。真的无法决定哪个对我帮助最大。但我会将这个问题标记为已回答,以从我这边结束这个话题。
最佳答案
直到您调用该方法,它才会知道。 native 代码驻留在 .DLL 或 .so 中; Java 运行时查找与您创建的 native 方法相对应的特定入口点(如果您使用的是 JNI,则有一个工具可以解析这些方法并创建函数 stub ,这些 stub 将在编译时产生这些入口点)。如果所需的入口点不存在,则会抛出异常。
JIT 生成的代码并非完全自给自足;它必须不时调用外部 native 代码(用于低级运行时例程或操作系统服务)。相同的机制用于为您的 native 方法调用代码。
没有。你可以在那里做你在纯 C/C++ 程序中所做的一切。唯一能阻止它造成任何损害的是您拥有的外部安全措施(登录权限限制、其他操作系统保护、安全软件等),但 VM 不会保护您。
不,JNI 甚至在 JIT 出现之前就已经存在了。机制是相同的,如果字节码由解释器运行,并且您希望该解释器调用 native 代码,您只需要其中的一些逻辑来确定给定的方法是“外部的”并且应该作为 native 代码调用.此信息包含在已编译的 .class 文件中,当解释器或 JIT 加载它时,它会创建一个内存表示,便于在方法查找时直接调用。
关于java - 混合代码( native 、托管): how does it (technically) interoperate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33943822/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我目前正在使用一个相当老的产品,该产品背负着过去糟糕的程序员和糟糕的开发实践带来的大量技术债务。我们开始变得更好,技术债务的产生已经大大放缓。 我已经确定了应用程序中状况不佳的区域,并且我可以估算修复
我从这段代码中使用 删除横幅删除 while 循环记录,但现在我使用相同的东西从 while 循环更新记录,它没有给出错误,但它没有工作,即使我一个一个地检查查询是正确的。
我对 HTML5 的新服务器发送事件的技术背景很感兴趣。那里到底发生了什么? 您不需要服务器端的特殊功能 - 只需一如既往地发送您的数据,例如html HTTP 仍然是一种请求/响应协议(protoc
不是我想宣传 buydomains.com(实际上我鄙视他们的商业模式)而是需要展示它来说明我的问题,抱歉。 我遇到了 this website当您向上/向下调整浏览器窗口的宽度时,元素的大小会慢慢向
当我使用 A.column name, B.Column name where A = Table A and B = Table B 时,A.Column name 的技术名称是什么?它是前缀、标识
这个问题已经有答案了: What is the difference between const int*, const int * const, and int const *? (23 个回答)
我基本理解托管代码和 native 代码的概念及其 difference .但是他们之间如何在技术上进行交流呢?想象一下以下示例: 我得到了一些为特定平台编译的静态或动态 C++ 库。现在我写了一个
C# 语言规范的附录 A 处理文档注释,它指出有两种形式: single-line-doc-comment: /// input-charactersopt delimited-doc-comment
我在理解express.js路线时遇到了一些麻烦 如果我设置开箱即用的 hello world 应用程序,我将获得带有单个路由的基本设置 app.get('/', routes.home); 正如在e
我读过很多关于 Mac App Store 审查指南的帖子,但它更多地处理道德问题(年龄评级、版权、隐私等),而不是代码编写中的实际不当行为(存储、保护等) ...) 但是,论坛上似乎到处都是看到他们
我有一个与 Azure FHIR 服务器相关的一般性问题。具体来说,是否有“技术”原因使用它来存储电子健康记录(EHR)? 人们告诉我,主要的医疗保健提供商正在使用 FHIR 服务器来存储 EHR。我
通过代码分配字体名称时,我需要一个与任何字体选择或文件名对话框中显示的名称不同的名称。我如何获得正确的拼写?例如。对于 SKLabelNode(fontNamed: "GillSans-BoldI
我有许多来自不同部门的用户作为“内部测试人员”添加到 iOS 开发人员计划中。有时应用程序提交过程会出现错误,生成可怕的电子邮件,例如: iTunes Connect:您的应用“应用名称”(Apple
在下面的字数统计示例中: (Hello,1) (Hello,1) (Hello,1) (Hello,1) (Hello,1) Hadoop 的 reducer 函数会收集所有 5 个键为“Hello”
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
我正在尝试使用 Test Flight 为我的应用程序招募一些 beta 测试人员。没有一个测试人员会是内部员工或类似的东西——只是我认识的一些人愿意帮助测试我的应用程序(我是一个业余爱好者,反正没有
我创建了一个用于在 Azure AD B2C 上注册的自定义策略,目的是只允许电子邮件被列入白名单的用户能够注册到系统中。 为此,我使用 REST 技术配置文件配置了自定义策略。 我遵循了这个指南:h
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
因此,当通过浏览器完成正常的 GET 请求时,我认为浏览器是客户端。但是,当通过 AJAX 发出 GET 请求时,客户端是谁?我知道它仍然通过浏览器发生,但我想看看是否可以更详细地了解它。 你是否可以
我是一名优秀的程序员,十分优秀!