JVM
shaoXingZJU
为了能进阿里而读书
展开
-
JVM类加载过程
java代码编译后,会生成JVM能够识别的二进制字节流文件(*.class)。在Class文件中描述的各种信息,最终需要JVM把其加载到JVM内存中才能运行和使用。一、概论 JVM把描述类数据的字节码.Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。 类加载都是在程序运行期间完成的,这种策略虽然会令类加...原创 2018-05-10 15:10:00 · 159 阅读 · 0 评论 -
GC解析
GC,即Java垃圾回收。Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用,对不存在引用的对象进行GC。JVM垃圾回收的root根对象有以下几种:(1)虚拟机(JVM)栈中引用对象(2)方法区中的类静态属性引用对象(3)方法区中常量引用的对象(final的常量值)(4)本地方法栈JNI的引用对象GC触发的条件有两种:(1)程序调用System.gc()时可以触发;(不建议)(2...原创 2018-05-23 19:14:28 · 196 阅读 · 0 评论 -
GC新生代对象晋升到老年代情况总结
对象优先在Eden分配,且新生代对象晋升到老年代有多种情况,现在做一个总结:(1)、Eden区满时,进行Minor GC,当Eden和一个Survivor区中依然存活的对象无法放入到Survivor中,则通过分配担保机制提前转移到老年代中。 (2)、若对象体积太大, 新生代无法容纳这个对象,-XX:PretenureSizeThreshold即对象的大小大于此值, 就会绕过新生代, 直接在老年代分...原创 2018-06-05 20:12:41 · 6758 阅读 · 0 评论 -
Java类加载器解析
类加载器负责加载文件系统、网络或其他来源的类文件。即使类来源于同一个class文件,只要加载它们的类加载不同,则这两个类就必定不相等。 绝大部分Java程序都会使用以下三种类加载器:Bootstrap类加载器、Extension类加载器和Application类加载器。 Bootstrap类加载器: 它是所有类加载器的父加载器。Bootstrap类加载器没有任何父类加载...原创 2018-06-13 20:21:44 · 194 阅读 · 0 评论 -
Volatile关键字解析
volatile关键字是与Java的内存模型有关的,Java内存模型规定所有的变量都是存在主存当中,每个线程都有自己的工作内存。线程对变量的所有操作都必须在工作内存中进行,而不能直接对主存进行操作。并且每个线程不能访问其他线程的工作内存。 volatile关键字的两层语义 一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:1)保证了不...原创 2018-06-20 15:45:51 · 141 阅读 · 0 评论