写点什么

Linux 系统:第十一章:常用命令,华为 java 面试面经

作者:Java高工P7
  • 2021 年 11 月 10 日
  • 本文字数:3184 字

    阅读完需:约 10 分钟

此值对系统性能影响较大,sun 官方推荐为整个堆得 3/8


-XX:NewSize: 设置年轻代大小


-XX:MaxNewSize: 年轻代最大值


-XX:PermSize: 设置持久代初始值,默认为物理内存的 1/64


-XX:MaxPermSize: 设置持久代最大值,默认为物理内存的 1/4


-Xss: 每个线程的堆栈大小,jdk5.0 后每个线程堆栈大小为 1M,以前每个线程堆栈大小为 256k,根据应用的线程所需内存


大小进行调整.在相同物理内存下,减小该值能生成更多的线程,但是操作系统对一个进程的线程数一般限制在 3000


-5000 左右. 一般小的应用可以设置为 128k,大的建议设置为 256k.


-XX:ThreadStackSize: 线程堆大小,一般设置-Xss 就可以了


-XX:NewRatio: 年轻代与年老代的比值(除去持久代),-XX:NewRatio=4 表示年轻代与年老代所占比值为 1:4,Xms=Xmx 并


且设置了 Xmn 的情况下,该参数不需要进行设置


-XX:SurvivorRatio: Eden 区和 Survivor 区的大小比值, 设置为 8,则两个 Survivor 区与一个 Eden 区的比值为 2:8,一个


Survivor 区占整个年轻代的 1/10


-XX:LargePageSizeInBytes: 内存页的大小不可设置过大,会影响 Perm 的大小,128m


-XX:+UseFastAccessorMethods: 原始类型的快速优化


-XX:+DisableExpl


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


icitGC: 关闭 System.gc(), System.gc()用于调用垃圾收集器,在调用时,垃圾收集器将运行以回收


未使用的内存空间,它将释放被丢弃对象占用的内存.一般分配内存后,可以不可虑内存管理.


-XX:MaxTenuringThreshold: 垃圾最大年龄,年轻代的最大存活周期,超过阈值就会进入年老代


-XX:+AggressiveOpts: 加快编译


-XX:+UseBiasedLocking: 锁机制的性能改善


-Xnoclassgc: 禁用垃圾回收


-XX:SoftRefLRUPolicyMSPerMB: 每兆堆空闲空间中 SoftRefrence 的存活时间,判断软引用对象有多久时间没有被使用


则被回收,默认是 1s


-XX:PretenureSizeThreshold: 对象超过多大事直接在旧生代分配,默认是 0


-XX:TLABWasteTargetPercent: TLAB 占 eden 区的百分比,默认是 1%


-XX:+CollectGen0First: FullGC 时是否先 YGC,默认是 false


YGC: 对新生代堆进行 gc ; FullGC: 全堆范围的 gc,默认堆空间使用到达 80%的时候会触发 fgc.


并行收集器相关参数:


-XX:+UseParallelGC: Full GC 采用 parallel MSC,选择垃圾收集器为并行收集器,此配置仅对年轻代有效,即上述配置下,年轻代使用并行收集,


年老代仍旧使用串行收集


-XX:+UseParNewGC: 设置年轻代为并行收集,可与 CMS 收集同时使用,jdk5.0 以后,JVM 会根据系统配置自行设置,所以无需再设置此值


-XX:ParallelGCThreads: 并行收集器的线程数,此值最好配置与处理器数目相等,同样适用于 CMS


-XX:+UseParallelOldGC: 年老代垃圾收集方式为并行收集(Parallel Compacting)


-XX:MaxGCPauseMillis: 每次年轻代垃圾回收的最长时间(最大暂停时间),如果无法满足此时间,JVM 会自动调整年轻代大小,以满足此值.


-XX:+UseAdaptiveSizePolicy: 自动选择年轻代区大小和相应的 Survivor 区比例,设置此选项后,并行收集器会自动选择年轻代区大小和相应的


Survivor 区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开.


-XX:GCTimeRatio: 设置垃圾回收时间占程序运行时间的百分比,公式为 1/(1+n)


-XX:+ScavengeBeforeFullGC: Full GC 前调用 YGC,默认为 true


CMS 相关参数:


-XX:+UseConcMarkSweepGC: 使用 CMS 内存收集


-XX:+AggressiveHeap:


-XX:CMSFullGCsBeforeCompaction: 多少次后进行内存压缩,由于并发收集器不对内存空间进行压缩,整理,所以运行一段时间以后会产生"碎片",


使得运行效率降低.此值设置运行多少次 GC 以后对内存空间进行压缩,整理.


-XX:+CMSParallelRemarkEnabled: 降低标记停顿


