您现在的位置是:主页 > news > 哪些网站做农产品电子商务/网站建设网络营销

哪些网站做农产品电子商务/网站建设网络营销

admin2025/6/20 16:03:29news

简介哪些网站做农产品电子商务,网站建设网络营销,后湖做网站,政府网站手机版怎么做先修改虚拟机参数如下: -Xmx10m:最大堆内存 -Xms10m:初始化堆内存 -XX:PrintGC:打印详细的GC日志测试demo import java.util.concurrent.TimeUnit;/*** 局部变量表Slot复用的另一种思路*/ public class SlotTest {public static …

哪些网站做农产品电子商务,网站建设网络营销,后湖做网站,政府网站手机版怎么做先修改虚拟机参数如下: -Xmx10m:最大堆内存 -Xms10m:初始化堆内存 -XX:PrintGC:打印详细的GC日志测试demo import java.util.concurrent.TimeUnit;/*** 局部变量表Slot复用的另一种思路*/ public class SlotTest {public static …

先修改虚拟机参数如下:

-Xmx10m:最大堆内存
-Xms10m:初始化堆内存
-XX:+PrintGC:打印详细的GC日志

测试demo

import java.util.concurrent.TimeUnit;/*** 局部变量表Slot复用的另一种思路*/
public class SlotTest {public static void main(String[] args) throws InterruptedException {int a = 10;byte[] bytes = new byte[6 * 1024 * 1024];//假设这步逻辑会使用到a变量却不会使用到bytes变量,同时这步逻辑耗时很长,平均要3秒TimeUnit.SECONDS.sleep(3);System.gc();}
}

运行结果如下:在这里插入图片描述
通过运行结果可以发现,即使bytes变量没有再被使用,它依旧占据着6m左右的内存。但是其实之后的代码逻辑已经和bytes变量没关系了,换个说法就是,堆中有6M的空间被白白占用了3s左右,极端点想,这6M空间配合上3s的长业务时间,很可能会引起Minor GC。

所以这时候要么把bytes变量设为null,要么就把先把之后会用到的一个变量定义到前面,把bytes变量所用到的局部变量表Slot给覆盖了,这样就可以让byte数组对象所占的空间被GC回收。

设置null的demo

import java.util.concurrent.TimeUnit;/*** 局部变量表Slot复用的另一种思路*/
public class SlotTest {public static void main(String[] args) throws InterruptedException {int a = 10;byte[] bytes = new byte[6 * 1024 * 1024];bytes = null;//假设这步逻辑会使用到a变量却不会使用到bytes变量,同时这步逻辑耗时很长,平均要3秒TimeUnit.SECONDS.sleep(3);System.gc();}
}

运行结果:在这里插入图片描述
可以发现此时byte数组对象所占的空间被GC回收了。

限制bytes变量的定义域,设置另一个变量覆盖局部变量表Slot的demo

import java.util.concurrent.TimeUnit;/*** 局部变量表Slot复用的另一种思路*/
public class SlotTest {public static void main(String[] args) throws InterruptedException {int a = 10;//这里要限制下bytes变量的定义域,不然是没法做到局部变量表Slot复用{byte[] bytes = new byte[6 * 1024 * 1024];}int b = 0;//假设这步逻辑会使用到a变量却不会使用到bytes变量,同时这步逻辑耗时很长,平均要3秒TimeUnit.SECONDS.sleep(3);b = a;System.gc();}
}

运行结果如下:在这里插入图片描述
同样的,此时byte数组对象所占的空间也被GC回收了。

总结

有时候在不经意间,优化代码,做到局部变量表Slot复用,提前回收无用的空间,也是一种很好的想法。