JVM如何处理本机代码 考虑一个我必须从java程序调用C++代码的例子。C++代码创建了数千个对象。这些动态对象存储在哪里?我怀疑在JVM堆中,因为本机代码将与JVM是同一进程的一部分 如果是,java垃圾回收线程的规则适用于C++代码的对象吗?< p>
JVM如何处理本机代码 <>考虑一个我必须从java程序调用C++代码的例子。C++代码创建了数千个对象。这些动态对象存储在哪里?我怀疑在JVM堆中,因为本机代码将与JVM是同一进程的一部分JVM如何处理本机代码 考虑一个我必须从java程序调用C++代码的例子。C++代码创建了数千个对象。这些动态对象存储在哪里?我怀疑在JVM堆中,因为本机代码将与JVM是同一进程的一部分 如果是,java垃圾回收线程的规则适用于C++代码的对象吗?< p>,jvm,native,Jvm,Native,JVM如何处理本机代码 考虑一个我必须从java程序调用C++代码的例子。C++代码创建了数千个对象。这些动态对象存储在哪里?我怀疑在JVM堆中,因为本机代码将与JVM是同一进程的一部分 如果是,java垃圾回收线程的规则适用于C++代码的对象吗?< p>对于第一个问题,C++将使用它自己的运行时分配资源,这与JVM无关。JVM不知道内存分配器中的任何活动。 第二个问题,java垃圾回收器不会对C++分配的内存进行GC。您必须确保Java包装器启动内存释放。在java对对象进行GC之前,运行时调
如果是,java垃圾回收线程的规则适用于C++代码的对象吗?
< p>对于第一个问题,C++将使用它自己的运行时分配资源,这与JVM无关。JVM不知道内存分配器中的任何活动。第二个问题,java垃圾回收器不会对C++分配的内存进行GC。您必须确保Java包装器启动内存释放。在java对对象进行GC之前,运行时调用
finalize()
方法。默认值继承自java.lang.Object,基本上不做任何事情。您可以覆盖它并将其用作钩子来启动手动管理内存的释放。@Geek-yes。这都是同一进程的一部分,所以在C++中崩溃会降低JVMYES,它运行在JVM的相同进程中,并且肯定会崩溃。谢谢布瑞恩和CTW。我不明白。如何有一个进程,并有不同的内存分配不同的C++和java。堆内存不是进程地址空间的一部分。我认为只有堆栈上的对象才是地址空间的一部分。请注意。堆内存肯定在进程的地址空间内。在幕后,JVM和C++运行时都使用系统调用(例如SBRK())从O/S请求内存块。只要他们停留在他们要求的块的范围内,他们就不会被对方绊倒。谢谢CTW,你的回答非常有用。我在哪里可以读到更多关于它的信息。