本人一直做c开发的,所以比较在意内存的申请和释放
但是在Android开发中一般不考虑释放问题,所以在使用的时候总会觉得有些隐患,希望专业Android开发人员帮本人解答一下,谢谢!
现在本人写了一个接口函数 函数大致功能是对接收到的十六进制byte[]进行解析,解析过程需要使用一个中间byte[]变量做相关处理;
并且这个解析函数是要循环执行无数次(从程序运行一直循环到程序退出);
而本人在这个函数中像这样
但是在Android开发中一般不考虑释放问题,所以在使用的时候总会觉得有些隐患,希望专业Android开发人员帮本人解答一下,谢谢!
现在本人写了一个接口函数 函数大致功能是对接收到的十六进制byte[]进行解析,解析过程需要使用一个中间byte[]变量做相关处理;
并且这个解析函数是要循环执行无数次(从程序运行一直循环到程序退出);
而本人在这个函数中像这样
byte[] buf_byte = new byte[30];
,每次执行这个函数都申请一个byte变量,那么程序一直跑会不会出问题,例如内存满了之类的;
本人之前的解决方法是申请一个全局byte变量,传给这个函数做处理,但是觉得应该了解明白java的机制,所以向大家讨教一下;
解决方案
20
没有什么隐患,只是可能有效率问题,java是块作用域,脱离语句块的变量就随时可能被虚拟机销毁
例如
例如
public String test(){ String a; while(true){ String b; } String c; return c; }
1.String a的作用域在test()中,调用完test()后a就变成可回收的变量
2.String b的作用域在while中,每执行一次循环后,本次循环产生的b就变成可回收的变量
3.String c的作用域在test()中,但是其同时也被作为返回值,系统会产生一份c的副本并将此副本返回,同时方法中的c也变成了可回收的变量
只有像BItmap的decodeStream()这种实际是调用c执行的代码才需要注意内存的释放