yml配置文件读取

import ( "fmt" "github.com/spf13/viper" "os" "path/filepath" ) type Config struct { DesDir string SourceFiles []string } func loadConfig()(con Config){ home := os.Getenv("HOME") viper.SetConfigFile(filepath.Join(home,"config","syncFile.yml")) viper.SetConfigType("yml") err := viper.ReadInConfig() checkErr(err) err = viper.Unmarshal(&con) checkErr(err) fmt.Printf("config: %v\n", con) return con } func checkErr(err error){ if err != nil { panic(err) } }

GC日志详解

对于 java 应用我们可以通过一些配置把程序运行过程中的 gc 日志全部打印出来,然后分析 gc 日志得到关键性指标,分析 GC 原因,调优 JVM 参数: 开启 GC 日志相关参数 java -jar ‐Xloggc:./gc‐%t.log ‐XX:+Prin

java常量池

Class常量池 Class常量池可以理解为class文件中的资源仓库,class 文件中除了包含类信息,方法,字段,接口信息之外还有常量池信息,用于存放编译期生成的各种字面量和符号引用。 如下: 常量池主要

JVM调优工具

jps 查看启动的 java 进程 jmap 实例个数与内存占用 看内存信息,实例个数以及占用内存大小 [C is a char[],[S is a short[],[I is a int[],[B is a byte[],[[I is a int[][] 堆信息 jump -heap 17680 导出堆内存占用信

G1垃圾收集器

G1 (Garbage-First) 是一款面向服务器的垃圾收集器,主要针对多颗处理器及大容量内存的机器,具备极短的 GC 停顿时间和高吞吐量的特征. G1 堆内存划分 G1 不像 CMS 那样,老年代和年轻代不再有明显的区分。而是将内存分为很多和区域(Reg

CMS垃圾回收器与三色标记算法

垃圾收集算法 整体可以分为以下几种算法: 标记复制算法 标记整理算法 标记清除算法 分代收集理论 目前的虚拟机的垃圾回收器都是采用分代收集算法,一般根据对象存活周期的不同,将内存分为几块,一般将java堆分为新生

jvm对象的内存分配与回收

对象分配过程简略流程图 对象栈上分配 我们都知道对象分配在堆上,当对象没有被引用时就会当成垃圾回收,如果对象数量比较多,会给GC带来较大的压力,影响性能,为了减少临时对象在堆内的分配次数,JVM 通过逃逸分

jvm中对象的创建过程

1. 类加载检查 虚拟机遇到一条 new 指令时,首先检查这个指令的参数能否在常量池中找到一个类符号引用,并且检查这个符号引用代表的类是否已经被加载,解析,初始化过。如果没有必须先执行类的加载初始化过程。 2. 分配内存

jvm内存模型

线程共享 每个线程开启的时候都会划分几块内存空间,线程栈,程序计数器,本地方法栈。这几个内存空间是依附于线程的,线程结束后,这些空间也会释放 所有线程共享 除此之外还有堆,方法区,类加载子系统,字节码执行引

java中的类加载器和双亲委派机制

类加载是什么 把磁盘中的java文件加载到内存中的过程叫做类加载 当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到JVM. 有如下 User 类 package dc.dccmmtop; public Class User { public static void main(String[] args) { System.out.println("hello"); } } 运

finalize的意义

程序员都了解初始化的重要性,但是会常常忘记同样重要的清理工作,java有垃圾回收器负责回收无用对象占用的内存资源,但是也有特殊情况,你的对象获得了一块特殊的内存区域,并不是通过 new 方法,由于垃圾回收器只