文章目录
1、JRE、JDK、JVM以及 JIT之间有什么不同?
JRE 代表 Java运行时(Java-run-time),是运行 Java引用所必须的。JDK代表 Java 开发工具(Java Development kit),是 Java 程序的开发工具,如 Java 编译器,它也包含 JRE。 JVM 代表java 虚拟机(Java virtual machine), 它的责任是运行 Java 应用。 JIT代表 即时编译(Just In Time compilation),当代码执行的次数超过一定的阈值时,会将 Java 字节码转换为本地代码,如,主要的热点代码会被转换为本地代码,这样有利于大幅度提高 Java 应用的性能。
2、解释 Java 堆空间及 GC?
当通过 Java 命令启动 Java 进程的时候,会为它分配内存。内存的一部分用于创建堆空间,当程序中创建对象的时候,就从堆空间中分配内存。GC是 JVM 内部的一个进程,回收无效对象的内存用于将来的分配。
3、你能保证 GC 执行吗?
不能,虽然你可以通过 System.gc() 或者 Runtime.gc() ,但是没有办法保证 GC 的执行。
4、怎么获取 Java 程序使用的内存?堆使用的百分比?
可以通过 java.lang.Runtime 类中与内存相关方法来获取剩余的内存,总内存及最大堆内存。通过这些方法你也可以获取到堆使用的百分比及堆内存的剩余空间。Runtime.freeMemory() 方法返回剩余空间的字节数,Runtime.totalMemory() 方法总内存的字节数,Runtime.maxMemory() 返回最大内存的字节数。
5、java 中 堆 和栈 有什么区别?
JVM 中 堆和栈属于不同的内存区域,使用的目的也不同。栈常用于保存方法帧和局部变量,而对象总是在堆上分配。栈通常都比堆小,也不会在多个线程之间共享,而堆被整个 JVM 的所有线程共享。