一、什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向 ...
分类:
编程语言 时间:
2017-07-31 16:27:54
阅读次数:
185
作为程序开发人员,我们必然都见过代码运行后抛出的异常。初学者见到程序运行后没有出现预期的结果,而是出现了看都看不懂的异常提示,心都要碎了。编程人员中流传着一句话,没有无异常的代码。虽然说得比较绝对,但是足以见到异常在代码开发过程中,异常,是多么得常见。 当然,遇到问题去解决才是我们应有的态度,如果退 ...
分类:
编程语言 时间:
2017-07-31 01:07:51
阅读次数:
287
一、JVM介绍 1. 什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个 ...
分类:
其他好文 时间:
2017-07-30 21:07:25
阅读次数:
149
运行时常量池是方法区的一部分。class中除了有类的版本,字段,方法,接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存放在方法区的运行时常量池中。 Java虚拟机对class文件的每一部分(自然也包括常量池)的格式都有严重的规定,每一个字节用 ...
分类:
编程语言 时间:
2017-07-30 18:10:15
阅读次数:
101
准备阶段的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到了Java虚拟机外部去实现,以便让应用程序自己决定如何如获取所需要的类。实现这个动作的代码模块称为“类加载器” 1.类与类加载器 每一个类加载器都有一个独立的类名称空间,由类加载器和类一起合作才能确定一个类在虚拟机中的唯一性。 ...
分类:
其他好文 时间:
2017-07-30 16:57:14
阅读次数:
138
与程序计数器一样,Java虚拟机栈也是线程私有的,他的生命周期与线程相同。虚拟机栈描述的是Java执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表,操作栈,动态链接,方法出口等信息。每个方法被调用直至执行完成的过程,就对应一个虚拟机栈由入栈到出栈的过程。 局部变量表存放了编 ...
分类:
编程语言 时间:
2017-07-30 15:48:07
阅读次数:
119
布尔类型boolean比较特殊,尽管Java虚拟机定义了boolean类型,但虚拟机对boolean类型的支持是有限的,没有为boolean值单独设计JVM指令。操作布尔值的表达式在编译之后,它使用的是JVM的int数据类型,也就是占用4个字节。 JVM也不会直接支持boolean数组,boolea ...
分类:
编程语言 时间:
2017-07-30 12:37:39
阅读次数:
111
一、概述 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。经过这么长时间的发展,java GC机制已经日臻完善, ...
分类:
其他好文 时间:
2017-07-30 11:39:46
阅读次数:
195
程序计数器是一块较小的内存空间,他可以看做是当前线程所执行的行号指示器。在虚拟机的概念模型(仅是概念模型,各种虚拟机可能会通过一些更高效率的方式去实现)里,字节码解释器工作室就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等基础功能都需要依赖这个计数器 ...
分类:
编程语言 时间:
2017-07-29 17:39:48
阅读次数:
137
Java运行时数据区域划分 Java JVM 内存 堆 栈 1、 概述 对于Java程序员来说,在虚拟机自动内存管理机制下,不容易出现内存泄漏和内存溢出现象。但如果不了解虚拟机是如何使用内存的,一旦出现了内存泄漏和溢出方面的问题,那么排错就无从下手了。 2、 运行时数据区域 Java虚拟机在执行Ja ...
分类:
编程语言 时间:
2017-07-29 10:16:38
阅读次数:
183