Java引入了临时对象

时间:2016-07-21 14:34:37

标签: java performance garbage-collection jvm

我无法在应用服务器中看到任何主要的GC被触发。这是因为我分配了更多4GB的内存。最大可达1GB。我只想看到Full GC发生。

要触发Full GC,我需要填满堆内存,这在我的应用程序运行时是不可能的。因此,计划在启动服务器时放置一些临时对象并以3.5GB的速度填充堆。

有人可以帮我解决一些问题吗?

提前致谢

5 个答案:

答案 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知道对象需要清理的方式。

您还可以查看软参考和弱参考。