JVM
DanLongChen
学以致用
展开
-
自定义类加载器
在某些场合需要从网络或者非ClassPath路径下加载类,这个时候就需要自己定义一个类加载器了。在自己定义类加载器的时候需要重写ClassLoader类的findClass方法,loadClass方法不需要重写(loadClass方法最终会调用findClass方法),代码如下:import java.io.*;/** * Created by DanLongChen on 2019/5/...原创 2019-05-16 15:54:48 · 349 阅读 · 0 评论 -
JVM中类加载器的双亲委派模型
双亲委派模型过程某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。使用双亲委派模型的好处在于Java类随着它的类加载器一起具备了一种带有优先级的层次关系。例如类java.lang.Object,它存在在rt.jar中,无论哪一个类加载器要加载这个类,最终都是委派给处于...原创 2019-05-16 15:57:11 · 227 阅读 · 0 评论 -
JVM内存空间快速分配技术
通常情况下,如果系统中存在大量的连续内存可以用来分配对象,这种情况下若采用指针碰撞算法来进行对象分配的话,效率是很可观的。指针碰撞算法:记录上一次对象分配的位置,当有新对象需要分配时,若检查剩余的空间可以满足容纳这个对象,则只需要一次移动指针的操作便可完成内存的的分配。对于多线程的应用:内存分配需要保证线程安全,如果通过全局锁的方式来保证线程安全的话,内存分配将会成为性能瓶颈。所以HotSpo...原创 2019-05-22 11:06:42 · 275 阅读 · 0 评论 -
JRE,JDK和JVM之间的关系
JRE,JDK,JVM之间的关系JRE(JavaRuntimeEnvironment,Java运行环境),也就是Java平台。所有的Java 程序都要在JRE下才能运行。普通用户只需要运行已开发好的java程序,安装JRE即可。JDK(Java Development Kit)是程序开发者用来来编译、调试java程序用的开发工具包。JDK的工具也是Java程序,也需要JRE才能运行。为了保持J...原创 2019-05-23 10:38:02 · 5195 阅读 · 0 评论 -
从虚拟机角度看对象的创建
(1)当JVM遇到一个new指令的时候,他会去检查这个指令的参数能否在运行时常量池定位到一个类的符号引用,并且检查这个符号代表的类是否已经被加载,解析和初始化过了,如果没有,那么必须先执行相应的类加载过程。(2)在类的加载检查通过之后,接下来JVM需要为新生对象分配内存,对象所需的内存大小是在类加载完成之后便完全确定的。如果Java堆是规整的,那么直接采用指针碰撞算法分配内存(记录上一次对象分配...原创 2019-05-23 11:18:27 · 155 阅读 · 0 评论 -
HotSpot中的安全点详解
枚举根节点:目前主流的虚拟机都是采用准确式GC,当系统停顿下来时并不需要寻找每一个GC Roots。(stop the world:由于可达性分析对执行时间的敏感,只有在系统处于一个能确保一致性的快照中进行时才能有效,这时整个系统看上去好像被冻结了一样,不可以出现在分析过程中对象的引用关系还在发生变化的情况)实现方式是使用一组被称为oopMap的数据结构来达到这个目的。在类加载完成时,虚拟机就把...原创 2019-05-23 16:12:40 · 1282 阅读 · 0 评论