JVM学习笔记

使用PLINK做GWAS(2) 利用PLINK对单基因控制的性状进行定位,之前一篇文章粗滤的记录了一下使用PLINK的命令,本次博客主要记录一下如何根据SNP芯片的数据制作PLINK的格式,以及分析的步骤,最后数据的可视化。 首先,有的公司给的新片的数据就是一个excel表格,列表示的是样品,行表示的是基因型,基因型用ATCG构成,当然有的基因型是用数字0或者1表示的。下面我拿到的一个数据是15个样品构成的基因型,有13个样品是突变体,2个样品是野生型。 格式如下: 第二步:将此基因型存成csv文件,使用R进行读取,在R中制作pl 阅读详情

JVM


​

1、什么是JVM?它是做什么的?

​

JVM是Java虚拟机的缩写。主要是将Java字节码解释或编译为机器码,可在不同操作系统和硬件平台运行Java程序。一次编写,到处运行。

​ JVM有以下主要任务:

  • 类加载:将子字节码加载到内存中,将其转化为可执行的类。

  • 字节码执行:编译字节码。

  • 内存管理:JVM管理程序的内存分配和释放。

  • 垃圾回收:检测和回收不再使用的对象,释放内存空间。

  • 安全管理:提供安全机制,确保Java在受控环境运行,防止恶意代码执行。

  • 线程 管理:允许多线程执行。提供线程同步和协作的机制。

  • 异常处理:可捕获和处理Java中异常。

2、JVM的组成部分有哪些?

​ ①类加载器:将字节码文件加载到JVM中,并将其转换为可执行的类。

​ ②运行时数据区:jvm将内存划分为不同数据区域,存储程序运行时的数据。主要包含方法区:存储类结构信息,静态变量,常量池。

		堆:存储对象实例和数组。
		java栈:每个线程运行时都会创建一个栈,存储局部变量,方法参数等。
		本地方法栈:执行本地方法所用。
		程序计数器:指示当前线程正在执行的指令地址。

​ ③执行引擎:解释和执行字节码。

​ ④垃圾回收器:自动管理内存,回收不再使用的对象。

​ ⑤本地方法接口:允许Java程序调用本地方法库中的方法。

​ ⑥可拓展性:JVM提供了一系列工具和接口,用于诊断和监控应用程序的性能、调试代码和进行性能优化。

3、什么是字节码?为什么Java使用字节码?

		字节码是Java编译器将Jaava代码编生成的中间代码。

​ 使用字节码主要原因:

  • 平台无关性
  • 安全性:字节码执行之前JVM会进行安全检查。
  • 性能优化:字节码被即时编译器动态编译为本地机器码,提高效率。
  • 可以执行:不依赖特定平台。
  • 开发效率:编译更快。

4、什么是即时编译器(Just-In-Time Compiler)?它与解释器有什么区别?

			 即时编译器是将字节码动态编译成本地机器码,提高程序执行效率。 

​ 和解释器的区别如下:

​ ①执行方式:解释器是逐条解释执行字节码,即时编译器是在运行时将频繁执行的代码编译为本地机器码,直接执行编译后的机器码。

​ ②执行效率:解释器每次执行都要解释字节码执行,慢;

​ 即时编译器将热点代码编译后直接执行机器码,快。

​ ③优化能力:解释器每次执行都会解释,没有优化机会。

​ 即时编译器可以动态对热点代码优化,提高效率。

​ ④编译延迟:解释器可以立即执行,不需要等待编译。

​ 即时编译器在运行时编译热点代码,刚启动存在延迟。

​ ⑤内存占用:解释器占用内存较少。

​ 即时编译器在编译过程中会生成本地机器码,需要更多空间。

5、JVM内存分为哪些区域?请描述它们的作用和特点。

  • 程序计数器:指示当前线程正在执行的字节码指令的地址。
  • Java虚拟机栈:存储线程的方法和局部变量等信息。
  • 本地方法栈:存储本地方法,局部变量等信息。
  • 堆:存储对象实例和数组。分为新生代和老年代。新生代又分为伊甸区和Survivor区。
  • 方法区:存储一家在的类的信息、常量、变量等。
  • 运行时常量池:存储编译器生成的各种字面量和符号引用。

6、堆的详解,新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?

​ 用于存储对象实例和数组。划分为新生代和老年代。

