Java基础-JVM篇】的更多相关文章

1.1 .线程 ​ 这里所说的线程指程序执行过程中的一个线程实体.JVM 允许一个应用并发执行多个线程.Hotspot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系.当线程本地存储.缓冲区分配.同步对象.栈.程序计数器等准备好以后,就会创建一个操作系统原生线程.Java 线程结束,原生线程随之被回收.操作系统负责调度所有线程,并把它们分配到任何可用的 CPU 上.当原生线程初始化完毕,就会调用 Java 线程的 run() 方法.当线程结束时,会释放原生线程和 Java 线程的…
Java基础-JVM调优策略简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.JVM结构分析 1>.JVM结构图 2>.JVM运行时数据区功能说明 JVM管理的内存段可分为两大类:线程共享内存和线程私有内存. 2.1:线程共享内存 方法区:存储jvm加载class,常量,静态变量,即时编译器编译后的代码等. java堆:存储Java的所有对象实例,数组等: 2.2:线程私有内存 程序计数寄存器:每个线程有自己的计数存寄器,存储当前线程执行字节码的地址: jvm栈:jv…
整体大纲图 1.认识java 核心知识点:JVM.搭建Java开发环境.java的发展史.java特点.java程序类型.垃圾收集器.J2SE下载和安装.环境变量的配置和测试.以及简单的开发工具的使用等等:主要了解java的发展史.特点.JDK.JRE.java技术体系.以及工具的安装与简单使用: 1.1.初步了解计算机 1.1.1 硬件与软件的区别? 硬件 1.cpu是一台计算机的运算核心和控制核心.其功能主要是解释计算机指令以及处理计算机软件中的数据.CPU由运算器.控制器.寄存器.高速缓存…
Java基础语法 思维导图 一.Java语言介绍 1.Java应用平台 JavaSE(Java Platform Standard Edition):开发普通桌面和商务应用程序,是另外两类的基础 JavaEE(Java Platform Enterprise Edition):是为开发企业环境下的应用程序提供的一套解决方案,包含Servlet.Jsp等,主要针对Web应用程序开发 JavaME(Java Platform Micro Edition):是为开发电子消费产品和嵌入式设备提供的解决方…
本文已经收录进我的 79K Star 的 Java 开源项目 JavaGuide:https://github.com/Snailclimb/JavaGuide (「Java学习+面试指南」一份涵盖大部分Java程序员所需要掌握的核心知识.) 相关阅读:完结撒花!Github接近80K点赞的Java面试指南来啦! 大家好,我是 Guide 哥,一个三观比主角还正的技术人. 两个星期前,我和我的好朋友决定做一系列的 Java 知识点常见重要问题的小册.小册的标准就一个,那就是:取精华,取重点.每一…
首先看一个解析列子 JVM的内存空间: (1). Heap 堆空间:分配对象 new Student() (2). Stack 栈空间:临时变量 Student stu (3).Code 代码区 :类的定义,静态资源 Student.class eg:Student stu = new Student(): //new 在内存的堆空间创建对象 stu.study(); //把对象的地址赋给stu引用变量 上例实现步骤: a.JVM加载Student.class 到Code区 b.new Stud…
Sun的JVMGenerationalCollecting(垃圾回收)原理是这样的:把对象分为年青代(Young).年老代(Tenured).持久代(Perm),对不同生命周期的对象使用不同的算法.(基于对对象生命周期分析) 1.Young(年轻代) 年轻代分三个区.一个Eden区,两个Survivor区.大部分对象在Eden区中生成.当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这个Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当这…
JVM的类加载是通过ClassLoader及其子类来完成的,类的层次关系和加载顺序可以由下图来描述: 1)Bootstrap ClassLoader /启动类加载器 $JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类  2)Extension ClassLoader/扩展类加载器 负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包 3…
jvm=> java虚拟机 一.java虚拟机的生命周期: Java虚拟机的生命周期 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序.程序开始执行时他才运行,程序结束时他就停止.你在同一台机器上运行三个程序,就会有三个运行中的Java虚拟机. Java虚拟机总是开始于一个main()方法,这个方法必须是公有.返回void.直接受一个字符串数组.在程序执行时,你必须给Java虚拟机指明这个包换main()方法的类名. Main()方法是程序的起点,他被执行的线程初始化为程序的初始线…
一:为什么要用多线程: 我相信所有的东西都是以实际使用价值而去学习的,没有实际价值的学习,学了没用,没用就不会学的好. 多线程也是一样,以前学习java并没有觉得多线程有多了不起,不用多线程我一样可以开发,但是做的久了你就会发现,一些东西必须用多线程去解决. 明白并发编程是通过cpu调度算法,让用户看上去同时执行,实际上从cpu操作层面不是真正的同时. 多线程安全问题原因是在cpu执行多线程时,在执行的过程中可能随时切换到其他的线程上执行. 二:创建线程的方式 (1)继承Thread类 用户的线…
推荐阅读:https://www.cnblogs.com/wangjzh/p/5258254.html 一.内存结构图 先导知识: 一个 Java 源程序文件,会被编译为字节码文件(以 class 为扩展名),每个java程序都需要运行在自己的JVM上,然后告知 JVM 程序的运行入口,再被 JVM 通过字节码解释器加载运行. 程序计数器 保存着当前线程执行的虚拟机字节码指令的内存地址,可以看作是当前线程所执行的字节码的行号指示器.使得保证线程切换回来后,还能恢复到原先状态.(本地native丰…
多线程和Java虚拟机 创建线程有几种不同的方式?你喜欢哪一种?为什么? 继承Thread类 实现Runnable接口 应用程序可以使用Executor框架来创建线程池 实现Callable接口. 我更喜欢实现Runnable接口这种方法,当然这也是现在大多程序员会选用的方法.因为一个类只能继承一个父类而可以实现多个接口.同时,线程池也是非常高效的,很容易实现和使用. 简述线程,程序.进程的基本概念.以及他们之间关系是什么?(参考书籍:<Java程序设计基础>第五版) 线程与进程相似,但线程是…
面向对象和面向过程的区别 面向过程:   优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机.嵌入式开发.Linux/Unix等一般采用面向过程开发,性能是最重要的因素. 缺点:没有面向对象易维护.易复用.易扩展 面向对象:   优点:易维护.易复用.易扩展,由于面向对象有封装.继承.多态性的特性,可以设计出低耦合的系统,使系统更加灵活.更加易于维护 缺点:性能比面向过程低 Java语言有哪些特点?   1,简单易学:2,面向对象(封装,继承,多态):3,平台无…
final关键字:final:最终,终极 final:作用:修饰类,变量,方法.成员变量的访问 1.final修饰变量: final修饰局部变量: 把这个局部变量 变成一个厂里,这个厂里只能被赋值一次 final修饰成员变量: 要求这个成员变量 在创建对象之前必须初始化 所以final修饰的成员变量 第一直觉赋值 第二构造方法赋值 但是也只能赋值一次 2.final修饰的类:(太监类) ,不能被子类继承(String) final修饰的方法:(子类不能重写) 静态代码块:通常写到成员位置 *  …
1.JDK:Java Development kit 能对Java程序编译,运行 包含JRE JRE:Java Runtime Environment 能对Java程序运行 包含JVM和一些核心类库 JVM:Java Virtual Machine 最终Java程序是在JVM跑起来 Java 跨平台的根本是因为不同平台下有对应版本虚拟机 关系:JDK = JRE + 工具; JRE = JVM + 类库; 2.配置环境变量: 对于Java程序开发而言,主要会使用JDK的两个命令:javac.ex…
文章更新时间:2020/08/03 一.List介绍 list是Java的一个接口,继承了Collection,常用到的有3个子类实现: ArrayList 底层数据结构是数组.线程不安全 LinkedList 底层数据结构是链表.线程不安全 Vector 底层数据结构是数组.线程安全 下面就这3个常用子类进行分析学习. 二.ArrayList ArrayList位于java.util包下,由于英文水平有限,且注释又全是英文,我把里面的代码copy出来,并用自己的语言来整理并理解ArrayLis…
一.啥是I/O 概念:I/O为输入,输出流的统称,流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象. 本质:本质是数据传输,即数据在两设备间的传输称为流,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. 分类: 根据处理数据类型的不同分为: 字符流[字符流以字符为单位,且只能处理字符类型的数据] 字节流[字节流以字节(8bit)为单位,能处理所有类型的数据(如图片.avi等)] 根据数据流向不同分为: 输入流[只能进行读操作] 输出流[只能进行写操作] 结构导图:…
一.反射是个啥 定义 : 在运行状态中动态获取的类的信息以及动态调用对象的方法,这种功能称为java语言的反射机制. 对于任意一个类,都能够知道这个类的所有属性和方法. 对于任意一个对象,都能够调用它的任意一个方法和属性. 二.Class对象 定义 : 我们在开发过程中,创建的每一个类也是对象,即类本身是java.lang.Class类的实例对象,我们称这个实例对象为类对象,也就是Class对象. 学习反射前我们先要了解类对象有什么用: Class 类的实例对象表示正在运行的 Java 应用程序…
3.1. JAVA 并发知识库 3.2. JAVA 线程实现/创建方式 3.2.1. 继承 Thread 类 ​ Thread 类本质上是实现了 Runnable 接口的一个实例,代表一个线程的实例.启动线程的唯一方 法就是通过 Thread 类的 start()实例方法.start()方法是一个 native 方法,它将启动一个新线 程,并执行 run()方法. public class MyThread extends Thread { public void run() { System.…
一.覆写(重写) 1.含义:子类的定义方法.属性和父类的定义方法.属性相同时候 方法名称相同,参数相同以及参数的个数也相同,此时为覆写(重写) 扩充知识点: 覆盖:只有属性名字和方法名字相同,类型.个数不同的,就是覆盖 覆盖与重载的区别: 重载是在当前类中只是名字相同,而重载是继承类中只是名字不同,他们作用域不相同 一.关键字final ---------->终结器 1.定义final的类不能被其他类继承 2.定义final的类不能被子类覆写 3.final定义的变量叫常量,申明之后内容不能被修…
一.类和对象分配内存 二.Java中的内部类  : 可以直接去访问外部类的所有属性(包括私有成员) 1.Java中成员内部类 (1).内部类的方法可以直接访问外部类的类中的所有成员变量 (2).外部类不能直接去访问内部类的私有的成员变量,可以通过创建内部类的对象取间接的去访问 (3)外部去声明内部类的方法   即:外部类.内部类 对象名 = new 外部类对象.new 内部类( ); Inter.Inter1  inter = new Inter().new Inter1(); (4).如果外部…
3.选择结构 a.if: 格式一: if(表达式1){ 表达式1为真才执行 } 格式二: if(表达式1){ 表达式1为真才执行 }else{ 表达式1位假才执行 } 格式三:判断工龄的范围,判断成绩的范围 if(表达式1){ 表达式1为真才执行 }else if(表达式2){ 表达式1为假并且表达式2为真 才执行 }else if(表达式3){ 表达式1为假并且表达式2为假并且表达式3为真 才执行 }... b.switch(理解,但是它不常用) 1.应用场景:判断四季(春夏秋冬),判断星期,…
一.引言 开发过程中可能会遇到各种各样的异常,这里还是汇总一些比较典型的异常,有些比较直观的异常如空指针这种就不写了,此文可作为异常速查用. 二.异常大军正在来袭~ IllegalArgumentException(方法的参数错误) 描述:这个异常通常发生在参数不符合要求时,程序主动抛出的场景 解决:检查调用的方法参数是否按照方法要求来设置 图示: NoSuchMethodException(方法不存在异常) 描述:这个异常通常发生在反射场景去调用一个不存在的方法时抛出 解决:检查调用是否合理,…
一.简介 lambda表达式是Java8的一个重要特性,也可以称为闭包,常用于配合Java8的Stream对集合元素进行操作,使得代码更简介紧凑. 二.代码解析 虽说lambda表达式是一个新的特性,但是使用起来还是需要注意的,在对于引用对象来操作时,用lambda表达式可以使代码更简介,不过对于基本数据类型进行操作时,有时代码量反而会增大一些,这点见仁见智了,下面通过代码来学习下: /** * 测试类 */ public class Test { public static void main…
文章更新时间:2020/03/03 一.Map介绍 Map是Java的一个接口,没有继承,以Key--Value的形式来储存元素信息,常用到的有3个子类实现: HashMap 底层数据结构是散列桶(数组和链表和红黑树).线程不安全[JDK1.8版本] TreeMap 底层数据结构是红黑树.线程不安全 HashTable 底层数据结构是散列桶(数组和单链表).线程安全 下面就这3个常用子类进行分析学习. 二.HashMap HashMap位于java.util包下 底层实现:散列桶(数组.链表和红…
一.啥是泛型 概述 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数. 格式 类名<类型名> 标记符 E - Element (在集合中使用,因为集合中存放的是元素) T - Type(Java 类) K - Key(键) V - Value(值) N - Number(数值) ? -  表示不确定的java类型(通配符) S.U.V. - 用在第2.3.4个参数类型时使用 二.代码走一波 汽车类 /** * 汽车类 */ @Data publi…
一.static的使用 1.使用static定义的属性往往通过类名直接调用,它的属性(方法)不属于某一个的对象的.所以对象没有创建之前就可以对static的属性的调用,方法亦如此. 2.static 的方法只能调用static 的方法和static的属性 3.使用非static的方法可以任意调用static的方法和static的属性…
一.this的学习方法 1.使用this调用构造方法市一定放在构造方法的首行 2.使用this调用构造方法时一定流出调用的出口 public class MyClass { public MyClass(){ System.out.printf("调用无参数的构造方法"); } public MyClass(String name) { this(); System.out.printf("调用一个参数的构造方法"); } public MyClass(String…
一.String常用的方法: 1. == 实质比较两个对象的地址数值 String a = "hello"  (hello为匿名对象) String a1 = "hello" String b = new String("hello") String b1 = new String("hello").intern String c = b; a == b ----------> false     false的原因:ne…
一.多态性的理解 1.向上转型:子类为父类对象实例化,调用的一定是子类覆写的方法,他们之间找的是共性 2.向下转型:子类扩充了父类的某些功能,而父类中没有该功能,他们之间找的是特性 案例: Number(父类)    Number1(子类) Number number = (Number1)new Number(); //ClassCastException: com.example.lib4.Number cannot be cast(强制转换的异常) number.printf(); 在向下…