Java GC会释放在c++中动态分配的内存吗

最近在使用JNA技术,在c++中动态分配了内存,然后传递给了java,现在想问一下java
垃圾回收机制会回收c++分配的内存吗?

5个回答

C++的内存需要自己代码来进行控制,不能被java GC来处理。

当然不会啦。

jdk的手伸不了那么远,垃圾回收的机制也不一样。

谁开辟的内存谁去清理, 这是本分, 不要想着别人去给你清理, 即使会,这也不合乎情理

这个已经很长时间了,我自己深入了解了JAVA虚拟机原理,也深入了解了JNA的原理。就像上面说的一样。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java GC会释放在c++中动态分配的内存吗
最近在使用JNA技术,在c++中动态分配了内存,然后传递给了java,现在想问一下javan垃圾回收机制会回收c++分配的内存吗?
动态分配的内存释放之后指针要置空
动态分配的内存释放之后指针要置空,以免因为错误引用导致出错
Java 内存区域和GC机制最详解
Java 内存区域和GC机制 目录 Java垃圾回收概况Java内存区域Java对象的访问方式Java内存分配机制Java GC机制垃圾收集器 Java垃圾回收概况   Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代 码,对内存泄露和溢出
内存(堆)的动态申请和释放
两个函数:malloc和free 需要头文件:stdlib.h void *malloc(size_t size); void free(void *ptr); 需要说明的是: 申请: 1)。参数是申请内存的字节数。 2)。申请的是一块连续的内存。 3)。返回值是void *类型,因此,要将他的返回值付给一个指针的时候,一定要类型转换。 释放: 1)。参数是
GC在堆和方法区的内存回收
对象的存活判断对象是否存活,主流实现是可达性分析。 可达性算法的基本思路,通过一系列为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain), 当一个对象到GC Roots 没有任何引用链相连时,相当于图论的从GC Roots不可达,则这个对象不可用。 引用类型 -* 强引用* 只要强引用还存在,垃圾收集器永远不会收掉被引用的
JVM初探——使用堆外内存减少Full GC
问题: 大部分主流互联网企业线上Server JVM选用了CMS收集器(如Taobao、LinkedIn、Vdian), 虽然CMS可与用户线程并发GC以降低STW时间, 但它也并非十分完美, 尤其是当出现Concurrent Mode Failure由并行GC转入串行时, 将导致非常长时间的Stop The World(详细可参考JVM初探- 内存分配、GC原理与垃圾收集器). 解
C++动态内存会被自动释放吗?
C++动态内存会被自动释放吗?        函数体内的局部变量在函数结束时自动消亡。很多人误以为示例7-6是正确的。理由是p是局部的指针变量,它消亡的时候会让它所指的动态内存一起完蛋。这是错觉!       void Func(void) {     char *p = (char *) malloc(100); // 动态内存会自动释放吗? } ...
动态分配内存,不释放,程序退出后会被系统回收吗
每一个进程都运行在一个独立的4GB“地址空间”当中 这个4G只是逻辑上的,物理内存不可能有这么多, 这个“地址空间”中,内核占掉了高位的2G, 用户就用低位的2G 了,用malloc 来管理 在用户程序的堆中分配一个指定大小的空间,并告诉系统的内存管理模块:“我要使用这块空间!” 那么,系统的内存管理模块究竟做了些什么呢? 熟悉Intel 80x86编程的人应该容易理解,它其实只做一
GC和内存泄露
1.既然有GC机制,为什么还会有内存泄露的情况?    理论上Java 因为有垃圾回收机制(GC)不会存在内存泄露问题(这也是 Java 被广泛使用于服务器端编程的一个重要原因)。然而在实际开发中,可能会存在无用但可达的对象,这些对象不能被 GC 回收,因此也会导致内存泄露的发生。    例如hibernate 的 Session(一级缓存)中的对象属于持久态,垃圾回收器是不会回收这些对象的,然而...
GC中的栈(stack)、堆(heap)、 静态区(static) 的区别
本文转自:http://blog.sina.com.cn/s/blog_4d52f5a701008opc.html
《C语言中分配了动态内存后一定要释放吗?》
问: 比如main函数里有一句 malloc(), 后面没有free() 1.那么当main结束后,动态分配的内存不会随之释放吗? 2.如果程序结束能自动释放,那么还加上free(),是出于什么考虑? 答:1. 就算没有free(),main()结束后也是会自动释放malloc()的内存的,这里监控者是操作系统,设计严谨的操作系统会登记每一块给每一个应用程序分配的内存,这使得它能够在应用程序...
Java有了GC同样会出现内存泄露问题
来自:http://www.importnew.com/16173.html 1.静态集合类像HashMap、Vector等的使用最容易出现内存泄露,这些静态变量的生命周期和应用程序一致,所有的对象Object也不能被释放,因为他们也将一直被Vector等应用着。 Static Vector v = new Vector(); for (int i = 1; i<10
该死的clear 根本不释放内存,怎么才能释放泛型LIST的内存?
程序的内存一直不停的涨,用其他工具也查了有泄露但是是定位到进程创建的时候,总觉得很奇怪 后来查了资料 delphi的clear对内存是不释放的 因为我的程序在调用的很多 过程冲不断的clear,数据要不断的更新 clear的都是 tstringlist ,还有很多的结构体泛型的list,里面有string类型的,查看内存的时候 发现里面的内存一直不停的增长。问题是这样的 1 对于 tst
Java直接内存分配和释放方式
一. 正常分配,回收由GC负责添加jvm启动参数:-verbose:gc -XX:+PrintGCDetails -XX:MaxDirectMemorySize=40M 循环执行以下代码,可以看到频繁fullGC.ByteBuffer buffer = ByteBuffer.allocateDirect(10 * 1024 * 1024); 当然我也找到一种不需要GC回收由程序员自己回收的方式,不推
Java 内存区域和GC机制详解解读
这篇文章对于java虚拟机的内存管理机制进行讲解,我感觉内容很好很清晰,所以将文章转载过来,我建议读者可以静下心来读完。原文地址Java 内存区域和GC机制最详解。在这里我也自己写写个人的理解,供读者参考:一讲到内存,对于我们程序员来讲,我感觉想到的最多的可能是栈和堆了。堆栈栈:对于程序中的很多基本类型的数据比如:int、float等基本类型(除去String类型)的数据会直接将其存储在栈中,在栈
在C++中为数组动态分配内存
在C++中为数组动态分配内存的格式如下:   第一步:声明        type (p)[常量1][常量2]...[常量n]; 第二步:申请        p=new type[x][常量1][常量2]...[常量n]; 说明:先定义一个n维的数组指针,其中p是一个指针变量,x是一个整形变量,       然后申请一个第一维为x的n+1维数组,记住只有第一维x可变。 举例
内存泄漏,动态内存无作用域问题,如何避免内存泄漏
无论是C还是C++程序,运行时候的变量主要有三种分配方式:堆分配、栈分配、全局和静态内存分配。内存泄漏主要是发生在堆内存分配方式中,即“配置了内存后,所有指向该内存的指针都遗失了”,若缺乏语言这样的垃圾回收机制,这样的内存片就无法归还系统。因为内存泄漏属于程序运行中的问题,无法通过编译识别,所以只能在程序运行过程中来判别和诊断。  百度百科: 内存泄漏(Memory
java中ArrayList之clear内存回收
右边为调用clear后内存情况 现将list.clear改为 list=null,再看看运行情况 赋值NULL后不仅列表中的对象变成了垃圾,为列表分配的空间也会回收 clear()只是清除了对象的引用,使那些对象成为垃圾
关于C/C++动态申请空间释放和内存泄漏问题介绍
1. 动态申请空间1.1 基本内容  Ⅰ 动态申请的空间没有具体名称,只能通过指针间接访问(无论new还是malloc方式)。   Ⅱ 动态申请空间都是存放在堆中,有别于系统自动分配的空间是存放在堆栈中(即栈)。   Ⅲ 栈中系统分配的空间,在使用结束会自动释放。而程序员动态申请的空间则需要人为来释放,否则随着程序运行,内存占用积累,很容易造成内存泄漏,尤其在程序过大,运行时间过长的时候,更需要
一篇文章彻底搞定所有GC面试问题
众所周知,在C++,内存的管理是程序员的任务,包括对象的创建和回收(内存的申请和释放),而在java中,我们可以通过以下四种方式创建对象(面试考点): new关键字创建对象 clone方法克隆产生对象 反序列化获得对象 通过反射创建对象 而在java中对象的回收主要是GC完成:GC会在合适的时间被触发,完成垃圾回收,将不需要的内存空间回收释放,避免无限制的内...
java既然存在gc线程,为什么还存在内存泄漏?
1.既然 Java 的垃圾回收机制能够自动的回收内存,怎么还会出现内存泄漏的情况呢?这个问题,我们需要知道 GC 在什么时候回收内存对象,什么样的内存对象会被 GC 认为是“不再使用”的。Java中对内存对象的访问,使用的是引用的方式。在 Java 代码中我们维护一个内存对象的引用变量,通过这个引用变量的值,我们可以访问到对应的内存地址中的内存对象空间。在 Java 程序中,这个引用变量本身既可以...
Java内存释放心得
1 如果一块内存区域能够重复利用,最好不要申请新的。这个内存区域有可能是系统的一个类,自己的一个内部有数组元素,或者能够放大量数据的结构。 2 最好不要在循环里面申请内存,循环越大,越坏事。换句话说,申请内存频率别太高。好比一个人每顿吃两碗饭正好,身体的消化系统可以承受,如果让他一顿把十顿的都吃掉,不胀死才怪! 3 让每个实例对象的生命周期尽量短一些,尤其是那些要占用大内存的。因为垃圾收集器的
C#的GC机制,委托机制与Unity内存泄露
最近项目测试然后发现有很多闪退的情况,用工具去检测了下确定是程序代码导致内存泄露的,然后就去找了发现了代码中存在下图中所示的写法(这只是个例子并不是实际情况) 开始的时候想当然了,认为按照引用计数这种原理,People这个对象创建之后,如果不手动把Hand中People对象置为NULL,然后再把People这个对象置为NULL是无法释放掉的,但是在我把这两个对象都置为null之后还是没有得到释放
动态内存分配与释放
1. 动态内存分配        动态内存分配与释放经常在数据结构的链表、树和图结构中。动态内存分配在需要时进行,不需要时即释放,不需要提前分配,就是根据实际需要而分配。        内存的动态分配需要使用函数 malloc、函数free和运算符sizeof来实现。函数malloc的原型是:    void* malloc(unsigned int size);        函数malloc的...
Java 1.8 堆内存变化及GC算法
一、Java 1.8 堆内存变化     JDK8 完全移除永久代 Permanent Generation, 取而代之的是元空间 Metaspace(JVM使用本地内存,存放类的元数据)。 1. 元空间的内存分配模型     大多数的类元数据分配在本地内存中,其大小受到本地可用内存的限制。可通过MaxMataspaceSize 来设置,当内存占用达到此值,将会触发对死亡对象和类加载
java String 对象内存区重复使用,减少GC次数
最近在写一个采用json数据格式传输的接收程序,该程序基于Netty编写,将接收到的数据解析成java对象,由于业务关系,每个json字符串长度达到了20M,下面是解析代码byte[] readData = new byte[readableLength];in.readdata(readData,0,readableLength);   //in 为NIO对象,读取数据输入String json...
Java引用对象在堆、栈内存中的变化
最近又重新开始学习Java基础,再次学习也对引用、对象使用时内存变化有了进一步的了解。 这里先对Java虚拟机中堆栈功能简单总结; 1、对象主要存放在堆内存中;方法和属性主要存放在栈内存中。 2、栈是运行时单位,用来解决程序运行时的问题,堆是存储单位,解决数据存储的问题。 3、堆伴随着JVM的启动而创建。 下面是一段程序执行过程,对象和引用在内存中的变化情况图,其他就不多说,图中有解释。...
java有自己的内存回收机制,但为什么还存在内存泄漏的问题?
原文地址:https://www.cnblogs.com/panxuejun/p/5888817.html 1.既然 Java 的垃圾回收机制能够自动的回收内存,怎么还会出现内存泄漏的情况呢? 这个问题,我们需要知道 GC 在什么时候回收内存对象,什么样的内存对象会被 GC 认为是“不再使用”的。 Java中对内存对象的访问,使用的是引用的方式。在 Java 代码中我们维护一个内存对象的引用变量,...
Java GC及堆内存
堆内存 Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。 在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。 这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。
指针_三种方式访问成员、动态内存分配【就当做笔记了】*、动态链表
指针的三种访问成员的方式 参照自P304,谭浩强《C程序设计》第四版   #include&amp;lt;stdio.h&amp;gt; int main() { struct stu//自己定义的stu类型 { int num1 = 1; int num2 = 2; int num3 = 3; }member; stu *p = &amp;amp;member; //member 即 成员名...
局部变量全局变量和动态分配的数据分别在内存中存放的位置
局部变量分配的内存在栈里:栈大小与编译器有关。默认情况下,visual studio 2010 的栈大小为1M。 全局变量存放在静态存储区:对于全局变量来说,与编译器有关,默认情况下, VS2010可容纳的全局变量数组大小是2G。由于程序本身的应用,所以只能使用小于2G大小。 动态分配的数据存在内存的堆里面:在VS2010的默认情况下,32位程序可以申请的堆大小最大是2G,
C语言为二维数组动态分配内存的问题
C语言中动态分配一位数组是很简单的,但是没有可以直接对二维数组进行动态分配的函数,因此,要相对二维数组动态分配内存,便要借助于一位数组来实现,具体如下:   假设要为一个n*m的二维数组分配动态内存   首先需要注意的是,不要这样一次性分配为数组内存空间: int **arr = (int**)malloc(n * m * sizeof(int)); 正确的做法是先分配行,再分配列。
【C】malloc动态分配内存和free释放
先看一个例子#include&amp;lt;stdio.h&amp;gt; int max=10; //data区,不产生具体的可执行代码。 void main() { //局部变量都在栈区。 栈内存自动分配,释放。堆需要手动malloc,free int a=10; //mov dword ptr[a], 0x0a; 在函数体内,产生具体的可执行代码。 } ...
JVM内存管理及GC机制
一、概述Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。经过这么长时间的发展,Java GC机制已经日臻完善,几乎可以自动的为我们做绝大多数的事情。虽然java不需要开发人员显示的分配和回收内存,这对开发人员确实降
如何判断那些内存需要回收(GC)
一、通过可达性分析算法来判断对象是否还活着,这个算法的基本思路就是通过一系列的被称为“GC ROOT”的对象作为起始点,从这些节点往下开始搜素,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连接(用画图来说,就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的,因此就会被判定为可回收的对象(在java语言中,可作为GC Roots的对象包括下面几种,1、虚拟
简单理解动态内存分配和静态内存分配的区别
在涉及到内存分配时,我们一般都要考虑到两种内存分配方式,一种是动态内存分配,另一种是静态内存分配,我们该怎么理解这两者的区别呢? 在我看来,静态内存分配和动态内存分配比较典型的例子就是数组和链表,数组的长度是预先定义好的,在整个程序中是固定不变的,所以他在内存分配时是以静态内存分配的方式进行的。而链表,它的信息有可能会随时更改,内存的分配取决于我们实际输入的数据,这样就用到了动态内存分配的方式。
linux c 分配释放内存 sbrk分配,brk释放
#include #include #include #include #include int main(int argc,char* argv[]) {  void* pfirst = sbrk(sizeof(int));  *(int*)pfirst = 4;  void* ptwo = sbrk(sizeof(double));  *(double*)
一个指针释放后不置空的危害
今天面试碰到这个问题了,可以说这个问题是我回答最冤枉的。 我觉得我对这个问题,有很清晰的认识。但是不知道为什么,嘴秃喽了一句内存泄漏,真想打自己一个大嘴巴。 内存泄漏的情况的产生是:例如:用int* p=(int*)malloc(sizeof(int));让p重新指向其它,这样用malloc()开辟的空间就找不到了,造成内存泄漏。 一个指针释放后不置空的后果: free(p);后p是一个非
Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组
一:什么是静态内存什么又是动态内存呢? 静态内存:是指在程序开始运行时由编译器分配的内存,它的分配是在程序开始编译时完成的,不占用CPU资源。程序中的各种变量,在编译时系统已经为其分配了所需的内存空间,当该变量在作用域内使用完毕时,系统会自动释放所占用的内存空间所以变量的分配与释放,都无须程序员自行考虑。 动态内存:指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。 1.下面通过一个例
一个含static字段的类的对象没有被引用是否会被GC回收?
[size=large]看到项目中有这里的代码,大家看下,一个类里面有一个static字段的变量,当new一个对象后,没有被引用,是否会被垃圾回收器回收? 比如,代码如下:[/size] [code=&quot;java&quot;]public class Sta { private static int s = 0; public Sta(int i) { ...
相关热词 c#二进制字符转字节 c# rc4 c#中md5加密 c# 新建mvc项目 c# 引用mysql c#动态加载非托管dll c# 两个表数据同步 c# 返回浮点json c# imap 链接状态 c# 漂亮字