​ 新生代:

  • Eden区:对象被创建时首先分配在Eden区。Eden区满时,出发Young GC进行垃圾回收。幸存对象会被移动到Survivor区。
  • Survivor区:分为From区和To区。Minor GC发生时,幸村对象从Eden区和From区复制到To区,复制过程中对象年龄逐渐增加,多次幸存后,会一共到老年区。

​ 老年代:
分为
CMS收集器:采用并发标记和并发清除方式进行垃圾回收。
G1收集器:采用分代收集和并发标记清除方式,将堆划分为多个区域,处理。
Serial Old收集器:采用单线程进行垃圾回收。

​ 存储多次经过Minor GC后仍然存活的对象。新生代经历多次幸存后,会晋升到老年代。老年代的垃圾回收频率更低,对象存活 更稳定。老年代满时,会触发Full GC进行垃圾回收。

区别

新生代
    主要负责回收新创建的对象,一般采用复制算法。分区,
	将内存分为Eden区、Survivor区From和Survivor区To。通过将存活的对象复制到Survivor区,
	然后清空Eden区和From区的方式来回收垃圾。
老年代
    主要回收存活时间长的对象,一般采用标记清除算法,
	老生代垃圾回收器通常需要在停顿的情况下进行垃圾回收,可能会导致较长的停顿时间

7、Java对象在内存中是如何分配的?请解释堆和栈的区别。

​ 对象实例存储在堆中,堆是动态分配的内存区域。

​ Java中的方法和局部变量存储在栈(stack)中。栈是一种具有后进先出(LIFO)特性的数据结构。

​ 堆的分配和释放相对较慢,

​ 栈的分配和释放速度非常快,但是栈的大小是有限的。当方法调用嵌套层级过深或者局部变量过多时,栈可能会溢出,导致栈溢出错误。

		1、存储内容:堆存储对象实例和数组,栈存储方法调用和局部变量。
		2、线程共享:堆被所有线程共享。每个线程都有自己的栈。
		3、内存管理:堆是动态分配,由垃圾回收器分配和销毁。栈是自动的,随着方法的调用和返回自动分配释放。
		4、内存大小:堆是可以通过jvm配置,栈 固定。
		5、异常:堆空间不足导致OutOfMemmoryErrror,栈内存不足导致StackOverFlowError。

​

8、什么是垃圾回收(Garbage Collection)?为什么需要进行垃圾回收?

​ 垃圾回收用于检测和回收程序中不再使用的资源,

​ 需要进行垃圾回收的原因:

  • 防止内存泄漏:对象或者数据不再使用,如果不回收,会一直占用内存空间。
  • 动态内存管理:动态创建对象,减少手动释放。
  • 提高性能:根据程序的运行情况智能地管理内存,减少内存碎片化的问题。

9、垃圾回收器有哪些类型?请描述它们的工作原理和适用场景。

  • ​ 标记-清除:分为标记阶段和清除阶段,
  • ​ 复制:分为活动区域,和回收区域,活动区满了的情况下将存活的对象复制到回收区,清除活动区所有对象。
  • ​ 标记-压缩:它首先通过标记阶段标记可达对象,然后将存活对象紧凑地移动到内存的一端,清除边界之外的内存空间。
  • ​ 分代:新生代、老年代。

10、如何判断对象是否可以被垃圾回收?

      1、可达性分析算法:垃圾回收器自动判断。Java中的垃圾回收器使用可达性分析算法判断对象是否可以被回收。
      		如果对象不再被任何活动的引用链所引用,那就是不可达,可以被回收。
      2、引用计数法:每个对象都有一个引用计数器,当有引用指向该对象时,计数器加1,当引用失效时,计数器减1。
      		当计数器为0时,表示该对象不再被引用,可以被回收。
      3、引用队列: 将某些对象的引用放入队列中。当这些对象变为不可达时,它们会被添加到引用队列中,
      		开发人员可以在合适的时机、处理这些对象。

11、什么是类加载器(ClassLoader)?它的作用是什么?请解释双亲委派模型。

		类加载器负责将Java类的字节码加载到内存中,将其转化为可执行的java对象。

​ 双亲委派模型是类加载器的一种,当一个类加载器需要加载某个类时,它首先将任务委托给父类加载器。如果父类加载器无法加载该类,子类加载器才会尝试加载。

​ 双亲委派模型优点:

		1、避免类重复加载:先检查父类有没有祖先加载过,避免重复加载同一个类。
		2、安全性
		3、类的隔离性:不同类加载器加载位于不同命名空间的类,相同类名的类可以被不同的类加载器加载。

​

