Java虚拟机基础
来源:互联网 发布:怎么快速成为淘宝达人 编辑:程序博客网 时间:2024/06/06 09:12
static String str0 = "0123456789"; static String str1 = "0123456789"; String str2 = str1.substring(5); String str3 = new String(str2); String str4 = new String(str3.toCharArray()); str0 = null; 假定str0,…,str4后序代码都是只读引用。Java7中,以上述代码为基础,在发生过一次FullGC后,上述代码在Heap空间(不包括PermGen)保留的字符数为() A. 5 B. 10 C. 15 D. 20
这里我截取了两段我认为正确的言论。我自己看过substring源码,里头是new出来新的字符串。
这是一个关于java的垃圾回收机制的题目。垃圾回收主要针对的是堆区的回收,因为栈区的内存是随着线程而释放的。堆区分为三个区:年轻代(Young Generation)、年老代(Old Generation)、永久代(Permanent Generation,也就是方法区)。
年轻代:对象被创建时(new)的对象通常被放在Young(除了一些占据内存比较大的对象),经过一定的Minor GC(针对年轻代的内存回收)还活着的对象会被移动到年老代(一些具体的移动细节省略)。
年老代:就是上述年轻代移动过来的和一些比较大的对象。Minor GC(FullGC)是针对年老代的回收
永久代:存储的是final常量,static变量,常量池。
str3,str4都是直接new的对象,而substring的源代码其实也是new一个string对象返回。
经过fullgc之后,年老区的内存回收,则年轻区的占了15个,不算PermGen。所以答案选C。
方法区:主要存储结构信息的地方,比如方法体,同时也是存储静态变量,以及静态代码块的区域,构造函数,常量池,接口初始化等等
方法区物理上还是在堆中,是在堆的持久代里面。堆有年轻代 (由一个Eden区和俩个survivor区组成),老年代,持久代。新创建的对象都在年轻代的Eden区,经过一次JC收集后,存活下来的会被复制到survivor区(一个满了,就全部移动到另外一个大的中,但要保证其中一个survivor为空),经过多次JC后,还存活的对象就被移到老年代了。
持久代就是经常说的方法区里面存放类信息,常量池,方法等
static String str0=”0123456789”;
static String str1=”0123456789”;是放在方法区里。也就是持久代,题目中已经说了,不包含持久代,所以剩余空间为5+5+5=15.
- Java虚拟机基础一
- java虚拟机基础
- java虚拟机基础ppt
- java-基础-虚拟机jvm
- Java虚拟机基础
- java 虚拟机基础介绍
- Java基础之java虚拟机
- Java虚拟机--类加载基础
- [Java基础] 虚拟机 内存区域
- JVM基础 之温绍锦讲Java虚拟机基础
- [java基础] java 虚拟机内存机制
- Java基础---java虚拟机内存结构
- Java(JVM)虚拟机结构基础
- Java基础之虚拟机底层结构解读
- Java虚拟机内存管理原理基础入门
- (一)Java虚拟机基础详解
- java虚拟机基础之内存区域
- Java基础——虚拟机结构
- leetcode---Fraction to Recurring Decimal
- 第九周--建立稀疏矩阵三元组表示算法库
- MFC 用afxbeginthread创建线程 线程函数直接 return 0 返回。任务管理器显示线程数与理论值不符
- nginx原理
- 栈01:实现栈的3中方式: 数组,链表和容器
- Java虚拟机基础
- 如何卸载 sdlx
- Spring之搭建环境
- java 之前的一些配置及简单运行
- 安全框架之shrio-简介
- 遗传算法入门简单实例
- uva12105 Bigger is Better
- 奔三奶爸初学php心得记录(第三天)
- 网络检索技巧