首页 > 编程语言 >深入理解Java虚拟机读书笔记

深入理解Java虚拟机读书笔记

时间:2024-03-20 14:47:53浏览次数:16  
标签:调用 Java loadClass 读书笔记 虚拟机 线程 方法

1.双亲委派模型的兼容性优化
    双亲委派模型在jdk1.2才开始,在以前是通过覆盖loadClass()方法来自定义类加载器,但是不做兼容,由于多态性,那么实际上加载时是直接用ClassLoader子类的loadClass()方法,ClassLoader的loadClass()方法不会被调用,所以为了兼容,添加了findClass(),这样自定义的类加载器只需要把方法名从loadClass()修改为findClass(),这样ClassLoader的loadClass()方法就会被调用,就能实现双亲委派模型

2.Parallel Scavenge收集器与ParNew和Serial的区别
    Parallel Scavenge收集器与ParNew和Serial的区别在于他的关注点是吞吐量,对于要与用户交互的程序应该尽可能缩短停顿时间,而后台计算任务则需要高效的利用CPU时间,这时应该提高吞吐量(吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间))

3.访问者模式实现Java的动态双分派
    Java语言是一门静态多分派和动态单分派的语言,但Java可以借助访问者模式,支持动态双分派。
    在编译期,Java可以通过调用方法的对象(接收方法调用请求的对象)的静态类型和方法参数来决定所用的具体方法的直接引用;在运行期,则只能通过接受请求的对象的实际类型来决定具体方法的直接引用,而不管方法的入参对象的实际类型是什么。
    但借助访问者模式,可以在运行期,通过调用方法的对象和方法的入参对象的实际类型来决定具体方法的直接引用

4.StackOverFlowError与OutOfMemoryError
    在32位虚拟机下,单个进程最大内存为2G。虚拟机栈有一个总内存,如果是用单线程栈深度超过阈值,或用-Xss配置单个线程的栈内存,然后单个方法栈帧太大,最终会出现StackOverFlowError,只有在可以动态扩展栈内存才会出现OutOfMemoryError。假如是创建过多的线程导致溢出,且不能减少线程数量,只能通过-Xss减少每个线程的栈容量,让系统能创建更多的线程。

5.线程停顿的时机
    Java线程需要在安全点才能被停顿从而让GC线程stop the world,同时在线程上下文切换需要停顿线程,也是要在安全点才可以。

标签:调用,Java,loadClass,读书笔记,虚拟机,线程,方法
From: https://www.cnblogs.com/qinyongsen/p/18085164

相关文章

  • 【Java】Excel 读取图片
     一、需求背景:做一个大屏管理系统,基础信息包括管理的应用名称,大屏的截图,通过一个excel批量导入excel的单元格里要插入图片,对应一个大屏应用的信息导入需要读取到大屏截图,至于存哪还没说....二、技术实现Hutool这块没有做图片读取的封装,看了网上的方式都是通过poi原生的api......
  • 【附源码】java计算机毕设基于网上书店的设计与实现(源码+开题)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的迅猛发展,电子商务已成为当今社会经济发展的重要引擎。网上书店作为电子商务的一种形式,以其便捷性、高效性和广泛覆盖性,正逐渐改变着......
  • 【附源码】java计算机毕设基于通识课程管理系统(源码+开题)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,高等教育管理逐步迈向数字化、信息化。通识课程作为高等教育的重要组成部分,其管理效率和质量直接关系到学生的学习体验和学校......
  • JAVA学习-NIO.Buffer(缓冲器)
        JavaNIO中的缓冲器(Buffer)是用来存储数据的对象。它是一个固定大小的数组,可以容纳特定类型的数据。一、JavaNIO中提供了7种类型的缓冲器,分别是:1.ByteBuffer:字节缓冲器,用来存储字节数据。2.CharBuffer:字符缓冲器,用来存储字符数据。3.ShortBuffer:短整型缓......
  • JAVA学习-NIO.Channel(通道)
        在JavaNIO中,Channel(通道)是用于在文件、套接字、管道等之间进行数据传输的对象,它类似于传统IO中的流。通道可以用于读取和写入数据,并且可以同时进行读写。一、JavaNIO中提供了几种类型的通道,主要有以下几种:1.FileChannel:用于对文件进行读写操作的通道。2.Da......
  • MySQL - 使用navicate连接虚拟机中linux的mysql
    1、首先在命令行中使用ifconfig命令查看虚拟机IP地址,这个地址是输入到navicat主机名中的。 2、查看window本地Telnet有没有选上;没有的话就勾选上。 3、虚拟机Linux防火墙设置 使用systemctlstopfirewalld命令关闭防火墙#检查Linux防火墙设置状态systemctlstat......
  • java基础案例
    java案例买飞机票packagecom.item.huang;//买飞机票publicclassTest01{publicstaticvoidmain(String[]args){doubleprice=calculate(1000,5,"经济舱");System.out.println(price);}//方法头需接收机票原价,当前月份,舱位类型......
  • VMware vSphere Replication 9.0 - 虚拟机复制和数据保护
    VMwarevSphereReplication9.0-虚拟机复制和数据保护请访问原文链接:https://sysin.org/blog/vmware-vsphere-replication-9/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org新增功能vSphereReplication9.0提供以下新功能:VMwareLiveRecovery一种新的解决......
  • Java数据类型详解(更新中)
    基本数据类型概览共8种:整型byte、short、int、long         浮点型float、double           字符型char           布尔型boolean大小1位即1bit,一字节(byte)等于8bit数据类型数据范围byte8位(一个字节)-127~128(2^7)short......
  • 基于Java的校园电商物流云平台(Vue.js+SpringBoot)
    目录一、摘要1.1项目介绍1.2项目录屏二、功能模块2.1数据中心模块2.2商品数据模块2.3快递公司模块2.4物流订单模块三、系统设计3.1用例设计3.2数据库设计3.2.1商品表3.2.2快递公司表3.2.3物流订单表四、系统展示五、核心代码5.1查询商品5.2查询快递公......