首页

来自智得网
跳转至: 导航、​ 搜索

精选文章

类加载【Java】查看全文
Java中类的生命周期.png
Java的类加载过程是指JVM将类的源文件加载到JVM(Java虚拟机)中,可以被使用的过程。

在Class被使用之前需要经历加载、连接、初始化三个步骤,而其中连接又分为验证、准备、解析三个环节。 加载是指类加载器加载类的源文件的过程。不同类加载器有不同的加载策略,包括加载的位置、顺序等。 验证是对加载的二进制class文件验证,包括格式验证,字节码验证等。 准备阶段为类的变量分配内存空间,并且完成变量的初始化。 解析将常量池中的符号引用转换为直接引用。 初始化过程是指完成构造函数的调用。 除了类的加载过程之外,Java中类完整的生命周期还包括类的使用以及类的死亡(类的卸载过程)。 加载过程 加载过程的第一步是获取类的名称关联的class的二进制流,Java语言规范并没有严格规定二进制流存储的介质,所以class文件可以从文件、数据库等存储中获取,在applet应用中通过网络获取,可以通过编译器产生,例如servlet、jsp对应的class文件,甚至可以通过字节码工具动态生成。 目前class文件通常存储在zip压缩包中,例如Jar包,War包等。 加载class的工具类称为类加载器,类加载器规定了类加载的策略,例如加载的位置以及加载的顺序等。 JVM的类加载器是存在树状的层次结构的,例如分为Boot加载器,应用加载器,这些不同的类加载器承担不同的职责。 双亲委派机制规定了类加载首先使用父类加载器进行加载,当父类加载器不能加载的时候才使用子类加载器加载,双亲委派机制即保证了核心类的唯一性,避免核心类被破坏,而且节约了内存空间,又保证各个应用空间的类的隔离性。 连接过程

连接过程第一步是验证环节,验证主要是验证以下内容…
Linux查看全文
Linux的Logo以及主要发行版.jpg
linux全称GNU/Linux,是一种免费使用和自由传播的类Unix操作系统,其内核由Linus Benedict Torvalds于1991年10月5日首次发布,Linux受到Minix和Unix思想的启发,是一个基于POSIX的多用户、 多任务 、支持多线程和多 CPU 的操作系统,能运行主要的Unix工具软件、应用程序和网络协议,支持32位和64位硬件, Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统内核。

完整的操作系统不仅仅只有内核,还包括一系列为用户提供各种服务的程序。程序包括GNU程序库和工具,命令行Shell,图形界面的X Window系统和相应的桌面环境,如KDE或GNOME,并包含从办公套件,编译器,文本编辑器到科学工具的应用软件。所以,许多个人、组织和企业,开发了基于GNU/Linux的Linux发行版,他们将Linux系统的内核与应用软件以及文档包装起来,并提供一些系统安装界面和系统设置与管理工具,这样就构成了一个发行版本。 Linux内核有多个并行的发行版本,例如Ubuntu,RedHat,CentOS,Suse等,其中RedHat是商业公司维护的发行版本,可以收取咨询费用,其余的大多数都是社区维护的开源版本。 从技术层面讲,内核是硬件与软件之间的一个中间层。内核不仅仅为上层应用层序提供了运行时环境,也屏蔽了应用层和底层硬件,提升了操作系统的稳定性。 抽象了底层硬件,屏蔽了应用程序和硬件的关联,对系统中的各种设备和组件进行寻址,简化了对硬件的调用。 作为资源管理程序,给应用进程分配各种共享资源,例如CPU时间、磁盘空间、网络连接等。

内核提供了丰富的功能,应用程序通过系统调用可以简化应用程序的复杂性…
CMS垃圾回收算法【Java】查看全文
JVM的CMS垃圾回收算法.png
CMS垃圾回收算法是在常用的老年代垃圾回收算法之一,CMS垃圾回收算法是一种并行的垃圾回收算法,并行是指CMS在执行GC的过程中,大部分时间是和业务线程同时运行的。不同于串行化垃圾回收算法更加注重吞吐率指标,CMS垃圾回收算法主要关注的指标是暂停时间。

CMS垃圾回收算法主要分为以下流程: 初始标记,初始标记是从GC root开始,将所有的垃圾进行标记。 并发标记,GC root直接关联的对象完成标记之后,CMS垃圾回收算法就可以进行并发标记。 重新标记,在并发标记的过程中,业务程序还在运行,所以可能会有漏标和误标的情况发生,漏标是指应该被标记为垃圾的对象未被标记,误标是指被标记为垃圾的对象又被重新引用,重新标记主要是为了解决误标的问题。 并发清理的过程是和业务程序同时运行的,将系统中已经被标记为垃圾的对象进行清理,之后该空间可以释放被重新分配。 初始标记 初始标记阶段是STW(Stop The World,暂停所有业务线程)的,因为初始标记阶段是将和GC root直接关联的对象进行标记,所以该阶段需要一个静态的快照,也就是需要STW。 但是因为GC Root的数据对象是一个相对固定的数量,和堆空间的大小无关,所以初始标记的时间是相对可控的。 GC Root是垃圾回收算法标记的起点,GC Root是指明确存活的不能被垃圾回收的对象,这些对象: 虚拟机线程栈的引用的对象,即局部变量表 方法区的常量以及类静态属性的变量 JNI即本地方法栈中引用的对象。

Java虚拟机内部的引用,入基本数据类型的Class对象,一些常驻的异常对象(比如NullPointException、OutOfMemoryError等),还有系统类加载器…

热门分类

算法题库

精选内容