标签: native

在Java中分析本机方法 - 奇怪的结果

我一直在使用Yourkit 8.0来分析在Mac OS X(10.5.7,Apple JDK 1.6.0_06-b06-57)下运行的数学密集型应用程序,并注意到CPU分析结果中有一些奇怪的行为.

例如 - 我使用抽样进行了分析运行,其中报告了应用程序的10分钟运行时的40%用于StrictMath.atan方法.我发现这令人费解,但我接受了它的话,花了一点时间用非常简单的多项式拟合替换atan.

当我再次运行应用程序时,它几乎与以前完全相同(10分钟) - 但我的atan替换在分析结果中无处可见.相反,其他主要热点的运行时百分比只是增加以弥补它.

总结一下:

结果使用StrictMath.atan(本机方法)
总运行时间:10分钟
方法1:20%
方法2:20%
方法3:20%
StrictMath.atan:40%

结果简化,纯Java atan
总运行时间:10分钟
方法1:33%
方法2:33%
方法3:33%

(方法1,2,3不执行任何atan调用)

知道这种行为是什么吗?我使用EJ-Technologies的JProfiler获得了相同的结果.似乎JDK概要分析API报告了本机方法的不准确结果,至少在OS X下是这样.

java macos profiling native yourkit

5
推荐指数
1
解决办法
778
查看次数

用原生c ++编码仍然很受欢迎吗?

我想在大学之后进入本机c ++编程,但似乎用JIT编译的语言(如.Net)正在超越c ++.Native代码的未来是什么?

c++ native

5
推荐指数
2
解决办法
1361
查看次数

关于Java中重度数学计算的问题

我在我的项目中使用Java,它进行了大量的数学计算.在项目的下一次迭代中,将添加一些更多的计算.根据我对Java的了解,我怀疑这会导致性能问题.将繁重的计算委托给Fortran或C等低级语言是明智的决定吗?我可以触发本机调用与低级语言进行通信.一旦Fortran或C执行计算,Java将采取控制措施.这会改善性能吗?

java performance native

5
推荐指数
2
解决办法
2776
查看次数

是否可以让GC管理本机对象的生命周期?

凭借C++和C#经验以及一些小知识,我现在正在开始一个Java + JNI(C++)项目(Android,如果这很重要).

我有一个本机方法,它创建一些C++类并返回一个指向它的指针作为Java long值(比如句柄).然后在其中使用Java代码调用其他本机方法,使用句柄作为参数在此类上执行一些本机操作.C++方面不拥有该对象,它是Java方面的人.但是在当前的架构设计中,很难定义谁拥有对象以及何时删除它.因此,使Java VM垃圾收集器以某种方式管理对象的生命周期可能会很好.C++类不消耗任何资源,除了一些内存,不是很大.如果几个这样的物体不会被破坏,那就没关系了.

在C#中,我可能会在一些托管包装类中包装本机IntPtr句柄.并且当托管包装器被垃圾收集时,覆盖它的终结器来调用本机对象的析构函数.SafeHandle,AddMemoryPressure等也可能对此有所帮助.

这是与Java最终确定的不同的故事.你在Java中的'Hello world'之后知道的第二件事是使用finalize是不好的.有没有其他方法可以在Java中实现这一目标?也许使用PhantomReference?

java java-native-interface garbage-collection memory-management native

5
推荐指数
1
解决办法
1387
查看次数

如何在托管CLR的本机c ++应用程序中创建通用.NET类型(不使用C++/CLI)?

在.NET程序中,我可以通过以下方式创建泛型类型:

 System::Type::MakeGenericType(...)
Run Code Online (Sandbox Code Playgroud)

必须有一种方法可以在本机C++中为.NET类型(带_TypePtr)做到这一点.我正在托管我自己的CLR实例而不使用C++/CLI.(这是一个如何做到这一点的例子.)我的方法是:

