【JVM】JVM调参的常用参数以及Java中的4中引用类型

1. 参数类型

  • 标配参数:
    -version-help\java -showversion

  • X参数:
    图片说明

  • XX参数:
    Boolean类型
    图片说明

    以打印垃圾回收细节为例。使用jps -l锁定需要查看的进程号,使用jinfo –Flag PrintGCDetails + 进程号来查看是否开启打印GCDetails。
    图片说明

    如果没有打开,那么在VM options中添加命令-XX:+PrintGCDetails

图片说明

  • KV设值类型,例如设定堆内存、元空间等。
    -XX: 属性key = 属性值value,例如-XX: MetaspaceSize = 128m-XX: MaxTenuringThreshold = 15

2. 初始默认值

图片说明
图片说明

没有冒号说明是默认的,有说明是修改后的!

图片说明
图片说明
图片说明

3. 堆内存复习

图片说明

堆内存初始大小约为物理内存的64分之1,最大堆内存默认约四分之一。

4. 常用参数清单和配置

1. -Xms和-Xmx

图片说明

((这两个参数最好设置的一样大,避免频繁的GC。**

2. -Xss

图片说明

3. -Xmn

设置新生代大小。

4. -XX:MetaspaceSize

图片说明

5. -XX:+PrintGCDetails

图片说明
图片说明
图片说明

6. -XX:SurvivorRatio

调整eden和survivor区的比例。

图片说明

7. -XX:NewRatio

调整新生代和老年带比例。
图片说明

8. -XX:MaxTenuringThreshold

设置垃圾最大年龄,默认15次,JAVA8设置最高值为15,否则不能启动JVM。

图片说明

9. 再谈4种引用

参考 https://www.jianshu.com/p/e66d03c3e614

  1. 强引用(Strong Reference)
    强引用是指在程序代码中普遍存在的,类似“Object obj=new Object()”这类的引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。
    只要某个对象有强引用与之关联,JVM必定不会回收这个对象,即使在内存不足的情况下,JVM宁愿抛出OutOfMemory错误也不会回收这种对象。但是你可以使用obj = null来辅助JVM进行回收。

  2. 软引用(Soft Reference)
    软引用是用来描述一些有用但并不是必需的对象。对于软引用关联着的对象,只有在内存不足的时候JVM才会回收该对象。因此,这一点可以很好地用来解决OOM的问题,并且这个特性很适合用来实现缓存:比如网页缓存、图片缓存等。JDK 1.2之后,提供了SoftReference类来实现软引用。

import java.lang.ref.SoftReference;

public class Main {
    public static void main(String[] args) {

        SoftReference<String> sr = new SoftReference<String>(new String("hello"));
        System.out.println(sr.get());
    }
}
  1. 弱引用(WeakReference)
    弱引用也是用来描述非必需对象的,当JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象
import java.lang.ref.WeakReference;

public class Main {
    public static void main(String[] args) {

        WeakReference<String> sr = new WeakReference<String>(new String("hello"));

        System.out.println(sr.get());
        System.gc();                //通知JVM的gc进行垃圾回收
        System.out.println(sr.get());
    }
}

输出结果
hello
null

  1. 虚引用(PhantomReference)
    虚引用和前面的软引用、弱引用不同,它并不影响对象的生命周期。在java中用java.lang.ref.PhantomReference类表示。如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。它不能单独使用也不能通过它访问对象,需引用必须和引用队列联合使用。

图片说明

import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;


public class Main {
    public static void main(String[] args) {
        ReferenceQueue<String> queue = new ReferenceQueue<String>();
        PhantomReference<String> pr = new PhantomReference<String>(new String("hello"), queue);
        System.out.println(pr.get());
    }
}
全部评论

相关推荐

迷茫的大四🐶:干脆大厂搞个收费培训得了,这样就人均大厂了
点赞 评论 收藏
分享
来,说点可能被同行“骂”的大实话。🙊当初接数字马力Offer时,朋友都说:“蚂蚁的“内包”公司?你想清楚啊!”但入职快一年后的今天,我反而对他有了不一样的看法!🔹&nbsp;是偏见?还是信息差!之前没入职之前外面都在说什么岗位低人一等这类。实际上:这种情况不可至否,不能保证每个团队都是其乐融融。但我在的部门以及我了解的周边同事都还是十分好相处的~和蚂蚁师兄师姐之间也经常开一些小玩笑。总之:身份是蚂蚁公司给的,地位是自己挣的(一个傲娇女孩的自述)。🔹&nbsp;待遇?玩的就是真实!试用期工资全额发!六点下班跑得快(早9晚6或者早10晚7,动态打卡),公积金顶格交。别听那些画饼的,到手的钱和下班的时间才是真的(都是牛马何必难为牛马)。🔹&nbsp;能不能学到技术?来了就“后悔”!我们拥有权限直通蚂蚁知识库,技术栈多到学不完。说“学不到东西”的人,来了可能后悔——后悔来晚了(哈哈哈哈,可以不学但是不能没有)!💥&nbsp;内推地址:https://app.mokahr.com/su/ueoyhg❗我的内推码:NTA6Nvs走我的内推,可以直达业务部门,面试流程更快速,进度可查!今天新放HC,之前挂过也能再战!秋招已经正式开始啦~机会就摆在这,敢不敢来试一试呢?(和我一样,做个勇敢的女孩)
下午吃泡馍:数字马力的薪资一般哇,5年经验的java/测试就给人一万出头,而且刚入职第三天就让人出差,而且是出半年
帮你内推|数字马力 校招
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务