垃圾回收器(GC)
    垃圾回收器:java中有一个线程,专门负责JVM中垃圾内存的释放
    垃圾:没有引用的内存节点
    垃圾回收的算法
    注意:垃圾回收有自己的算法,我们是不能控制垃圾回收机制的,虽
    然有和垃圾回收相关的方法:java.lang.System.gc()  java.lang.Runtime.gc(),但是还是无法控制垃圾回收机制,只能通过这两种方法通知GC回收。
    算法有(知道算法名字即可,不需要下去研究具体实现):标记-清除,复制,标记-整理,分代收集

Java程序执行的整个流程
    Hello.java- -编译 ->Hello.class- ClassLoader装载- ->JVM- ->字节码验证
    - ->对字节码逐行解析- ->执行
    - ->JIT(即时编译) - ->执行

JVM装载.class 文件到内存的过程剖析(双亲委托机制)

启动级类加载器(Bootstrp ClassLoader)用C++语言写的,它是在Java虚拟机启动后初始化,
    它主要负责加载%JAVA_HOME%/jre/lib,
    -Xbootclasspath参数指定的路径
    以及%JAVA_HOME%/jre/classes中的类

扩展级类加载器(Extension ClassLoader)用java语言写的,它负责将
    %JAVA_HOME%/jre/lib/ext或者由系统变量 java.ext.dir指定位置中的类
    库加载到内存中。开发者可以直接使用标准扩展类加载器。

本地类加载器(Applicaiton ClassLoader)用java语言写的,用于加载我
    们自己定义编写的类,它负责将系统类路径(CLASSPATH)中指定的类库加载到
    内存中。开发者可以直接使用系统类加载器。由于这个类加载器是ClassLoader
    中的getSystemClassLoader()方法的返回值,因此一般称为系统
    (System)加载器
 
 双亲委托机制加载类的过程
     当本地类加载器加载一个class时,它首先不会自己去尝试加载这个类,
     而是把类加载请求委派给父类加载器扩展级类加载器去完成。
    
     当扩展级类加载器加载一个class时,它首先也不会自己去
     尝试加载这个类,而是把类加载请求委派给BootStrapClassLoader去完成。
    
     如果启动级类加载器加载失败,会使用扩展级类加载器来尝试加载;
     若扩展级类加载器也加载失败,则会使用本地(系统级)类加载器来加载,
     如果本地(系统级)类加载器也加载失败,则会报出异常ClassNotFoundException。

字节码验证过程
     代码要符合JVM的规范
     代码不能破坏计算机的系统或者硬件
     栈不能溢出
     方法的参数类型要正确
     类型转换要正确

JIT(即时编译):通过代码的运行,基于2080规则基于算法找出里面重复率比较高的代码存储起来,下次调用的时候不需要在编译,直接执行。

Java笔记(一)GC及类加载的更多相关文章

  1. java笔记--理解java类加载器以及ClassLoader类

    类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制 ...

  2. 《Java编程思想》学习笔记(二)——类加载及执行顺序

    <Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfIniti ...

  3. JAVA复习笔记:内存结构和类加载

    Part1:JVM内存结构 JVM定义了若干个程序执行期间使用的数据区域.这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁.而其他的数据依赖于每一个线程,在线程创建时创建,在线程退出 ...

  4. 深入理解Java虚拟机读书笔记4----虚拟机类加载机制

    四 虚拟机类加载机制 1 类加载机制     ---概念:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型.     -- ...

  5. java笔记整理

    Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...

  6. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  7. Java 垃圾回收(GC) 泛读

    Java 垃圾回收(GC) 泛读 文章地址:https://segmentfault.com/a/1190000008922319 0. 序言 带着问题去看待 垃圾回收(GC) 会比较好,一般来说主要 ...

  8. java笔记----面试题总结(一)【转】

    1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注 ...

  9. 深入理解Java虚拟机(类文件结构+类加载机制+字节码执行引擎)

    目录 1.类文件结构 1.1 Class类文件结构 1.2 魔数与Class文件的版本 1.3 常量池 1.4 访问标志 1.5 类索引.父索引与接口索引集合 1.6 字段表集合 1.7 方法集合 1 ...

随机推荐

  1. apache启动不了, 查找错误

    今天apache启动不了, 本来以为是端口冲突, 用 cmd-> netstat -aon|findstr "80"  或 tasklist|findstr "80 ...

  2. vc通过进程名返回进程id

    std::string WcharToChar(const wchar_t* wp, size_t m_encode = CP_ACP) { std::string str; , wp, wcslen ...

  3. eclipse cut copy paste plugin

    The Cut Copy Paste Plus plug-in enhances the standard Cut, Copy and Paste commands in Eclipse IDE. W ...

  4. pymysql.err.IntegrityError: (1062, "Duplicate entry 'roxml-ROXML' for key 'PRIMARY'")

    在<Python数据挖掘-概念.方法与实践>一书的第3章实体匹配中,如果一路按照作者的代码及SQL语句进行配置运行的话,会出现如题目所示的错误.根据python脚本的执行错误提示显示,错误 ...

  5. Golang开发环境搭建-Vim篇

    一.一个干净的环境 找个干净的基础环境,方便确认每个搭建步骤后的效果: Ubuntu 14.04 x86_64 vim version 7.4.52 go version go1.4beta1 lin ...

  6. 可用于nodejs的SuperAgent(ajax API)

    简单示例: import request from 'superagent';//引用声明 request.post(api) .withCredentials()//跨域 .end((err, re ...

  7. Android Activity简介和自定义视图

    ------siwuxie95 Activity简单来说就是一个界面(如桌面也是一个Activity),不同按键对Activity的影响不同(如返回键和Home键) 布局在layout下的activi ...

  8. nSum “已知target再求和”类型题目总结:n-2重循环+left/right

    Sum类的题目一般这样: input: nums[], target output: satisfied arrays/ lists/ number 拿到题目,首先分析: 1. 是几个数的sum 2. ...

  9. App启动页设计实例与技巧

    App启动页,也称闪屏页,最初是为缓解用户等待Web/iOS/Android App数据加载的焦虑情绪而出现,后被设计师巧妙用于品牌文化展示,服务特色介绍以及功能界面熟悉等平台进行设计,被赋予了更加丰 ...

  10. myeclipse 快捷键,从步骤开始的大括号定位到匹配方法结束的大括号

    myeclipse 快捷键,从方法开始的大括号定位到匹配方法结束的大括号转至匹配的括号 Ctrl+Shift+P ctr+shift+r   文件名搜索文件 ctr+h           搜索文件里 ...