理论篇-jvm

年份:2018

日期:7-31

对象访问:

使用句柄/直接指针

对比:

句柄访问方式-reference中存放的是稳定的句柄地址,在对象被移动时,只会改变句柄中实例数据指针,而reference本身不需要被修改

直接指针访问方式-速度更快节省了一次指针定位的开销。

Oom:

1java堆溢出

2虚拟机栈和本地方法栈溢出

3运行时常量池溢出

4方法区溢出

5本机直接内存溢出

[

引入计数算法

根搜索算法

]

[

强引用/软引用/弱引用/虚引用

]

在Java语言中,可以作为GC roots的对象包括:

1 虚拟器栈中的引用对象

2 方法区中的类静态引用的对象

3方法区中的常量引用对象

4本地方法栈中jni的引用对象。

永久代垃圾回收主要回收内容-废弃常量/无用的类。

无用类需要满足:

1该类的所有实例都已经被回收

2加载该类的classloader已经被回收

3该类对应的java.lang.class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。

垃圾收集算法

1标记-清除算法

2 复制算法

3标记-整理算法

4 分代收集算法。

日期:7-30

理论内容-jvm

理论知识来源-深入理解java虚拟机[jvm高级特性与最佳实践]

Sun官方定义的java技术体系:

java技术体系

1 java程序涉及语言

2 各种硬件平台的java虚拟机

3 class文件格式

4 java api类库

5 来自商业机构和社区的第三方类库

运行时-数据区域

栈帧是方法运行期间基础数据结构

本地方法栈:

          1 StackOverFlowError

          2 OutOfMemoryError

java堆:被所有线程共享,在虚拟机启动被创建-存放对象示例

方法区: 是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编辑后的代码等数据。主要目标-针对常量池的回收/类型的卸载

运行时常量池:-方法区的一部分,(常量池:)用于存放编译期生成的各种字面量和符号引用,这部分内容在类加载后存放到方法区中的运行时常量池

猜你喜欢

转载自blog.csdn.net/zjc_jia/article/details/81279528
今日推荐