标签: native

为什么有些Java库方法委托给具有几乎相同签名的本机方法?

在深入研究JRE库的源代码之后,我注意到一个奇怪的常见代码结构,如下所示:

public int foo(double bar) {
    return foo0(bar);
}

private native int foo0(double bar);
Run Code Online (Sandbox Code Playgroud)

这个代码模式的目的是什么,为什么使用它而不是简单地将底层本机方法公开为公共方法?

java native

62
推荐指数
2
解决办法
3687
查看次数

如何调用存储在char数组中的机器代码?

我正在尝试调用本机机器语言代码.这是我到目前为止(它得到一个总线错误):

char prog[] = {'\xc3'}; // x86 ret instruction

int main()
{
    typedef double (*dfunc)();

    dfunc d = (dfunc)(&prog[0]);
    (*d)();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它确实正确地调用了函数并且它到达了ret指令.但是当它试图执行ret指令时,它有一个SIGBUS错误.是因为我在一个未清除执行的页面上执行代码或类似的东西?

那么我在这里做错了什么?

c c++ linux native machine-language

55
推荐指数
6
解决办法
1万
查看次数

哪里可以找到java.lang本机方法的源代码?

我对JNI非常熟悉,我很想看到java.lang包中某些本机方法的机器特定实现.Thread#currentThread(), 例如.

我在[JDK_HOME]/jre/bin中找到了一堆DLL,但就像我说的那样,我试图找到源代码.

有谁知道可以找到原生源代码的位置?它是否可用,或者它是否被Sun分类(oops我的意思是"我们在其中赢得它"Oracle)?

java java-native-interface native

54
推荐指数
2
解决办法
2万
查看次数

本机和托管代码之间的区别?

例如,在查看GlowCode分析器网站时,它说:

"GlowCode 6.2和x64配置文件本机,托管和混合C++,C#,.NET代码"

他们的意思是什么?

native managed

53
推荐指数
4
解决办法
6万
查看次数

在本机iPhone应用程序中重复背景图像

如果没有将UIWebView作为我的nib文件中最后面的图层,我怎样才能将重复的背景图像添加到iPhone应用程序(如分组UITableView背景中的灯芯绒外观)?

我是否需要创建一个与iPhone屏幕大小相同的图像并使用复制和粘贴手动重复它?

iphone cocoa-touch native repeat

47
推荐指数
1
解决办法
4万
查看次数

是否有用于JavaScript的本机机器代码编译器?

是否有用于JavaScript的本机机器代码编译器?我不是在谈论VM.如果它不存在可以做到吗?
我想知道它是否可以编译为二进制,因为语言的动态性质.

javascript native compilation native-code

42
推荐指数
3
解决办法
2万
查看次数

mylib.so有文本重定位.这会浪费内存并且存在安全风险.请修理

我的Android应用程序(使用本机库)在Android 4.4上打印此警告:

链接器mylib.so具有文本重定位.这会浪费内存并且存在安全风险.请修理.

你知道它是什么以及如何解决它吗?谢谢,

android native android-4.4-kitkat

41
推荐指数
1
解决办法
6万
查看次数

如何获取android的本机方法源代码

是否可以获取并观察Android的程序组件的本机方法代码.如果有人知道怎么做,请告诉我.

android native android-source

40
推荐指数
1
解决办法
1万
查看次数

这些运算符是什么意思(**,^,%,//)?

除了标准+,-,*/运营商; 但什么是这些均值(**,^,%,//)?

>>> 9+float(2) # addition
11.0
>>> 9-float(2) # subtraction
7.0
>>> 9*float(2) # multiplication
18.0
>>> 9/float(2) # division
4.5
>>>
>>> 9**float(2) # This looks like a square, (i.e. power 2) 
81.0
>>> 9**float(3) # So ** is equivalent to `math.pow(x,p)` ?
729.0
Run Code Online (Sandbox Code Playgroud)

又如何^操作?

>>> 9^int(2) # What is `^` in `x^u` , it only allows `int` for `u` …
Run Code Online (Sandbox Code Playgroud)

python math native operators

40
推荐指数
3
解决办法
38万
查看次数

如何将位图缓存到本机内存中

对于我的10,000点,我决定用这个很酷的网站来点缀一些东西:一种在本机内存上缓存位图的机制.

背景

Android设备的每个应用程序的内存量非常有限 - 堆的范围从16MB到128MB,具体取决于各种参数.

如果您通过此限制,则会获得OOM,当您使用位图时,这可能会发生多次.

很多时候,应用程序可能需要克服这些限制,对巨大的位图执行繁重的操作,或者只是存储它们以供以后使用,并且您需要

我想出的是一个简单的java类,它可以使事情变得更容易.

它使用JNI来存储位图数据,并能够在需要时恢复它.

为了支持该类的多个实例,我必须使用我发现的技巧(这里).

重要笔记

  • 数据仍然存储在RAM中,因此如果设备没有足够的RAM,应用程序可能会被杀死.

  • 记得尽快释放记忆.它不仅可以避免内存泄漏,而且还可以避免在您的应用程序到达后台时首先被系统优先处理.

  • 如果您不想忘记释放内存,可以在每次还原位图时释放它,或者使类实现Closable.

  • 作为一种安全措施,我已经使它在finalize()方法中自动释放其本机内存,但不要让它负责这项工作.风险太大了.当这样的事情发生时,我也写了它写入日志.

  • 它的工作方式是将整个数据复制到JNI对象中,为了还原,它从头开始创建位图并将数据放入其中.

  • 正在使用和恢复的位图采用ARGB_8888格式.当然,您可以将其更改为您想要的任何内容,只是不要忘记更改代码...

  • 大位图可能需要一些时间来存储和恢复,因此在后台线程上执行它可能是明智的.

  • 这不是一个完整的OOM解决方案,但它可能有所帮助.例如,您可以将它与您自己的LruCache结合使用,同时避免将堆内存用于缓存本身.

  • 代码仅用于存储和恢复.如果您需要执行某些操作,则需要进行一些研究.openCV可能就是答案,但是如果你想要执行一些基本的东西,你可以自己实现它们(这里是使用JNI旋转大图像的例子).如果你知道其他选择,请在这里告诉我.

希望这对某些人有用.请写下你的意见.

此外,如果您发现代码有任何问题或建议填补,请告知我们.


好的解决方案

如果您希望在JNI端执行更多操作,您可以使用我所做的这篇文章.它基于我在这里编写的代码,但允许您进行更多操作,您可以轻松添加更多自己的代码.

java-native-interface android caching native bitmap

38
推荐指数
1
解决办法
2万
查看次数