-XX:+UseCMSCompactAtFullCollection: 在 FULL GC 时候,对年老代的压缩,CMS 是不会移动内存的, 因此, 这个非常容易产生碎片, 导致内存


不够用,因此,内存的压缩这个时候就会被启用.增加这个参数是个好习惯.可能会影响性能,但是可以消除碎片


-XX:+UseCMSInitiatingOccupancyOnly: 使用手动定义初始化定义开始 CMS 收集,禁止 hostspot 自行触发 CMS GC


-XX:CMSInitiatingOccupancyFraction=70: 使用 cms 作为垃圾回收,使用 70%后开始 CMS 收集,默认是 92


-XX:CMSInitiatingPermOccupancyFraction: 设置 Perm Gen 使用到达多少比率时触发,默认是 92


-XX:+CMSIncrementalMode: 设置为增量模式,用于单 CPU 情况


-XX:+CMSClassUnloadingEnabled:


辅助信息:


-XX:+PrintGC:


-XX:+PrintGCDetails:


-XX:+PrintGCTimeStamps:


-XX:+PrintGC:PrintGCTimeStamps:


-XX:+PrintGCApplicationStoppedTime: 打印垃圾回收期间程序暂停的时间.可与上面混合使用


-XX:+PrintGCApplicationConcurrentTime: 打印每次垃圾回收前,程序未中断的执行时间.可与上面混合使用


-XX:+PrintHeapAtGC: 打印 GC 前后的详细堆栈信息


-Xloggc:filename: 把相关日志信息记录到文件以便分析.


-XX:+PrintClassHistogram:


-XX:+PrintTLAB: 查看 TLAB 空间的使用情况


XX:+PrintTenuringDistribution: 查看每次 minor GC 后新的存活周期的阈值


-verbose:gc 和-XX:+PrintGC 是一样的


-Duser.timezone: 设置用户所在时区


-Djava.awt.headless=true: 开启 headless 模式,可针对特殊情况的一些数据图片的处理显示等


标准输入 0 从键盘获得输入(默认)


标准输出 1 输出到屏幕(即控制台)


错误输出 2 输出到屏幕(即控制台)


一般执行 shell 命令,都默认是从键盘获得输入,并且将结果输出到控制台上.但是我们可以通过更改文件描述符默认的指向,从而实现输入输出的


重定向.比如将 1 指向文件,那么标准的输出就会输出到文件中.


输出重定向:


command > filename 把标准输出重定向到新文件中


command 1> filename 同上


command >> filename 把标准输出追加到文件中


command 1>> filename 同上


command 2> filename 把错误输出重定向到新文件中


command 2>> filename 把标准输出追加到文件中


使用>重定向时,如果文件存在,则先删除旧文件,再新建文件;>>则直接添加到原文件中


输入重定向:


command < filename 以 filename 文件作为标准输入


command 0<filename 同上


command <<delimiter 从标准输入中读入,直到遇到 delimiter 分隔符


高级用法:


重定向绑定:


1.>/dev/null


这条命令的作用是将标准输出 1 重定向到/dev/null 中./dev/null 代表 linux 的空设备文件,所有往这个文件写入的内容都会丢失,


那么执行了>/dev/null 之后,标准输出就会不再存在,没有任何能够找出输出的内容


2.2>&1


采用 &可以将两个输出绑定到一起.就是将错误输出和标准输出输出到同一个地方.


3.>/dev/null 2>&1


就是将标准输出重定向到空设备文件(丢弃标准输出),错误输出绑定到标准输出中了,所以错误输出也被丢弃了,既不会输出到


屏幕,也不会输出到文件中


4.>/dev/null 2>&1 和 2>&1 >/dev/null


linux 从左到右执行,所有 2>&1 >/dev/null 的执行为:


1)2>&1,错误输出绑定到标准输出中,此时标准输出是默认值,即输出到屏幕上,所以错误输出到屏幕上了


2)>/dev/null,将标准输出 1 重定向到/dev/null 中,标准输出被丢弃


5.为什么要绑定 2>&1 呢?不使用 2>out 1>out 重复输出两次?


重复输出两次,标准输出和错误输出会抢占 out 文件的管道,可能导致信息写入的错误,而且 out 文件被打开两次,影响 IO 性能


nohup java -jar xxxx.jar >/dev/null 2>&1 &


不让一些执行信息输出到控制台


nohup java -jar -server -Xms512M -Xmx512M -Xss256k -XX:NewSize=128M -XX:MaxNewSize=128M


-XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC


-XX:+CMSClassUnloadingEnabled -XX:MaxTenuringThreshold=8 -XX:+CMSParallelRemarkEnabled


-XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:MetaspaceSize=128m


-XX:MaxMetaspaceSize=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly


-XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintGCDetails

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
Linux系统:第十一章:常用命令,华为java面试面经