svg to png or pdf

将svg转化成png或者pdf.不过性能不好.如果svg有几十M,会很慢.

# ! encoding:UTF-8
import cairosvg
import os


def svg_to_png(from_dir, target_dir):
    """
    very slow
    :param from_dir:
    :param target_dir:
    :return:
    """
    return _export(from_dir, target_dir, "png")


def _export(from_dir, target_dir, export_type):
    files = os.listdir(from_dir)
    for fileName in files:
        path = os.path.join(from_dir, fileName)
        if os.path.isfile(path) and fileName[-3:] == "svg":
            file_handle = open(path)
            svg = file_handle.read()
            file_handle.close()
            export_path = os.path.join(target_dir, fileName[:-3] + export_type)
            export_file_handle = open(export_path, 'w')

            if export_type == "png":
                cairosvg.svg2png(bytestring=svg, write_to=export_path)
            elif export_type == "pdf":
                cairosvg.svg2pdf(bytestring=svg, write_to=export_path)

            export_file_handle.close()

写一段c++,碰到5个问题

  1. 创建子线程的时候,在for循环里面,在栈中初始化子线程的变量,结果变量地址被覆盖。需要用new,在堆里分配。
  2. 使用除法,结果变量没有初始化。
  3. 结构体中使用到的引用,全部使用指针。
  4. 给函数传参数的时候,将指针的值传过去,结果参数被默认在栈里新分配一个。
  5. 以前取巧的用法,导致程序无法正常关闭

G1GC LOG

G1提供了两种GC模式,Young GC和Mixed GC,两种都是完全Stop The World的。
* Young GC:选定所有年轻代里的Region。通过控制年轻代的region个数,即年轻代内存大小,来控制young GC的时间开销。
* Mixed GC:选定所有年轻代里的Region,外加根据global concurrent marking统计得出收集收益高的若干老年代Region。在用户指定的开销目标范围内尽可能选择收益高的老年代Region。

内容来源于:

Java Hotspot G1 GC的一些关键技术

Continue reading “G1GC LOG”