化妆品网站系统规划软件ui设计教程
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:51
当前位置: 首页 > news >正文
化妆品网站系统规划,软件ui设计教程,建站程序asp,开源展示型网站优质博文#xff1a;IT-BLOG-CN Zstandard#xff08;简称zstd#xff09;是一种无损压缩算法#xff0c;由Facebook开发并开源。它旨在提供高压缩比和高解压速度的平衡#xff0c;适用于多种数据压缩需求。 特点 【1】高压缩比#xff1a; zstd能够在保持较高压缩比的…优质博文IT-BLOG-CN Zstandard简称zstd是一种无损压缩算法由Facebook开发并开源。它旨在提供高压缩比和高解压速度的平衡适用于多种数据压缩需求。 特点 【1】高压缩比 zstd能够在保持较高压缩比的同时提供比其他压缩算法更快的压缩和解压速度。 【2】快速解压 解压速度非常快适合需要高效解压的应用场景。 【3】可调压缩级别 zstd支持多种压缩级别从快速压缩到高压缩比可以根据具体需求进行调整。 【4】流压缩 支持流式压缩和解压适合处理大文件或数据流。 【5】多线程支持 zstd支持多线程压缩能够充分利用多核处理器的性能。 用途 【1】数据存储 用于压缩存储在磁盘上的数据以减少存储空间占用。 【2】数据传输 在网络传输中使用zstd压缩数据可以减少传输时间和带宽消耗。 【3】日志压缩 用于压缩日志文件减少日志存储空间。 【4】数据库 一些数据库系统使用zstd来压缩数据页提升存储效率。 【5】文件系统 某些文件系统支持zstd压缩以提高存储效率。 示例代码以下是一个简单的Java示例演示如何使用zstd进行压缩和解压 import com.github.luben.zstd.Zstd; import java.nio.charset.StandardCharsets;public class ZstdExample {public static void main(String[] args) {String originalString This is a string to be compressed using zstd!;byte[] originalData originalString.getBytes(StandardCharsets.UTF_8);// 压缩数据byte[] compressedData Zstd.compress(originalData);// 解压数据byte[] decompressedData Zstd.decompress(compressedData, originalData.length);String decompressedString new String(decompressedData, StandardCharsets.UTF_8);System.out.println(Original: originalString);System.out.println(Compressed size: compressedData.length);System.out.println(Decompressed: decompressedString);} }我们在使用zstd组件时发现有一个问题容易造成内存泄露大家如有使用或即将使用时要注意下具体分析如下 大家能从使用代码上看出问题来吗看着非常正常。 try (ByteArrayInputstream byteInputstream new ByteArrayInputstream(obj. getBytes(encoding));ByteArrayoutputstream byteOutputstream new ByteArrayoutputstream()Zstdoutputstream zstdoutputstream new Zstdoutputstream(byteoutputstream))(byte[] buffer . new byte[CompressConstant.DEFAULT_SIZE_512];int count;while((count byteInputStream. read(buffer, 0 CompressConstant. DEFAULT SIZE 512))1-1){zstdoutputstream.write(buffer, , count);}zstdoutputStream.flush();zstdoutputStream.close();Zstd原码, 重写了finalize这就是问题根源。 package com.github.luben.zstd; import java.io.Outputstream; import java.io.FilterOutputStream; import java.io. IOException; import com.github.luben.zstd.util.Native;public class Zstdoutputstream extends Filteroutputstream(static{}/** Opaque pointer to Zstd context object /private long stream;private long srcPos - 0private long dstPos 0private byte[] dst null;private boolean isclosed.false;private static final int dstSize (int) recommendedCOutSize();private boolean closeFrameonFlush;private boolean useChecksum;private boolean frameClosed . true;private int level;private byte[] dict null;private ZstdDictCompress fastDict . null;/ JNI methods /private static native long recommendedcoutsize();private static native long createcstream();private static native int freeCStream(long ctx);private native int initCStream(long ctx, int level, int checksum);private native int initCStreamithDict(long ctx, byte[] dict, int dict_size, int level, int checksum);private native int initCStreamwithFastDict(long ctx, ZstdDictCompress dict, int checksum);private native int compressstream(long ctx, byte[] dst, int dst_size, byte[] src, int src_size);private native int flushStream(long ctx, byte[] dst, int dst_size);private native int endStream(long ctx, byte[] dst, int dst_size);/ The constuctor */public Zstdoutputstream(Outputstream outstream, int level, boolean closeFrameOnFlush, boolean useChecksum) throws IOException(}public synchronized void write(byte[] src, int offset, int len) throws IOException (}public void write(int i) throws IOException(}/**Flushes the output/public synchronized void flush() throws IOException {}public synchronized void close() throws IOException {}overrideprotected void finalize() throws Throwable(close();}咱们来了解下finalize finalize是Object对象里的一个方法它最大的一个特点是执行时机不可预知。实现了object的finalize方法的类在创建时会新建一个FinalizerReference这个对象是强引用类型重写finallize的对象如果没有被其它对象引用时执行GC不会马上被清除掉而是放入到一个静态队列中有一个守护线程专门去处理这个队列因为守护线程的优先级比较低运行的时间少如果在短时间内创建较多或较大对象时无论怎么调用GC都无用只能等到守护线程从队列中取出finalize方法FinalizerReference才能被回收。 Object.finalize方法是Java中定义在java.lang.Object类中的一个方法。它的主要作用是在对象被垃圾回收器回收之前进行一些清理操作。具体来说finalize方法允许开发者在对象被销毁之前执行一些必要的清理工作比如释放资源文件、网络连接等。 作用: 资源释放在对象被垃圾回收前释放系统资源如关闭文件、网络连接等。 清理操作执行一些清理工作确保对象的状态一致性。 优点 资源管理在某些情况下finalize方法可以用来确保资源被正确释放避免资源泄漏。 自动调用在垃圾回收时自动调用无需手动触发。 缺点 不确定性finalize方法的调用时间是不确定的垃圾回收器何时调用finalize方法是不可预测的这可能导致资源长时间未被释放。 性能开销使用finalize方法会增加垃圾回收的开销影响性能。 复杂性 finalize方法容易引入复杂的错误和难以调试的问题因为它是在垃圾回收的过程中异步调用的。 替代方案 Java 7引入了try-with-resources语法和AutoCloseable接口这些提供了更好的资源管理方式通常不需要依赖finalize方法。 实际使用 由于上述缺点finalize方法在实际开发中已经很少被使用。现代Java开发更倾向于使用try-with-resources语法和AutoCloseable接口来管理资源。例如 try (BufferedReader br new BufferedReader(new FileReader(file.txt))) {// 读取文件内容 } catch (IOException e) {e.printStackTrace(); } // 这里BufferedReader会自动关闭无需依赖finalize看下Finalizer类的原码 final class Finalizer extends FinalReferenceObject { /* Package-private; must be in same package as the Reference class /private static ReferenceQueueObject queue new ReferenceQueue();private static Finalizer unfinalized null,private static final Object lock new Object();private Finalizer(Object finalizee){super(finalizee, queue);add(); } / Invoked by VM */ static void register(Object finalizee) { new Finalizer(finalizee); }static {ThreadGrouptgThread.currentThread().getThreadGroup();for (ThreadGroup tgn tg;tgn null;tg tgn, tgn tg.getParent());Thread finalizer new FinalizerThread(tg);___finalizer.setPriority(Thread.MAX PRIORITY - 2)finalizer.setDaemon(true);|finalizer.start(); }private static class FinalizerThread extends Thread {private volatile boolean running;FinalizerThread(ThreadGroup g){super(g, name: Finalizer);}public void run() {if(running)return;// Finalizer thread starts before System.initializeSystemClass// is called. Wait until JavaLangAccess is availablewhile(!VM.isBooted()){// delay until VM completes initialization try {VM.awaitBooted();} catch (InterruptedException x){// ignore and continue}}final JavaLangAccess jla SharedSecrets.getJavaLangAccess();running true;for(;;){try {Finalizer f (Finalizer)queue.remove();_f.runFinalizer(jla);} catch(InterruptedException x){// ignore and continue} }看下重写了finalize方法的效果因为我们的对象比较大且请求次数多所以发上生产就能立马见效。 Dump的结果 解决方法有两个 【1】直接用Zstd的compress(byte[] src)decompress(byte[] src, int originalSize); 【2】写一个类继承ZstdOutputStream重载finalize方法内置空。 大家在写代码时尽量不要重写object的finalize.
- 上一篇: 化妆品网站素材青岛网站推广途径
- 下一篇: 画册设计网站安全的赣州网站建设
相关文章
-
化妆品网站素材青岛网站推广途径
化妆品网站素材青岛网站推广途径
- 技术栈
- 2026年03月21日
-
化妆品网站设计报告传媒网站给行业做宣传
化妆品网站设计报告传媒网站给行业做宣传
- 技术栈
- 2026年03月21日
-
化妆品网站建设目标与期望专业网站建设出售
化妆品网站建设目标与期望专业网站建设出售
- 技术栈
- 2026年03月21日
-
画册设计网站安全的赣州网站建设
画册设计网站安全的赣州网站建设
- 技术栈
- 2026年03月21日
-
画廊网站画廊网站建设建设wordpress手机版如何设置
画廊网站画廊网站建设建设wordpress手机版如何设置
- 技术栈
- 2026年03月21日
-
怀化建设局网站icp查询官网
怀化建设局网站icp查询官网
- 技术栈
- 2026年03月21日
