java实现文件合并;JVM内存配置参数GC日志分析
java实现文件合并
import java.io.*;
import java.util.Scanner;
public class FileCopy {
public static void copyFile(String sourceFileName,String targetFileName)
throws IOException{
File sourceFile1=new File(sourceFileName);
File sourceFile2=new File(sourceFileName);
File targetFile=new File(targetFileName);
if(!sourceFile1.exists()){
System.out.println("文件复制失败!源文件"+sourceFile1.getName()+"不存在");
return;
}
if(!sourceFile2.exists()){
System.out.println("文件复制失败!源文件"+sourceFile2.getName()+"不存在");
return;
}
if(targetFile.exists()){
System.out.println("文件进行复制,是否覆盖现有文件"+
targetFile.getName()+"?(Y/N):");
BufferedReader in =new BufferedReader(new InputStreamReader(System.in));
String override=in.readLine();
if(!override.equalsIgnoreCase("Y")){
System.out.println("操作已取消!");
return;
}
}
FileInputStream in=null;
FileOutputStream out=null;
in=new FileInputStream(sourceFile1);
in=new FileInputStream(sourceFile2);
out=new FileOutputStream(targetFile);
byte[] buffer=new byte[8];
int num;
while((num=in.read(buffer))!=-1)
out.write(buffer,0,num);
System.out.println("文件已合并到目标文件");
System.out.println("第一个源文件:"+sourceFile1.getPath());
System.out.println("第二个源文件:"+sourceFile2.getPath());
System.out.println("目标文件:"+targetFile.getPath());
in.close();
out.close();
}
public static void main(String[] args)throws IOException {
String SrcFileName,DesFileName;
Scanner in=new Scanner(System.in);
System.out.println("请输入第一个源文件名:");
SrcFileName=in.nextLine();
System.out.println("请输入第二个源文件名:");
SrcFileName=in.nextLine();
System.out.println("请输入目标文件名:");
DesFileName=in.nextLine();
FileCopy.copyFile(SrcFileName, DesFileName);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
运行结果:
JVM内存配置参数GC日志分析
GC日志:
对于JVM内存配置参数:
-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3
-Xmx10240m:代表最大堆
-Xms10240m:代表最小堆,初始分配
-Xmn5120m:代表新生代
-XXSurvivorRatio=3:代表Eden:Survivor = 3 根据Generation-Collection算法(目前大部分JVM采用的算法),一般根据对象的生存周期将堆内存分为若干不同的区域,一般情况将新生代分为Eden ,两块Survivor; 计算Survivor大小, Eden:Survivor = 3,总大小为5120,3x+x+x=5120 x=1024
新生代大部分要回收,采用Copying算法,快!
老年代 大部分不需要回收,采用Mark-Compact算法
运行jar 程序时可以使用这种命令设置java 运行内存:
java -Xms2048m -Xmx2048m -Xmn512m -jar XXXX.jar
https://blog.csdn.net/m0_47914176/article/details/123706946
-Xss1m:HotSpot版本中栈的大小是固定的,是不支持拓展的。 java.lang.StackOverflowError 一般的方法调用是很难出现的,如果出现了可能会是无限递归
-XX:MetaspaceSize=256M: Metaspace扩容时触发FullGC的初始化阈值,也是最小的阈值
-XX:MetaspaceSize:设置元空间大小
-XX:MaxMetaspaceSize:设置元空间最大大小
-XX:+UseParNewGC: 会与并发的终身生成垃圾收集一起自动激活
-XX:+UseConcMarkSweepGC:并发标记清除,即使用CMS收集器
-XX:+PrintGCDetails:打印 gc 详细信息
-Xloggc:gc.log:将GC日志输出到gc.log文件中
-XX:+HeapDumpOnOutOfMemoryError参数表示当JVM发生OOM时,自动生成DUMP文件 使用-XX:HeapDumpPath配置的时候,需要保证目录的文件夹都是存在,因为它在到处dump文件的时候,不会帮你去创建不存在的目录。
本文使用 文章同步助手 同步