Java笔记(一)GC及类加载
垃圾回收器(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及类加载的更多相关文章
- java笔记--理解java类加载器以及ClassLoader类
类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制 ...
- 《Java编程思想》学习笔记(二)——类加载及执行顺序
<Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfIniti ...
- JAVA复习笔记:内存结构和类加载
Part1:JVM内存结构 JVM定义了若干个程序执行期间使用的数据区域.这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁.而其他的数据依赖于每一个线程,在线程创建时创建,在线程退出 ...
- 深入理解Java虚拟机读书笔记4----虚拟机类加载机制
四 虚拟机类加载机制 1 类加载机制 ---概念:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型. -- ...
- java笔记整理
Java 笔记整理 包含内容 Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...
- Effective Java笔记一 创建和销毁对象
Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...
- Java 垃圾回收(GC) 泛读
Java 垃圾回收(GC) 泛读 文章地址:https://segmentfault.com/a/1190000008922319 0. 序言 带着问题去看待 垃圾回收(GC) 会比较好,一般来说主要 ...
- java笔记----面试题总结(一)【转】
1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注 ...
- 深入理解Java虚拟机(类文件结构+类加载机制+字节码执行引擎)
目录 1.类文件结构 1.1 Class类文件结构 1.2 魔数与Class文件的版本 1.3 常量池 1.4 访问标志 1.5 类索引.父索引与接口索引集合 1.6 字段表集合 1.7 方法集合 1 ...
随机推荐
- leetcode26
public class Solution { public int RemoveDuplicates(int[] nums) { var len = nums.Length; ) { ; } els ...
- TMS Grid
TMS Grid http://edn.embarcadero.com/article/42553
- Spring Boot实践——多线程
多线程 Spring通过任务执行器(TaskExecutor)来实现多线程和并发编程.使用ThreadPoolTaskExecutor可实现一个基于线程池的TaskExecutor.而实际开发中任务一 ...
- Tomcat 实战-调优方案
来自: http://blog.csdn.net/u010028869/article/details/51793821 来自: https://www.cnblogs.com/baihuites ...
- 迷你MVVM框架 avalonjs 1.3.1发布
avalon1.3.1发布. interpolate支持注释节点做定界符,avalon.config({interpolate:["<!--","-->&qu ...
- 理解C# 4 dynamic(4) – 让人惊艳的Clay(转)
作者:Justrun名字来自<阿甘正传>,是希望自己能够更更傻一点. link: http://www.cnblogs.com/JustRun1983/p/3529157.html 理 ...
- 无法启动Tomcat, 端口被占用的问题
这个错误是说这几个端口已经有某个应用程序占用了,所以Tomcat就没法启动了. 出现这个问题的原因可能有以下几种: 情况一:点击运行的时候没有选中页面或Servlet窗口的标签 标签被选中时: 标 ...
- Eclipse 安装PyDev开发Python及初步使用
Eclipse 安装PyDev插件后可开发Python 参考网址:https://blog.csdn.net/wscdylzjy/article/details/44066977 具体请参考上述网址, ...
- 此实现不是Windows平台FIPS验证的加密算法的一部分
运行wpf程序,出现错误“此实现不是Windows平台FIPS验证的加密算法的一部分”. 解决方法: 1.在window中打开功能里输入regedit,回车打开注册器: 2.进入如下路径中 HKEY_ ...
- 文字如何实现完美UI?文本排版设计告诉你
一部手机,电量充足,网络通畅,就足以让我们打发一天的时光,尽情沉浸在手机时代的缤纷世界里.这个信息资源无穷尽的手机网络世界,是设计师和开发者们在不停的探索中一路一步精心打造.如何进一步美化这个世界,优 ...