Java:两种JAR内PNG资源加载方式耗时差异巨大的原因探究
两种PNG加载方式耗时差异的原因
异步加载 vs 同步加载
Toolkit.getDefaultToolkit().createImage()采用异步加载机制:调用它只会创建一个Image对象,实际的图片解码、加载操作会交给后台线程执行,不会阻塞当前线程,所以调用时耗时极短(不足10毫秒)。而ImageIO.read()是同步加载,它会在当前线程中完成图片的读取、解码、内存分配全流程,必须等所有操作完成才返回,因此耗时很长(超过8000毫秒)。解码逻辑的针对性优化不同
Toolkit.createImage()是为UI图标这类场景设计的,会延迟解码,甚至只按需解码当前显示所需的分辨率部分,减少即时计算量。ImageIO.read()会完整解码图片的所有像素数据,转换成BufferedImage对象,一次性处理全部像素信息,高分辨率、色彩丰富的图片会让这个过程耗时剧增。
JAR资源读取的处理复杂度不同
从JAR包读取资源时,Toolkit.createImage()内部使用更轻量的流处理逻辑;而ImageIO.read()的IO操作、数据校验流程更复杂,进一步拉长了整体耗时。
内容的提问来源于stack exchange,提问作者Nolle
相关产品推荐
相关产品推荐