_TypePtr BuildGenericType(_TypePtr spGenericType, _TypePtr spTypeArgs[]) 
{
    return spGenericType-> ..... ???
}
Run Code Online (Sandbox Code Playgroud)

但是没有类似的方法MakeGenericType,我不知道在哪里找到它.关于如何解决这个问题的任何想法?

.net c++ generics native

5
推荐指数
1
解决办法
488
查看次数

适用于Android的Decibel Sound Meter

我是Android新手,希望编写一个用于测量分贝声级的应用程序.这个想法是当声音达到一定水平时,用户会收到警报.而已.任何人都可以帮我解决这个问题.我可以使用HTML5/Javascript吗?任何帮助将不胜感激.

audio android native decibel

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

c代码可以引发java异常吗?

可能重复:
在JNI代码中抛出异常的最佳方法是什么?

我看到系统#arraycopy可能会引发ArrayStoreExceptionIndexOutOfBoundsException等等
,但我也看到了系统#arraycopy是一种使用native方法,这意味着C代码,对不对?
那么C代码怎么可能抛出任何这些java异常呢?

c java native exception

5
推荐指数
1
解决办法
248
查看次数

如何在head标签的顶部/开头插入脚本标记?

我想在head标记中的所有其余脚本之前插入脚本标记.我如何使用原生javascript做到这一点?

<head>
    //INSERT SCRIPT HERE
     <script type="text/javascript" src="common.js"></script>
     <script type="text/javascript" src="omni-controls.js"></script>
</head>
Run Code Online (Sandbox Code Playgroud)

当我使用它时,它只是附加在head标签中的所有标签之后.

document.getElementsByTagName("head")[0].appendChild(script);
Run Code Online (Sandbox Code Playgroud)

javascript native append appendchild

5
推荐指数
3
解决办法
8352
查看次数

Kotlin Native等效于System.exit(-1)

在下面的Kotlin/JVM System.exit(-1)程序中,使用错误退出代码停止程序的执行:

fun main(args: Array<String>) {
    if (args.size < 2) {
        println("too few args!")
        System.exit(-1)
    }
    println("Hello, ${args[1]} from ${args[0]}")
}
Run Code Online (Sandbox Code Playgroud)

Kotlin/Native无权访问任何Java类,包括System.那么Kotlin/Native程序使用错误代码停止执行程序的等效函数是什么?

java native kotlin kotlin-native

5
推荐指数
1
解决办法
1527
查看次数

在MacOS上的AdoptOpenJDK上链接JNA库时出错

我试图在cassandra上运行一些JUnit测试。但是我收到以下错误:

[08/12/19 10:48:40:411](main)([]) INFO  - c.h.c.c.e.EmbeddedCassandra - Starting embedded Cassandra server.
8/12/19 10:48:41:497](main)([]) ERROR - o.a.c.u.NativeLibraryDarwin - Failed to link the C library against JNA. Native methods will be unavailable.
java.lang.UnsatisfiedLinkError: /private/var/folders/ty/wl4gxf352m328101m101hwh40000gn/T/jna--321969061/jna10641195286884112036.tmp: dlopen(/private/var/folders/ty/wl4gxf352m328101m101hwh40000gn/T/jna--321969061/jna10641195286884112036.tmp, 1): no suitable image found.  Did find:
    /private/var/folders/ty/wl4gxf352m328101m101hwh40000gn/T/jna--321969061/jna10641195286884112036.tmp: code signature in (/private/var/folders/ty/wl4gxf352m328101m101hwh40000gn/T/jna--321969061/jna10641195286884112036.tmp) not valid for use in process using Library Validation: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.
Run Code Online (Sandbox Code Playgroud)

运行良好,直到我更改为mac mojave并重新设置了所有内容。我认为这可能是与JNA权限相关的问题?

IDE:IntelliJ Java:AdoptOpenJDK 11.0.4 JNA:4.2.2

任何帮助将不胜感激!

macos native jna adoptopenjdk

5
推荐指数
2
解决办法
430
查看次数