`

JVM的理解

    博客分类:
  • JAVA
 
阅读更多

一、 内存管理

1. 内存结构

    方法区:

                  类加载的信息

                  运行时常量池:来源class文件中的常量池,动态设置常量的API

                  所有线程共享

                  PermSpace,MaxPermSpace

    堆

                  存放对象实例

                  分代收集

                         Eden

                         from survior

                         to survior

                         old

                  所有线程共享

                  -Xmx,-Xms

    虚拟机栈

                  线程执行java方法的调用栈,方法调用的嵌套,对应栈帧的入栈,出栈。

                  一个方法是一个栈帧。

                  一个栈帧

                         局部变量表

                         操作数栈

                  一个线程私有。

                 -Xss

    本地方法栈

                 类似java方法,这里执行本地方法。

    程序计数器

                 一个线程执行到字节码指令列表的哪条指令。

    直接内存

    执行引擎

    本地方法库接口

    本地方法库

    

2. 垃圾回收

    如何确定对象是否为垃圾?引用计数算法,根搜索算法。

    确定了对象是否为垃圾,然后怎么处理?

           垃圾直接回收

           非垃圾

                  标记清除算法

                         标记哪些是垃圾对象,直接回收,回收空间直接使用

                  标记复制算法

                         准备一个和原空间一样大的内存,将标记的删除,将非垃圾的copy到另一个空间去。

                         发现每次复制的很少,更新成第二版本

                                一个Eden占90%

                                两个survior占10%

                                一开始用一个Eden,一个survior,回收时,将非垃圾对象,copy到另一个survior上。

                  标记整理算法

                         将标记的垃圾对象回收,将非垃圾对象整理位置,挪到前面去,剩余空间连续。

                  分代收集算法*

                          年轻代用标记复制算法

                          老年代用标记整理算法

3. 内存监控工具

    jps

    jstat

    jmap

    jstack

 

二、执行引擎

1. class文件结构

2. 加载过程和类加载器

3. 执行引擎确定方法版本,执行方法内字节码,执行时内存结构

 

三、编译优化

1. 编译期优化

2. 运行期优化

 

四、并发执行

1. 多线程

2. 并发

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics