public static Bitmap
loadImageFromUrl(String url, int sc) {
URL m
InputStream
i = null
BufferedInputStream bis = null
ByteArrayOutputStream out = null
byte isBuffer[] = new
byte[1024]
if (url == null)
return null
try {
m = new URL(url)
i = (InputStream)
m.getContent()
bis = new BufferedInputStream(i, 1024 * 4)
out =
new ByteArrayOutputStream()
int len = 0
while
((len = bis.read(isBuffer)) != -1) {
out.write(isBuffer, 0,
len)
}
out.close()
bis.close()
} catch (MalformedURLException e1) {
e1.printStackTrace()
return null
} catch
(IOException e) {
e.printStackTrace()
}
if
(out == null)
return null
byte[] data =
out.toByteArray()
BitmapFactory.Options options = new
BitmapFactory.Options()
options.inJustDecodeBounds =
true
BitmapFactory.decodeByteArray(data, 0, data.length,
options)
options.inJustDecodeBounds = false
int be =
(int) (options.outHeight / (float) sc)
if (be <= 0)
{
be = 1
} else if (be > 3) {
be =
3
}
options.inSampleSize = be
Bitmap bmp =
null
try {
bmp = BitmapFactory.decodeByteArray(data,
0, data.length, options) // 返回缩略图
} catch (OutOfMemoryError e)
{
// TODO: handle exception
System.gc()
bmp = null
}
return
bmp
}
java内存溢出核心提示:原因有很多种,比如: 1.数据量过于庞大;死循环 ;静态变量和静态方法过多;递归;无法确定是否被引用的对象; 2.虚拟机不回收内存(内存泄漏); 说白了就是程序运行要用到的内存大于虚拟机能提供的最大内存就发生内存溢出了。 内存溢出的问题要看业务和系
原因有很多种,比如:
1.数据量过于庞大;死循环 ;静态变量和静态方法过多;递归;无法确定是否被引用的对象;
2.虚拟机不回收内存(内存泄漏);
说白了就是程序运行要用到的内存大于虚拟机能提供的最大内存就发生内存溢出了。 内存溢出的问题要看业务和系统大小而定,对于某些系统可能内存溢出不常见,但某些系统还是很常见的解决的方法,
一个是优化程序代码,如果业务庞大,逻辑复杂,尽量减少全局变量的引用,让程序使用完变量的时候释放该引用能够让垃圾回收器回收,释放资源。
二就是物理解决,增大物理内存,然后通过:-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m的修改