Java虚拟机将原始数据类型和对象的指针放在栈内存中,将对象放在堆内存中,以一段计数的代码来看一下堆和栈的开销差异,第一段j的数据类型是long,第二段的数据数型是Longjava
栈指针
public class CountTest { public static void main(String[] args) { long start=System.currentTimeMillis(); long j=0L; for(int i=100000000;i>0;i--){ j++; } System.out.println(System.currentTimeMillis()-start); System.out.println("j="+j); } }
运行结果code
堆对象
public class CountTest { public static void main(String[] args) { long start=System.currentTimeMillis(); Long j=0L; for(int i=100000000;i>0;i--){ j++; } System.out.println(System.currentTimeMillis()-start); System.out.println("j="+j); } }
运行结果内存
效率差异达到近百倍了虚拟机