jvm
java持续实践
Java开发
展开
-
G1垃圾回收器
https://cloud.tencent.com/developer/article/1459638原创 2022-07-18 07:50:09 · 246 阅读 · 0 评论 -
JVM 面试题:如何优化JVM参数做到只有Young GC(minor GC)
1.先从当前环境和访问的服务每秒中qps大概多少,在堆中new的对象大概多少,比如qps:10000/s 每次做sql查询100条数据,创建单个对象有20个属因为每个字段都是一个基本数据类型,对象头4字节+引用类型4字节+实例数据(Integer:4 Long:8)+数据填充(变成8的倍数)假设每个属性32b,则一个对象32*20b=600b 那么一秒钟创建的对象为 100*10000*600b=600M默认的jvm参数配置的空间大小:2.分析当前虚拟机分配给当前程序的堆内存假设4核8g机器,当前转载 2021-05-16 15:10:43 · 435 阅读 · 0 评论 -
强引用 软引用 弱引用 虚引用
强引用: 平常写的大部分代码都是强引用, 例如Object obj = new Object(); 只要是强引用的类型, 那么垃圾回收的时候绝对不会去回收这个对象软引用: 把对象用SoftReference包装起来. 特点: 正常情况下垃圾回收是不会回收软引用对象的, 但是如果垃圾回收后, 发现内存还是不够存放新的对象, 内存快要溢出了, 那么就会把软引用回收掉, 即使这个软引用被其他变量引用了, 还是会被垃圾回收器回收掉.弱引用: 把对象用WeakReference包装起来. 特点.原创 2021-05-08 10:49:15 · 97 阅读 · 0 评论 -
JVM常用基础参数MaxTenuringThreshold详解
文章目录MaxTenuringThreshold参数讲解MaxTenuringThreshold代码实战MaxTenuringThreshold参数讲解在GC回收的时候. 如下图详解 From 区和To区 会来回的复制和交换位置. 每交换一次,就会增加一次年龄. 默认交换了15次, 就会从新生代到老年代中去.MaxTenuringThreshold设置垃圾的最大年龄. 默认为15 . 最大也是15,在jdk8中. 范围为 0到15.MaxTenuringThreshold代码实战用于测试的代原创 2020-05-13 21:03:15 · 7014 阅读 · 0 评论 -
JVM常用基础参数NewRatio详解
NewRatio参数讲解在上一篇文章SurvivorRatio的讲解中, 可以知道 新生代占1 , 老年代占2, 即 年轻代占整个堆内存的三分之一.SurvivorRatio的讲解而NewRatio参数就是用于调整新生代与老年代的占比的.NewRatio 参数实战使用如下的测试代码,public class MyHelloGc { public static void main(String[] args) throws InterruptedException {原创 2020-05-13 20:23:22 · 12360 阅读 · 0 评论 -
JVM常用基础参数SurvivorRatio详解
SurvivorRatio作用讲解Java堆从GC的角度, 可以分为 新生代和老年代。新生代中可以分为伊甸园区(Eden区),From Survivor 区 (S0区)和 To Survivor 区 (S1区)。 占用的空间分别默认为 8:1:1具体的内容可以看下图一般默认用 8:1:1的比例, 而SurvivorRatio就是用于调整这个比例的。SurvivorRatio代码实战使用如下的测试代码,public class MyHelloGc { public static v原创 2020-05-13 19:55:31 · 19553 阅读 · 0 评论 -
JVM常用基础参数-XX:+PrintGCDetails与GC参数详解
文章目录-XX:+PrintGCDetails 参数使用YoungGC 日志的详解Full GC 日志的详解参数解读规律-XX:+PrintGCDetails 参数使用-XX:+PrintGCDetails 用于打印输出详细的GC收集日志的信息.用于测试的代码如下 , 创建了一个50M的字节数组.public class MyHelloGc { public static void main(String[] args) throws InterruptedException {原创 2020-05-10 18:26:38 · 8265 阅读 · 5 评论 -
JVM常用基础参数元空间MetaspaceSize用法(附加常用JVM参数配置)
元空间是java8中提出来的概念, 在java7中称为永久代. 都是对JVM规范中方法区的实现. 不过元空间与永久代之间最大的区别在于:元空间并不存在虚拟机中, 而是使用本地内存.因此默认的情况下, 元空间的大小仅仅受本地内存的限制.还是使用以下的代码作为实例.public class MyHelloGc { public static void main(String[] ar...原创 2020-01-11 17:00:01 · 3407 阅读 · 0 评论 -
JVM常用基础参数栈内存Xss讲解
JVM常用参数-Xss 参数为设置单个线程栈的大小, 一般默认为512K~1024K其等价于 -XX:ThreadStackSize栈是用来运行方法的, 堆是用来存储数据.通过此程序查看栈内存大小public class MyHelloGc { public static void main(String[] args) throws InterruptedException...原创 2020-01-11 16:08:39 · 4212 阅读 · 0 评论 -
JVM通过java代码查看初始堆内存大小与最大堆内存大小
如下的jvm代码, 可以查看并打印初始化的堆内存大小和试图使用的最大堆内存大小public class QueryJVM { public static void main(String[] args){ //返回java虚拟机中的内存总量 long totalMemory = Runtime.getRuntime().totalMemory(); ...原创 2020-01-11 15:24:19 · 3742 阅读 · 0 评论 -
JVM修改并查看参数值
如下一个简单的代码.public class JVMDemo { public static void main(String[] args){ int a = 10; int b = 20; int result = a+b; System.out.println("********result: "+result); ...原创 2020-01-11 14:57:53 · 513 阅读 · 0 评论 -
JVM查看所有的初始默认值
查看jvm默认值-XX:+PrintFlagsInitial主要是查看初始的默认值.公式有两种, 两者的效果一致.java -XX:+PrintFlagsInitial -versionjava -XX:+PrintFlagsInitial如下图: 可以直接在命令行中输入-XX:+PrintFlagsFinal 主要是查看修改更新后的值.查看的命令是java -XX:+Prin...原创 2020-01-11 14:25:21 · 1015 阅读 · 0 评论 -
JVM的XX参数面试题之Xms与Xmx
两个经典参数: -Xms 和 -Xmx这个两个参数其实是属于xx参数, 它们分别属于下面两个参数的简写-Xms 等价于 -XX:InitialHeapSize 代表初始化堆内存大小-Xmx 等价于 -XX:MaxHeapSize 代表最大的堆内存大小...原创 2020-01-11 11:37:32 · 1078 阅读 · 0 评论 -
JVM的XX参数之设值类型
KV设值类型的公式:-XX: 属性key = 属性值value例如用如下的程序, 查看堆大小public class MyHelloGc { public static void main(String[] args) throws InterruptedException { System.out.println("HELLO GC"); Th...原创 2020-01-11 11:08:03 · 263 阅读 · 0 评论 -
JVM的XX参数之布尔类型
XX参数可以分为如下2类:1.布尔类型2.KV设置值的类型其中布尔类型, -XX: +或者- 某个属性值+ 代表开启这个属性- 代表关闭这个属性如何查看一个正在运行中的java程序, 它的某个jvm参数是否开启, 具体值是多少?jps: 可以查看当前正在运行的java进程. 类似于Linux的(ps命令查看后台进程)jinfo: 查看运行线程的信息.代码示例public cla...原创 2020-01-11 10:47:36 · 388 阅读 · 0 评论 -
JVM的标准参数和X参数
JVM的参数类型:1.标准参数标准参数不随着JDK版本变化而变化.-version-helpX参数X参数 是非标准参数. 在JDK各个版本中可能会变动-Xint 解释执行-Xcomp 第一次使用就编译成本地代码-Xmixed 混合模式,JVM自己来决定. 先编译后执行.(默认的)3. XX参数...原创 2020-01-11 10:10:48 · 439 阅读 · 0 评论 -
JVM垃圾回收的时候如何确定垃圾?什么是GC Roots?
什么是垃圾: 简单的说, 内存中已经不再被使用的空间,就是垃圾.例如一个对象指向为null了 Person p1 = null , 那么就可以将p1对象进行回收.要进行垃圾回收, 怎么判断一个对象是否可以被回收?引用计数法 (了解)GCRoot (枚举根节点可达性分析(根搜索路径))把GC Root对象开始作为起点, 来进行链路的扫描和访问, 如果能够可达就认为是活跃的,就不能回收...原创 2020-01-07 21:58:15 · 1297 阅读 · 0 评论