12、类加载的过程是怎样的?请解释加载、验证、准备、解析和初始化这五个阶段的含义。

  1. 加载:将类的字节码文件加载到jvm。

  2. 验证:确保加载的字节码文件是否符合规范。

  3. 准备:为类的静态便令在内存中分配空间,设置初始值。

  4. 解析: 将符号引用转为直接引用。

  5. 初始化: 按顺序执行静态变量的初始化和静态代码块中的代码。

13、什么是永久代(Permanent Generation)和元数据区(Metaspace)?它们的作用是什么?

​ 永久代:用于存储类的相关信息,如类的结构信息,运行时常量池,静态便令,即时编译器编译后的代码等。

​ 永久代的大小是有限的,

​ 元数据区主要是存储类的元数据信息,可以动态加载类,大小可以通过jvm参数进行配置,可以自动拓展。

14、Java中的String为什么被设计为不可变类?有什么好处?

​ 1、字符串池的优化:String是不可变的,所以相同内容的字符串在内存中只需要存储一份。创建新对象时,jvm首先检查池中是否存在相同内容的,如果存在,直接返回引用。可节省空间,提高性能。

​ 2、线程安全:值不可变。多个线程可以共享同一个String对象。

​ 3、缓存哈希值:String类在创建时会计算并缓存它的哈希值。之后再次需要哈希值时可以直接使用缓存的值,提高了性能。

​ 4、安全性。

​ 5、方法和参数传递:String不可变,更安全。

15、如何进行JVM性能调优?请列举一些常见的优化技巧和工具。

​ 1、内存管理:通过-Xmx和-Xms调整堆的最大和初始化大小。

​ 2、线程管理:减少线程数量,避免创建过多线程。选择合适的线程池。

​ 3、代码优化:减少对象创建。减少堆共享资源的锁竞争。

​ 4、JVM参数调优。调整堆和栈大小:通过-Xmx、-Xms和-Xss参数调整堆和栈的大小,以满足应用程序的需求。

16、详细介绍一下 CMS 垃圾回收器?

		CMS采用了并发标记-清除算法。

回收流程:

  1. 初始标记:标记所有对象。这个阶段是暂停应用程序的阶段。
  2. 并发标记阶段:应用程序继续运行,垃圾收集器与应用程序并发执行。垃圾收集器通过遍历堆中的对象,
    标记出所有可达对象。
  3. 重新标记阶段:并发标记结束,在此暂停应用程序重新标记,标记在并发阶段发生变化的对象。
  4. 并发清除阶段:重新标记之后,垃圾收集器并发运行,进行清除操作。释放未被引用的对象占用的内存空间。

17、简述分代垃圾回收器是怎么工作的?

    分代垃圾回收器通过根据对象的生命周期将堆内存划分为不同的代,
    并根据每个代的特性采取不同的垃圾回收策略,以提高垃圾回收的效率和性能。
Carla运行显示The following component(s) are required to run this program:DirectX Runtime |nvapi64.dll没有被 Carla运行显示The following component(s) are required to run this p 参考: 【1】EPIC 启动游戏提示The following component(s) are required to run this program:... - 『悬赏问答区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cnhttps://www.52pojie.cn/thread-1485651-1-1.html ... 阅读详情

相关推荐

01. VBA从入门到精通——录制宏、窗口、快捷键

excel表功能区右击→常用→选择显示开发工具选项→确定Visual Basic:打开VBA窗口宏:查看要录制的宏录制宏:准备录制宏使用相对引用:录制宏的时候对单元格的引用做一个设置宏安全性:对宏的使用做安全设置,一般设置为禁用所有宏,并发出通知,此时打开带有宏代码的工作薄时会出现警告标记,如果宏可信就选择启动。

weixin_43812198的博客 1696

JVM 学习笔记

JVM 学习笔记JVM 学习笔记

cooldatabase 122

工业模型导入Unity实战:从ProE/SolidWorks到实时渲染的完整流程

在工业仿真、数字孪生和VR/AR应用开发中,将高精度工程模型导入实时渲染引擎是一个常见的技术挑战。其核心原理在于参数化工程软件与实时渲染引擎的数据结构差异:前者基于精确的B-rep边界表示和特征树,后者依赖轻量化的三角网格与材质贴图。这一转换的技术价值在于实现工程数据的可视化与交互化,为产品展示、虚拟培训和工厂仿真等应用场景提供基础。通过数据翻译与优化流程,特别是利用3ds Max或Blender作为中转站进行网格优化与UV展开,能够有效解决模型破面、材质丢失和性能问题。本文聚焦于ProE(Creo)和So

