GC性能很高,本地方法调用降低调用开销。
---------------------------------21-----------------------------
虚拟机的面试题汇总:https://www.zybuluo.com/Yano/note/321063#jdk-%E6%98%AF%E4%BB%80%E4%B9%88
---
堆存的是:对象。
---------------------------------------------
方法区存的是:方法,对象类型数据(就是指向类的指针),常量,静态变量,即使编译后的代码。
运行时常量池在堆:编译器的字面量,类的符号引用,直接引用。
常量池:String a = "234"。
JVM:https://www.cnblogs.com/tiancai/p/9321338.html
---
虚拟机栈:方法的内存模型(栈就是:我们指的栈虚拟机栈的局部变量表,存的是局部变量的指针)。
存的是:基本类型局部变量的值,局部变量的引用。
---
本地方法栈:
----------------------------------------------22-----------------------------
程序计数器:当前线程执行的行号
关于goto
------------------------------------------------------------23-----------------------------------------------------------------
虚拟机栈:
栈就是虚拟机栈,或者说虚拟机栈的局部变量表部分。
在局部变量表存的只是对象的引用。
虚拟机栈满了:
栈的深度写的很大,则不停的申请,栈的内存区域大于java虚拟机的内存,就会OutOfMemory
----------------------------------------------------------------24----------------------------------------------------
本地方法栈:
HotSpot是不分的。
其他的和虚拟机栈一样的。
-----25-----------
Eden空间,From Survivor和To Survivor空间。
堆是线程共享的,但是划分许多私有的分配缓冲区,也是为了垃圾收集器。
在虚拟机启动时候创建
异常:OutOfMemory
-----26--------
方法区:
方法区和永久代:仅仅是HotSpot是这样的,在java虚拟机并不等价。
垃圾回收在方法区的行为:后面讲,方法区也是堆的逻辑部分,垃圾回收在方法区出现的少,回收效率低。常量池的回收。
异常的定义:OutOfMemory,申请区域失败的情况下。
详细的解释:https://zhidao.baidu.com/question/1669970239377071707.html
方法存在虚拟机栈中。
成员变量的引用存在堆。
-----------27---------方法区域----------
运行时常量池是属于方法区的:存放编译期生成的各种字面量和符号引用。
详细说明:https://blog.csdn.net/chongbin007/article/details/90408416
举例:
因为是再main函数里面,这里面s1和s2放在局部变量表中
“abc”放在java堆中
其中s1==s2的:常量池是在方法区的一块区域。里面有字符串表。StringTableHashSet,无序不可重复的。
s1!=s3的:new创建对象是一定在堆里面的。
:这个事true的。把堆搬到运行时常量池。
两种常量:字节码常量和运行时常量。
outOfMemoryError
---直接内存
NIO:不受java虚拟机内存制约,就受到操作系统物理内存的制约。
NIO:https://www.cnblogs.com/sxkgeek/p/9488703.html
-------28---------运行时常量池-----------