Java虚拟机:运行在Java编译器和OS平台之间的虚拟处理器。.java文件首先由Java编译器编译成二进制指令的.class文件,然后由类加载器读入Java内存中,然后由执行引擎(解释器)将这些指令解释给操作系统执行。
内存模型:①程序计数器,记录每个线程下一个执行的指令;②JVM栈:局部变量等;③本地方法栈:调用本地C或C++,依赖JNI;④堆:new的对象,静态变量等;⑤方法区:方法。①②③线程独有,④⑤线程共享。
Java垃圾回收机制:回收在堆中开辟出来的对象。(强引用不回收,软引用在内存满回收,弱引用、虚引用回收)。
垃圾回收算法:①标记-清除:先扫一遍,标记存活的对象,再扫一遍,回收未标记的对象;②复制:扫描时将存活的对象复制到新空间(使用存货对象少,即新生代多);③标记-整理法:先扫一遍,标记存活对象,再扫一遍回收未标记时整理标记过的,解决了碎片问题(老年代多);④分代收集:新生代复制,老年代标记整理。
内存泄漏:不在使用的对象所占的内存没有被释放掉。如静态集合类的使用,缓存,各种连接(Socket、I/O)没有close()。当出现outofmemory一般是内存泄漏的提醒。可用专业的工具去检查。