weixin_33050117的博客 344

jvm学习笔记

附件中是最近jvm的学习笔记分享给大家,如有不足之处请指出

翻过这座山,就到菩提洞了 128

uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available. MDK5.37安装ARM_Compiler_5

MDK5.37安装ARM_Compiler_5 最后一个AC5编译器,从MDK5.37开始,不再默认安装,需要独立安装 ARMCompiler_506_Windows_x86_b960.zip (80.94MB) 否则使用AC5编译代码报错如下: Build started: Project: Project *** Target 'STM3210C_EVAL' uses ARM-Compiler 'Default Compiler Version 5' which is not available. *

mowwwcom的专栏 2万+

Vanna 2.0:基于LLM的智能文本到SQL框架,实现企业级数据查询与权限控制

文本到SQL技术是自然语言处理与数据库交互的重要桥梁,它允许用户使用日常语言直接查询数据库,无需编写复杂的SQL语句。其核心原理是利用大语言模型理解用户意图,并结合检索增强生成技术,将自然语言问题转换为准确的结构化查询语言。这项技术的价值在于大幅降低了数据访问门槛,提升了业务人员的数据自助分析能力,并能在金融分析、销售报表、运营监控等场景中实现实时数据洞察。Vanna 2.0作为一个开源框架,通过引入用户感知的智能体架构和行级安全策略,解决了企业级应用中的多租户数据隔离与权限控制等关键问题,使得自然语言数据

weixin_42629522的博客 546

JVM学习笔记之CodeCache

JVM学习笔记之CodeCache - Java老K - 博客园

weixin_35843253的博客 205

Halcon学习之一维测量(3)

带定位器的测量。首先看一下“定位”是什么意思?回答:比如我们测量一个芯片,这时候我们设置一个测量矩形,来沿着测量目标进行测量。但是下一张当芯片的位置发生变化时,测量矩形的位置就不对了,就不是沿着测量目标了。这样就不对了!芯片在转,测量矩形也要跟着一起转才行。这个时候就需要“定位”来起作用了!定位之后得到这个芯片的旋转角度之后,测量矩形可以跟着这个角度转。这就是“定位”+“测量”,这是我们工业视觉常用的一个手法,在Halcon里面也是有例子展现的。

deep_love1314的博客 788

JVM最佳学习笔记---总览

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33724659的博客 160

MGC3130 3D手势识别传感器原理图设计,已量产(交互传感器)

最近在落地一款互动艺术装置的控制模块,选了 Microchip 的 MGC3130 做核心 —— 这颗芯片算是 GestIC® 近场传感技术的 “熟面孔” 了,把 3D 手势识别、运动跟踪的信号处理都集成在一颗芯片里,0-10cm 的检测距离刚好适配桌面级互动场景,挥挥手就能控设备的体验,放在艺术装置里确实很出效果。今天扒一下实际跑通的原理图,聊聊每个模块的设计思路。

不脱发的程序猿 371

WblockCloneObjects克隆一个图纸内的实体包括块参照,同名块参照的处理

