har*_*dsv 5 java eclipse breakpoints yourkit
无论如何在eclipse或其他调试器中设置断点使得执行在构造数组时停止了吗?我对构造一个原始数组(int [])特别感兴趣,但这个问题同样适用于任何数组.
我需要找到创建大量垃圾的罪魁祸首,包括int [],char []和byte []等等,所以如果我可以在某些条件下设置断点,我将能够缩小代码范围.
我尝试使用你的内存分析,但它只显示这些对象的一小部分的分配,其余的显示为<objects without allocation information>,我不知道为什么.当我进入Objects unreachable from GC roots视图时,我只看到大约7%垃圾的分配信息.通过分配这么小比例的对象,我甚至不确定我是否遗漏了一些位置.有没有办法让YK保留所有分配?
当你构造一个数组时,虚拟机只是保留足够的内存空间来填充引用。这是单步本机操作,内存分配过程中不可能出现断点。例如采用以下代码
public class Test{
public void createArray(){
int[] iarray = new int[10];
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果你拆开它,你会得到以下一组说明
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public void createArray();
Code:
0: bipush 10
2: newarray int
4: astore_1
5: return
}
Run Code Online (Sandbox Code Playgroud)
请注意 method 的定义createArray(),newarray int是一条将内存分配给指定数量的元素的指令。
| 归档时间: |
|
| 查看次数: |
586 次 |
| 最近记录: |