我最近看到多个声明,谈论Java(以及基于JVM的语言,如Scala)在性能上与C/C++代码的可比性.
例如,从ScalaLab项目的描述:
基于Scala的脚本编写速度,接近本机和优化Java代码的速度,因此与基于C/C++的科学代码接近甚至更好!
有人能指出我对这些JVM优化的概述吗?是否有任何真正的基准支持这一主张或提供一些真实的比较?
我有一个用C#编写的.net程序集,我正在寻找从程序集中导出本机C函数.
我有一个应用程序,它将在'plugin'文件夹中的任何DLL上执行'LoadLibrary()'.加载DLL后,应用程序执行'GetProcAddress'查找名为'Register'的函数.应用程序希望此函数遵循C调用约定.
如何从我的.net程序集中导出名为"Register"的函数,这样我就可以成功地与该应用程序的插件系统连接?
谢谢,安德鲁
我对Assembly和ARM并不是特别有经验,但我能够在其中编写一些例程,我想看看它们是如何在配备ARM的Android设备(Nexus S)上运行的.将汇编代码文件包含到Android项目中的过程是什么?我是否只能从本机代码或Java中调用它?
我想看一些源代码或者某些链接,它们至少提供了一个用于在C语言中编写ruby gems的存根(C++ ??也可能吗?)
此外,你们中的一些人可能知道Facebook本身编译了一些代码作为php扩展以获得更好的性能.有人在Rails中这样做吗?如果是这样,您的体验是什么?你发现它有用吗?
谢谢.
编辑: 我想我会用我今天学到的一些东西回答我自己的问题,但是我会把问题留给另一个答案,因为我想看看别人对这个话题有什么看法
我正在开发android中的音频播放器.所以我想添加播放歌曲的细节,即艺术家姓名,持续时间,比特率和采样频率.我可以使用获取音乐文件的艺术家姓名和持续时间MediaStore.Audio.Media library.但我无法获得同一文件的比特率和采样频率.那么我怎么能得到相同的?
据我所知,它可以通过使用本机库来完成.但不知道怎么办?所以任何人都可以帮助我吗?
Java很慢.
这不仅仅是一个"都市传奇",它似乎是一个事实.由于延迟,您不会将其用于实时编码,也不会将其用于群集/并行计算.有数以千计的基准测试,特别是"Java vs C#vs C++".
http://benchmarksgame.alioth.debian.org/
根据上面的网站,不仅Java性能几乎和C一样好(远远不是其他),但Scala和Clojure(两种在JVM上运行的函数语言)都具有比OCaml,Erlang更好的性能.
而且还有很多"Java比X更快"(例如,这里有关于SO的问题:Java运行时性能与原生C/C++代码?).
因此,对于某些情况,Java似乎很快.有人可以解释原因吗?
为什么字节码可能比本机代码运行得更快,在某些情况下,给定动态代码(Scala,Clojure)和垃圾收集?如果速度更快,还有潜伏期怎么样?
这似乎是一个矛盾,有人可以摆脱光明吗?
我正在尝试安装一个gem,我得到了这个错误,我自己和宝石作者从未见过这个错误.我该如何解决?
Davids-MacBook-Pro:web david$ sudo /usr/bin/gem install compass --pre
Password:
Building native extensions. This could take a while...
ERROR: Error installing compass:
ERROR: Failed to build gem native extension.
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb
checking for ffi.h... no
checking for ffi.h in /usr/local/include,/usr/include/ffi... yes
checking for ffi_call() in -lffi... yes
checking for ffi_prep_closure()... yes
checking for ffi_raw_call()... no
checking for rb_thread_blocking_region()... yes
checking for rb_thread_call_with_gvl()... yes
checking for rb_thread_call_without_gvl()... yes
checking for ffi_prep_cif_var()... no
creating extconf.h
creating Makefile
make "DESTDIR="
compiling AbstractMemory.c
compiling ArrayType.c …Run Code Online (Sandbox Code Playgroud) 有没有办法将.NET程序集编译为本机代码(即x86)输出,即没有MSIL.
根据我的理解,如果你只是将x86指定为架构,这只会改变PE Header以指向JIT,但是程序集仍将包含MSIL并且将根据需要进行JITT.
NGen确实为指定的体系结构生成程序集文件,但它不是编译器,它的目的是提高性能但是你仍然需要原始的DLL,本机映像的存在只能避免JIT编译程序集但你无法获得原生图像并使用它,可以吗?
那么,有没有办法从.NET实际编译到本地机器代码?
我想使用ngen命令行编译一个C#程序用于特殊目的.所以我在VS2010中创建了一个控制台应用程序并将其命名ngentest.在名称ngentest.vshost.exe中创建一个文件vs2010\projects\ngentest\bin\debug.我在VS2010命令提示符中使用此文件作为ngen命令参数,如下所示:
ngen "c:\documents\vs2010\projects\ngentest\bin\debug\ngentest.vshost.exe"
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,我无法接收PublicKeyToken,我无法在任何地方找到任何装配!如果我的程序集已创建,它在哪里?我怎么能找到它?我如何运行它(使用命令,或......!)来获取输出?
否则,当我从VS的Build菜单中使用build ngen构建我的项目时,会在提到的目录中创建一些文件,其中一个是ngentest.exe.
早上好,
我正在编写一个拼写检查程序,对于这种情况,它是性能关键的.既然如此,由于我打算连接到数据库并使用C#创建GUI,我在C中编写了一个编辑距离计算例程,并编译为我在C#中使用的DLL DllImport.问题是,我认为(虽然我可能是错误的),其编组字一个一个从String到char *导致大量的开销.就是这样,我考虑使用C++/CLI以便我可以String直接使用.NET中的类型...我的问题是,C++/CLI性能如何与用于繁重数学计算和数组访问的本机C代码相比较?
非常感谢你.