您现在的位置是:主页 > news > 哪些网站做农产品电子商务/网站建设网络营销
哪些网站做农产品电子商务/网站建设网络营销
admin2025/6/20 16:03:29【news】
简介哪些网站做农产品电子商务,网站建设网络营销,后湖做网站,政府网站手机版怎么做先修改虚拟机参数如下: -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复用,提前回收无用的空间,也是一种很好的想法。