哪个代码段表现良好(分配变量时处理内存)+;JAVA

哪个代码段表现良好(分配变量时处理内存)+;JAVA,java,android,memory-management,Java,Android,Memory Management,代码示例1:下面的代码段处理大尺寸位图 // Here reusing same variable "bitmap" // Decode the JPEG file into a Bitmap Bitmap bitmap = BitmapFactory.decodeFile(photoDir.getAbsolutePath(), bmOptions); //Re-sizing Matrix mtx = new Matrix(); bitma

代码示例1:下面的代码段处理大尺寸位图

 //  Here reusing same variable "bitmap"  

    // Decode the JPEG file into a Bitmap 
    Bitmap bitmap = BitmapFactory.decodeFile(photoDir.getAbsolutePath(), bmOptions);

    //Re-sizing 
    Matrix mtx = new Matrix();
    bitmap =Bitmap.createScaledBitmap(bitmap, targetW, targetH,true);
    mtx.postRotate(90);

    // Rotating Bitmap
    bitmap = Bitmap.createBitmap(bitmap, 0, 0, targetW, targetH, mtx, true);
    imgPhoto.setImageBitmap(bitmap );
代码示例2:

     //Here i used different variables

    // Decode the JPEG file into a Bitmap 
    Bitmap orginalBitmap = BitmapFactory.decodeFile(photoDir.getAbsolutePath(), bmOptions);

    //Re-sizing 
    Matrix mtx = new Matrix();
    Bitmap resizedBitmap =Bitmap.createScaledBitmap(orginalBitmap , targetW, targetH,true);
    mtx.postRotate(90);

    // Rotating Bitmap
    Bitmap rotatedBitmap= Bitmap.createBitmap(resizedBitmap , 0, 0, targetW, targetH, mtx, true);

    imgPhoto.setImageBitmap(rotatedBitmap);

问:在内存和速度等方面,哪个代码段更好?

我认为这些应该是相同的,对吗?我的意思是变量存在于堆栈上,这里的堆影响是显而易见的。在这种情况下,3个变量的大小可以忽略不计,比如说最纯粹的32位指针+另一个32位元数据。3
long
s与1
long
相比,你无法在大多数现代机器上分辨出区别(即使是最低规格的安卓手机也不会产生明显的影响)

如果您想更有效地使用内存,我认为所有这些的最大好处是,如果在第二种情况下,使用3个单独的变量,您可以循环使用旧位图,并且只保留图像视图上设置的位图。这将更有效地使用内存。位图由于
字节[]
特性而昂贵。这些不是随机分配,它们是连续的内存块,当您分配更多不同大小的
字节[]
时,这些内存块会变得非常混乱。因此,回收利用在这方面会有很大帮助。

原则上,这不会有任何区别。如果唯一的引用是不再实际使用的本地引用,那么一个好的JVM将使对象成为可垃圾回收的对象,这样您的两个代码示例在所有意图和目的上都是相同的


我想知道你是否在试图发明一个根本不存在的理论问题?如果您实际上在实践中遇到了性能问题,请配置文件。如果没有,不要太担心。

跟踪它,您将看到使用的内存。我将只使用1个指针。另外,您是否考虑过使用bitmap.recycle?我还建议您可以比较这两种方法,您将看到不同之处。