随笔分类 -  JVM

java 虚拟机知识小集
摘要:一、概述 内存在计算机中占据着至关重要的地位,任何运行时的程序或者数据都需要依靠内存作为存储介质,否则程序将无法正常运行。与C和C++相比,使用Java语言编写的程序并不需要显示的为每一个对象编写对应的内存分配和内存回收等相关的函数,这主要是得益于JVM的自动内存管理机制,使得Java开发人员可以从 阅读全文
posted @ 2017-07-27 16:22 不会就问咯 阅读(513) 评论(0) 推荐(0) 编辑
摘要:首先来了解一下字节码和class文件的区别: 我们知道,新建一个Java对象的时候,JVM要将这个对象对应的字节码加载到内存中,这个字节码的原始信息存放在classpath(就是我们新建Java工程的bin目录下)指定的目录下的.class文件,类加载需要将.class文件导入到硬盘中,经过一些处理 阅读全文
posted @ 2017-07-19 21:28 不会就问咯 阅读(318) 评论(0) 推荐(0) 编辑
摘要:类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java Applet 需要从远程下载 Java 类文件到浏 阅读全文
posted @ 2017-07-19 21:27 不会就问咯 阅读(284) 评论(0) 推荐(0) 编辑
摘要:1 基本信息 每个开发人员对Java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这背后就涉及到了java技术体系中的类加载。Java的类加载机制是技术体系中比较核心的部分,虽然和大部分开发人员直接打交道不多,但是对其背后的机理有一定理解有助于排查程序中出现的类加载失 阅读全文
posted @ 2017-07-19 21:26 不会就问咯 阅读(4539) 评论(0) 推荐(1) 编辑
摘要:Java类加载器的作用就是在运行时加载类。Java类加载器基于三个机制:委托、可见性和单一性。委托机制是指将加载一个类的请求交给父类加载 器,如果这个父类加载器不能够找到或者加载这个类,那么再加载它。可见性的原理是子类的加载器可以看见所有的父类加载器加载的类,而父类加载器看不到子类 加载器加载的类。 阅读全文
posted @ 2017-07-19 21:25 不会就问咯 阅读(558) 评论(0) 推荐(0) 编辑
摘要:一、Java类加载机制 1.概述 Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能。 虚拟机把描述类的数据从cla 阅读全文
posted @ 2017-07-19 21:24 不会就问咯 阅读(236) 评论(0) 推荐(0) 编辑
摘要:“全盘负责”是指当一个ClassLoader装载一个类时,除非显示地使用另一个ClassLoader,则该类所依赖及引用的类也由这个CladdLoader载入。 例如,系统类加载器AppClassLoader加载入口类(含有main方法的类)时,会把main方法所依赖的类及引用的类也载入,依此类推。 阅读全文
posted @ 2017-07-19 21:23 不会就问咯 阅读(1324) 评论(0) 推荐(0) 编辑
摘要:作为一名Java使用者,掌握JVM的体系结构也是必须的。说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。它们的关系如下图所示: 运行期环境代表着Java平台 阅读全文
posted @ 2017-07-18 19:00 不会就问咯 阅读(145) 评论(0) 推荐(0) 编辑
摘要:通过jmx可以监控vm内存使用,系统内存使用等,以下是网上某博客代码,特点是通过window和linux命令获得CPU使用率。 利用java程序实现获取计算机cpu利用率和内存使用信息。 package com.amgkaka.performance; /** *//** * 监视信息的JavaBe 阅读全文
posted @ 2017-07-04 00:48 不会就问咯 阅读(3311) 评论(0) 推荐(0) 编辑
摘要:本篇文章主要介绍了"JAVA GC垃圾收集器的分析",主要涉及到JAVA GC垃圾收集器的分析方面的内容,对于JAVA GC垃圾收集器的分析感兴趣的同学可以参考一下。 在 很多人看来,java中内存的动态分配与内存回收已经不用用户担心了,因为它给我们提供了GC自动回收 ,感觉一切都进入了自动化了,但 阅读全文
posted @ 2017-06-09 01:53 不会就问咯 阅读(390) 评论(0) 推荐(0) 编辑
摘要:对象死亡历程 1.基本的mark&sweep是必须的,后续的都是对他的改进, 2.young代理的survivor就是使用了复制算法,避免碎片 3.还有标记整理算法(压缩),就是将存活的对象移动到一块,空出连续的空间; 4.当然还有分代算法 “引用的定义” JDK1.2之前,引用很纯粹,也很狭隘,对 阅读全文
posted @ 2017-06-09 01:42 不会就问咯 阅读(585) 评论(0) 推荐(0) 编辑
摘要:《JAVA编程思想》: Java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize()。 (1).对象不一定会被回收。 (2).垃圾回收不是析构函数。 (3).垃圾回收只与内存有关。 (4).垃圾回收和finalize()都是靠不住的,只要JVM还没有快到耗尽内存的 阅读全文
posted @ 2017-06-09 01:27 不会就问咯 阅读(375) 评论(0) 推荐(0) 编辑
摘要:总结:强引用:普通new对象的引用User user = new User();jvm宁愿抛出OutOfMemory异常也不会去回收该对象软引用:SoftReference引用的装饰的对象,该对象的强引用应该赋值空这里配合ReferenceQueue使用(也可以不配合),因为SoftReferenc 阅读全文
posted @ 2017-06-09 00:59 不会就问咯 阅读(203) 评论(0) 推荐(0) 编辑
摘要:Java堆中是JVM管理的最大一块内存空间。主要存放对象实例。 在JAVA中堆被分为两块区域:新生代(young)、老年代(old)。 堆大小=新生代+老年代;(新生代占堆空间的1/3、老年代占堆空间2/3) 新生代又被分为了eden、from survivor、to survivor(8:1:1) 阅读全文
posted @ 2017-06-08 05:21 不会就问咯 阅读(3239) 评论(0) 推荐(1) 编辑
摘要:6. GC收集器有哪些?它们的特点是? 常见的GC收集器如下图所示,连线代表可搭配使用: 1.Serial收集器(串行收集器) 用于新生代的单线程收集器,收集时需要暂停所有工作线程(Stop the world)。优点在于:简单高效,单个CPU时没有线程交互的开销,堆较小时停顿时间不长。常与Seri 阅读全文
posted @ 2017-06-08 04:47 不会就问咯 阅读(333) 评论(0) 推荐(0) 编辑
摘要:1. 内存模型以及分区 JVM内存模型如下图所示: 此处我们集中注意中间绿色的部分,该部分为JVM的运行时内存,该部分包含了: 线程私有的(灰色): 程序计数器:记录执行到第几条指令 虚拟机方法栈:执行Java方法所用,每执行一个方法便加入一个栈帧,里面含有局部变量表、操作栈、动态链接和方法出口等 阅读全文
posted @ 2017-06-08 04:46 不会就问咯 阅读(907) 评论(0) 推荐(0) 编辑
摘要:Java虚拟机在程序执行过程会把jvm的内存分为若干个不同的数据区域来管理,这些区域有自己的用途,以及创建和销毁时间。 JVM内存模型如下图所示: jvm管理的内存区域包括以下几个区域: 栈区: 栈分为java虚拟机栈和本地方法栈 重点是Java虚拟机栈,它是线程私有的,生命周期与线程相同,用于存储 阅读全文
posted @ 2017-06-08 03:16 不会就问咯 阅读(651) 评论(0) 推荐(0) 编辑
摘要:1. 内存模型以及分区,需要详细到每个区放什么。 2. 堆里面的分区:Eden,survival from to,老年代,各自的特点。 3. 对象创建方法,对象的内存分配,对象的访问定位。 4. GC的两种判定方法:引用计数与引用链。 5. GC的三种收集方法:标记清除、标记整理、复制算法的原理与特 阅读全文
posted @ 2017-06-08 03:15 不会就问咯 阅读(328) 评论(0) 推荐(0) 编辑