标签:div 解决 编译器 栈内存 弱引用 循环 地方 计数器 操作系统
1.内存模型以及分区。
内存模型主要由方法区、堆、栈、本地方法栈、程序计数器。
方法区:供各线程共享的运行时的内存区域。存储了类信息,运行时常量池等,还存放static变量。
堆:通过new关键字,创建对象都会使用到堆内存。存放所有new出来的对象,只保存对象本身,不保存对象的引用。
栈:程序运行时的内存空间。主要由栈帧结构组成,调用一个方法即压入一个栈帧。是线程私有的,因此不存在垃圾回收机制。8种基本数据类型、对象的引用与实例方法都保存在栈内存中。
本地方法栈:主要是native方法。
程序计数器:记录当前线程jvm指令的执行地址。线程私有,不存在垃圾回收机制。
2.一个java程序的执行流程。
java文件,编译器生成字节码class文件,然后经过类加载器、字节码校验器与解释器到操作系统平台。
3.JVM如何判断一个对象能否被GC,可以被视为root的都有哪几种类型?
可以作为GC ROOT的对象:
4.强软弱虚引用的区别以及GC对他们执行怎样的操作?
强引用:在程序中普遍存在,一般为直接引用。永远都不会对其进行垃圾回收。
Object object = new Object(); String str = "hello";
软引用:用来描述一些还有用但非必须的对象。内存不足时会对其进行回收。
弱引用:用来描述非必须对象。会被垃圾回收。
虚引用:虚引用的存在不会对对象的生存时间构成任何影响,为一个对象设置虚引用的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。
标签:div 解决 编译器 栈内存 弱引用 循环 地方 计数器 操作系统
原文地址:https://www.cnblogs.com/xxc-Blog/p/12470747.html