深入理解JVM

堆整体分为Heap(堆区)和方法区
Heap包含新生代、老生代
方法区包含永久代存放常量池,静态变量,方法字节码等运行时常驻数据(JDK8及之前的HotSpotJVM中)

命令

java -jar

  • java -Dxxx=test -DprocessType=1 -jar xxx.jar
    注意参数放在-jar参数前面
    取值:System.getProperty(“propName”)

  • java -jar xxx.jar processType=1 processType2=2
    参数就是jar包里主启动类中main方法的args参数

  • java -jar xxx.jar –key=test
    spring的@value(“${xxx}”)

  • java -jar test.jar &
    后台运行进程

  • nohup java -jar demo.jar &
    nohup是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行

  • nohup java -jar demo.jar >1.txt &
    增加了>1.txt ,将nohup java -jar demo.jar的运行内容重定向输出到1.txt文件中,即输出内容不打印到当前窗口上,而是输出到1.txt文件中

  • nohup java -jar demo.jar >/dev/null 2>&1 &
    ‘>’ 代表重定向到哪里,例如:echo “123” > /home/123.txt
    /dev/null 代表空设备文件
    2> 表示stderr标准错误
    1 表示stdout标准输出,系统默认值是1,所以”>/dev/null”等同于 “1>/dev/null”
    & 表示等同于的意思,2>&1,表示2的输出重定向等同于1

0 标准输入(一般是键盘)
1 标准输出(一般是显示屏,是用户终端控制台)
2 标准错误(错误信息输出)
/dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。一般项目中定义中输出运行日志到指定地址,这样的话,就不需要再单独输出nohup.out文件,这种情况可以考虑使用这种。

新建start.sh脚本,内容:nohup java -Xms515m -Xmx1024m -jar -Dfile.encoding=UTF-8 demo.jar –spring.profiles.active=prod >/dev/null 2>&1 &

  • nohup java -Xms515m -Xmx1024m -jar -Dfile.encoding=UTF-8 demo.jar –spring.profiles.active=prod >/dev/null 2>&1 &
    -Xms 指定jvm运行最小运行堆内存,默认为物理内存1/64,用法 :-Xmx512m 注意:Xmx和512m中间不用添加空格
    -Xmx 指定jvm运行最大运行堆内存,默认物理内存1/4,用法: -Xmx1024m 注意:Xmx和1024m中间不用添加空格
    –server.port 指定jar运行的port端口,用法:–server.port=8085
    –spring.profiles.active=pro 指定运行的配置文件、环境,用法:–spring.profiles.active=prod

jmap

jmap -heap PID 查看堆信息