Java 虚拟机
jcsyl_mshot
点滴生活,水落石出。
展开
-
Java虚拟机的内存区域
Java 内存区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。 在J2SE 的规定中,java所管理的内存会包括一下几个部分如图所示: 程序计数器一块较小的内存空间,可以看作当前线程所执行的字节码的行号指示器,。字节码解释工作就是通过改变这个计算器的值选择要执行的下一个字节码指令。 为了支持线程切换后能回到正确的位置,每条线程都需要一个...原创 2018-04-14 15:54:13 · 224 阅读 · 0 评论 -
Java虚拟机GC
说一下Java的垃圾回收机制它使得 Java 程序员在编写程序的时候不再需要考虑内存管理。垃圾回收器通常是作为一个单独的低级别的线程运行, 不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收, 程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。 程序员可以手动执行System.gc(), 通知 GC 运行, 但是 Java 语言规范并不保证 GC 一定会执...原创 2018-04-14 19:55:10 · 1778 阅读 · 1 评论 -
Java内存分配
内存分配与回收策略对象的内存分配,其实就是往堆上分配,对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况下也可能直接分配在老年代中。1.对象优先在Eden分区分配 大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次MInor GC. Minor GC 也称为新生代GC,指发生在新生代...原创 2018-04-14 20:06:11 · 140 阅读 · 0 评论 -
Java虚拟机类加载机制
Java虚拟机类加载机制代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。1概述虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、 转换解析和初始化, 最终形成可以被虚拟机直接使用的Java类型, 这就是虚拟机的类加载机制。Java 类加载器基于三个机制: 委托性、 可见性和单一性。 1.委托机制是指双亲委派模型。 当一...原创 2018-04-15 17:15:08 · 164 阅读 · 0 评论 -
Java双亲委派模型的破坏
双亲委派模型的好处:Java类随着它的类加载器一起具备了一种带有优先级的层次关系。例如类java.lang.Object,它存在在rt.jar中,无论哪一个类加载器要加载这个类,最终都是委派给处于模型最顶端的Bootstrap ClassLoader进行加载,因此Object类在程序的各种类加载器环境中都是同一个类。相反,如果没有双亲委派模型而是由各个类加载器自行加载的话,如果用户编写了一个jav...原创 2018-04-15 19:21:07 · 1771 阅读 · 0 评论 -
Java 运行和编译的过程
Java程序从源文件创建到程序运行要经过两大步骤: 1、源文件由编译器编译成字节码(ByteCode)(编译) 2、字节码由java虚拟机解释运行。 因为java程序既要编译同时也要经过JVM的解释运行,所以说Java被称为半解释语言( “semi-interpreted” language)。编译创建完源文件之后,程序会先被编译为.class文件。Java编译一个类时,如果这...原创 2018-04-15 19:49:25 · 217 阅读 · 0 评论 -
Java反射技术总结
概念Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。 程序中一般的对象的类型都是在编译期就确定下来的,而Java反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象,即使这个对...原创 2018-04-15 21:57:35 · 211 阅读 · 0 评论 -
内存泄漏和内存溢出
1.内存泄漏内存泄漏指的是一个不再被程序使用的对象或则变量依旧在内存中占有空间。 判断一个内存空间是否符合垃圾回收的标准有两点:第一,对象赋予了null值,以后再也没有被使用。第二,给对象赋予了新值,重新分配了内存空间。内存泄漏主要有两种情况:一是堆申请的空间没有被释放掉;而是对象不再使用,依然还在内存中保留。垃圾回收机制可以有限处理第一种情况,而对第二种情况,无法保证不再使用的对象会被释放...原创 2018-05-04 15:52:31 · 589 阅读 · 0 评论 -
JVM 常见的启动参数
JVM 常见的启动参数-Xms: 设置堆的最小值。 -Xmx: 设置堆的最大值。 -Xmn: 设置新生代的大小。 -Xss: 设置每个线程的栈大小。 -XX:NewSize: 设置新生代的初始值。 -XX:MaxNewSize : 设置新生代的最大值。 -XX:PermSize: 设置永久代的初始值。 -XX:MaxPermSize: 设置永久代的最大值。 -XX:Surviv...原创 2018-05-04 15:56:58 · 489 阅读 · 0 评论