Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过JNI访问C中的缓存_Java_C_Java Native Interface - Fatal编程技术网

Java 通过JNI访问C中的缓存

Java 通过JNI访问C中的缓存,java,c,java-native-interface,Java,C,Java Native Interface,在C/C++中构建一个LRU类型的缓存,并让java通过JNI访问它,这对提高性能有意义吗?JIT编译器非常快。它可以与编译代码相媲美 最好的办法是在最容易开发的地方实现它,然后对其进行分析以确定性能问题。然后,看看你能从那里做些什么。不太可能。 缓存处理堆中的对象。C++中的堆内存分配和分配不好于java。事实上,在一个短时间运行的测试中,由于延迟的GC,Java缓存甚至可能会获胜(C++必须显式地立即释放内存) 其他操作(PUT,find)由于JIT(与热点有关,将很快编译成本地代码),预计

在C/C++中构建一个LRU类型的缓存,并让java通过JNI访问它,这对提高性能有意义吗?

JIT编译器非常快。它可以与编译代码相媲美


最好的办法是在最容易开发的地方实现它,然后对其进行分析以确定性能问题。然后,看看你能从那里做些什么。

不太可能。

缓存处理堆中的对象。C++中的堆内存分配和分配不好于java。事实上,在一个短时间运行的测试中,由于延迟的GC,Java缓存甚至可能会获胜(C++必须显式地立即释放内存)

其他操作(PUT,find)由于JIT(与热点有关,将很快编译成本地代码),预计与C++相符合。


注:与性能一样,最终答案只能通过测试获得。

可疑

JVM现在做得相当不错,特别是考虑到任何需要缓存的应用程序都可能需要足够长的时间才能让JVM对其进行优化。无论您的缓存代码通过避免JVM而获得什么样的速度,您都可能无法通过JNI来回推送对象


更不用说C++代码与java相比的固有开发、维护和部署困难。或者通过推出自己的缓存来重新发明轮子的危险——必须有一些东西可以使用,而不是推出自己的缓存。

您几乎肯定没有在这里优化正确的东西。在大型系统中,缓存实现很少需要优化。Java有很多好的和快速的实现。您不可能从本机实现中获得更多更好的东西。即使你可以,你确定你真的需要它吗

通常,在缓存中所做的一切才是真正重要的。数据库查询、阻塞操作和CPU密集型任务。您当然应该分析您的应用程序,并只优化需要它的领域。如果你在优化只占总时间5%的东西,那么你最多只能得到5%的改进(即,如果你使它无限快)


我曾经处理过具有大型缓存的大型系统,缓存实现的开销非常低,最多为个位数。你应该确保你把时间花在正确的事情上。我不是说你可能不需要,我只是说这是可疑的,你应该先核实一下。您没有指明这种或那种方式,因此我假设您对现有的缓存实现没有已知的问题。

这完全取决于您正在缓存的内容。实现、配置、观察。即使在长时间运行的测试中,由于后者的碎片化,现在Java的内存管理的性能通常超过C。虽然每个人的答案都正是我想要的,但你的得票最高。所以我会给你答案:)并且投票给每个人。谢谢大家。