public static void HeBingTu2(double lieJu, List<string> filePaths) { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; using (DocumentLock docLock = doc.Lock...

1108

【JVM】学习笔记

Java虚拟机(JVM)是一个抽象的计算机,用于运行Java程序,通过将字节码转换为机器码实现跨平台性。JVM架构包括类加载子系统、运行时数据区(如方法区、堆、栈等)和垃圾回收机制(GC),后者负责自动回收不再使用的对象。JVM的执行过程涉及字节码的加载、解释执行和即时编译(JIT),以提高性能。性能调优可通过调整堆内存、垃圾回收器和JVM参数实现。JVM还支持多线程和内存模型,确保线程安全。常见问题包括内存泄漏、OOM和性能瓶颈。直接内存是JVM外的高性能内存区域,常用于NIO操作,需手动管理。JVM与其

了凡 1053

工业相机通用SDK封装实战:C#硬件抽象层(HAL)实现多品牌无缝切换

本文介绍了一种解决工业相机SDK碎片化问题的通用解决方案。作者基于多年工业视觉项目经验,提出通过硬件抽象层(HAL)和适配器模式封装不同品牌相机的SDK差异,实现统一的相机操作接口。文章详细分析了传统直接对接SDK方式的四大痛点:接口碎片化、维护成本高、业务耦合度高和稳定性差,并给出了分层架构设计方案。该方案采用三层架构(业务层、抽象层、实现层),遵循最小接口原则和高内聚低耦合等设计理念,定义了包括触发模式、像素格式等通用枚举类型,以及图像数据结构等核心抽象。最终实现的HAL层能够支持多种品牌相机,显著降低

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 576

JVM 基础知识学习笔记

JVM 一个运行在计算机上的程序,它的职责是运行 Java 字节码文件。

Gjw_java的博客 1155

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

(转)JVM学习笔记

JVM学习笔记 http://zjkilly.iteye.com/blog/772825

haoppywang的专栏 87

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

JVM学习笔记(1)-JVM总体篇

目录 0 前言 1 Java体系描述 1.1 Java体系构成 1.2 Java平台描述 2 JVM体系描述 2.1 JVM基本概念 2.2 ​​​​​​​JVM运行原理 3 示例 参考 0 前言      最近买了周志明的《深入理解Java虚拟机 JVM高级特性与最佳实践 》,结合网上的相关文章资料,尝试做一套JVM学习笔记,也算整理和巩固。相关引用文章,已罗列在参考篇中,...

wingsing2010的专栏 4700

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

JVM学习笔记 01、初识JVM

文章目录前言一、什么是JVM二、学习jvm的用途三、常见的jvm四、学习路线 前言 本篇博客是跟随黑马程序员JVM完整教程,全网超高评价,全程干货不拖沓的学习JVM的笔记,若文章中出现相关问题,请指出! 所有博客文件目录索引:博客目录索引(持续更新) 一、什么是JVM 定义:Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运行环境) 好处: 一次编写,到处运行:JVM屏蔽了字节码和底层操作系统的差异,对外提供了一致的运行环境。解释的方法执行二进制字节码来达到

每个人都是独一无二的,把握好自己的节奏,跟着自己的心走。 860

JVM学习笔记10 - 类加载器总结

bilibili-深入理解JVM 虚拟机 学习笔记 JVM学习笔记 1 JVM学习笔记 2 JVM学习笔记 3 JVM学习笔记 4 JVM学习笔记 5 JVM学习笔记 6 JVM学习笔记 7 JVM学习笔记 8 JVM学习笔记 9 P32_JVM类加载器阶段性总结与学习方式升级(32) ...

晨猫 280

JVM学习笔记1-JVM结束生命周期的几种情形

执行System.exit()方法 程序正常执行结果 程序在执行过程中遇到了异常或错误而终止 由于OS错误而导致JVM进程终止

lu322313的博客 189

狂神说JVM学习笔记

静态变量、常量:static final类信息(构造方法、接口定义):Class文件,包括类的属性方法注解修饰符运行时的常量池:常量池栈栈的运行原理:通过栈帧对每一个方法进行调用栈里存放方法里局部变量的值(如果是基本数据类型,引用和值都存储在栈里)存放在局部变量表中如果时局部变量表中要存储的是字符串,那就是存储堆里面字符串常量池的地址,如果是存储的值,那就把值从方法区的运行时常量值中取出来,放进去(放的是值而不是地址),只有运行时才会存储,如果不运行局部变量表里就没有东西。

wangmr810的博客 1676

Java学习笔记之JVM篇

Java学习笔记之JVM篇前言问:什么是JVM?问:JRE/JDK/JVM是什么关系?判断对象是否存活的算法问:如何回收对象垃圾收集算法(4种) 前言 这是JVM学习笔记,内容主要来自 周志明编写的《深入理解Java虚拟机 JVM高级特性与最佳实践》(第2版)一书,相当于是此书的读书笔记,还有一些内容引用自公众号内容 问:什么是JVM? 答:JVM是Java Virtual Machine(Jav...

qq_34882796的博客 872

JVM学习笔记1

主要有五个阶段:(下面会重点讲解前三个阶段)

kwert666的博客 1648

JVM学习笔记7

P19_自定义类加载器在复杂类加载情况下的运行分析(19) 略 P20_类加载器命名空间实战剖析与透彻理解(20) 子加载器可以委托父加载器去加载某个类,但父加载器却不能委托子加载器去加载类; 当加载器在加载的类里有引用别的类需要加载时,如果此被引用的类是需要子类加载器则就会报错; 命名空间 每个类加载器都有自己的命名空间,命名空间由该类加载器和所有父加载器所加载的类组成(但不包含子类所加载的类...

晨猫 795
上一篇: 多线程-面试题
下一篇: 探索 JDK 9 的 `takeWhile` 方法:流式处理的优雅新选择
wáng bēn
博客等级 码龄7年 97粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wáng bēn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值