我无法在应用服务器中看到任何主要的GC被触发。这是因为我分配了更多4GB的内存。最大可达1GB。我只想看到Full GC发生。
要触发Full GC,我需要填满堆内存,这在我的应用程序运行时是不可能的。因此,计划在启动服务器时放置一些临时对象并以3.5GB的速度填充堆。
有人可以帮我解决一些问题吗?
提前致谢
答案 0 :(得分:1)
这是临时对象创建的简单代码。希望,它可以帮到你。
for(int i=0;i<100000;++i){
map.put(UUID.randomUUID(),UUID.randomUUID());
}
将地图声明为全局变量,并在每个请求上执行此循环。
答案 1 :(得分:0)
您可以通过以下代码触发代码:System.gc()
https://docs.oracle.com/javase/7/docs/api/java/lang/System.html#gc()
答案 2 :(得分:0)
您可以执行
jmap -histo:live {pid}
这将在任何Java应用程序中触发完整的集合。
答案 3 :(得分:0)
以下是使用visualVM复制和测试上述场景所需的要点。
https://gist.github.com/cooligc/eb9ba490e14a10d939147bd9c914afdd
答案 4 :(得分:-2)
当GC被触发时,它只清除你不能再访问的对象(它们的引用指向null); 因此,请确保在完成使用后对象的引用分配null
SomeObject obj = new SomeObject();
/*
use obj
*/
obj = null;
这就是GC知道对象需要清理的方式。
您还可以查看软参考和弱参考。