虚拟机

ClassLoader&双亲委派

此生再无相见时 提交于 2020-03-17 12:10:22
文章目录 1.class sycle 2 不同类加载器说明 3.ClassLoader加载类过程(双亲委派) 4.ClassLoader加载类过程(双亲委派流程图) 5.为什么需要双亲委派机制? 6.能不能自己写个类叫java.lang.System? 7.如何自定义类加载器 8.如何打破双亲委派? 9.例子 1.class sycle 类加载的生命周期:加载(Loading)–>验证(Verification)–>准备(Preparation)–>解析(Resolution)–>初始化(Initialization)–>使用(Using)–>卸载(Unloading) 关注点1: loading 将class 二进制文件加载到内存中 通过一个类的全限定名来获取定义此类的二进制字节流。 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 在java堆中生成一个代表这个类的java.lang.Class对象,做为方法区这些数据的访问入口。 加载阶段完成之后二进制字节流就按照虚拟机所需的格式存储在方区去中。 关注点2: verifaction 这一阶段的目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求 文件格式验证:验证字节流是否符合Class文件格式的规范,并且能被当前版本的虚拟机处理 元数据验证:对字节码描述的信息进行语义分析

如何使用Azure VM串行控制台

北战南征 提交于 2020-03-17 11:52:27
Azure VM现在可以通过Azure门户访问串行控制台。它不依赖于虚拟机的网络或操作系统状态。这是理想的恢复机器/数据,修改系统配置和故障排除。Azure串行控制台访问只能通过Azure门户访问。它使用虚拟机的COM1端口。这适用于Windows和Linux虚拟机。在我的演示中,我将展示如何通过串口控制台访问windows VM。 先决条件 仅适用于ARM模式创建的资源,不适用于经典部署模型 最少具有虚拟机的 Container 角色 VM的账户密码 先决条件都准备好以后,我们就可以开始配置了。在我们接下来的演示中,我将使用Windows Server 2016数据中心版的VM 登陆到Azure Portal,点击 虚拟机 选项卡,然后点击所选的VM: 然后我们在“Support+Troubleshooting”下点击“boot diagnostics”: 在新窗口中,点击设置,确保“boot diagnostics”是被打开的: 然后返回“Support+Troubleshooting”,点击“Serial console(串行控制台)”: 然后会启动SAC控制台: 注意:如果我们的VM是在2018年2月份之前创建的,则需要手动启动SAC控制台,要做到这一点,需要如下操作: RDP登陆到VM并以管理员身份登陆 以管理员身份打开命令提示符 键入 bcdedit / ems

Ubuntu19.10的虚拟机安装

廉价感情. 提交于 2020-03-17 10:06:58
https://ubuntu.com/download/desktop/thank-you?version=19.10&architecture=amd64#download-content 直接官网下载的链接,这个是desktop。 虚拟机用的vm15 点击自定义硬件,在新CD/DVD处配置ISO映像文件。这里我把内存设置为4g,处理器设置为2个,每个处理器2个内核,来提高一下运行速度,不然会太卡。有条件可以拉满,没有条件的差不多就可以了。另外我顺手把打印机移除了,因为用不上。 之后关闭-完成-开启此虚拟机。 开启后选择简体中文,然后安装Ubuntu。 继续。 继续,这里可能要等一段时间。 现在安装-继续。 点击地图选择时区。 输入姓名和密码,这里由于是学习的性质为了方便直接自动登录就好了,密码也是随便搞。 到了这里,看到正在下载就按Skip吧,因为没有配置国内源,下载会很慢甚至会下载不到还要卡很长时间。 重启。 这里要按一下回车键。 至此,Ubuntu19.10就基本安装好了。 来源: CSDN 作者: Kwan1224 链接: https://blog.csdn.net/weixin_42220120/article/details/104908733

java简介

纵饮孤独 提交于 2020-03-17 08:34:40
1.1 java平台简介 java se :java标准版,主要用于桌面机应用和数据库的开发。 java ee :java企业版,提供企业级开发的各种技术,主要用于企业级开发,现在用的最多的就是这个。 java me :java micro edition,这个版本主要用于嵌入式和移动式的开发,最常用的就是手机应用软件的开发。 jdk:java development kit. jdk目录及说明: (1)bin:jdk的基本程序都在这里,如javac,java,javadoc; (2)demo:java的一些例子程序; (3)jre:java的运行环境; (4)lib:java的类库; (5)src:java类库的源代码; 1.3 程序开发过程 (1)创建一个源文件。java源文件就是java代码,以Java语言编写。Java源文件是纯文本文件,扩展名为“.java”。可以用任何文本编辑器来创建和编辑源文件。 (2)将源文件编译为一个.class文件。使用jdk所带的编译工具javac.exe,它会读取源文件并将其文本文件编译为Java虚拟机能理解的指令,保存后缀以.class结尾的文件中。包含在class文件中的指令就是众所周知的字节码(bytecodes),它是与平台无关的二进制文件,执行时由解释器java.exe解释成本地机器码,边解释边执行。 (3)运行程序

CPU 虚拟化

隐身守侯 提交于 2020-03-17 06:43:09
本文首发于我的公众号 Linux云计算网络(id: cloud_dev) ,专注于干货分享,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,欢迎大家关注,二维码文末可以扫。 前面 虚拟化技术总览 中从虚拟平台 VMM 的角度,将虚拟化分为 Hypervisor 模型和宿主模型,如果根据虚拟的对象(资源类型)来划分,虚拟化又可以分为计算虚拟化、存储虚拟化和网络虚拟化,再细一些,又有中断虚拟化,内存虚拟化,字符/块设备虚拟化,网络功能虚拟化等。 我会将此作为一个系列来写,本文先看 CPU 虚拟化。在这之前,我们先来笼统看下虚拟化的本质是什么,它到底是如何做到将 Host 的硬件资源虚拟化给 Guest 用,我这里用两个词来定义, intercept 和 virtualize ,中文翻译成 截获 和 模拟 比较恰当一点,这两个词基本上是虚拟化的终极定义了,带着这两个词去看每一种虚拟化类型,会发现很容易理解和记忆。 CPU 软件虚拟化 基于软件的 CPU 虚拟化,故名思议,就是通过软件的形式来模拟每一条指令。通过前面的文章我们知道常用的软件虚拟化技术有两种:优先级压缩和二进制代码翻译。这两种是通用技术,可以用在所有虚拟化类型中。我们就结合 intercept 和 virtualize 来看看 CPU 软件虚拟化是怎么做的。 首先,一些必须的硬件知识要知道,X86

[Mark] KVM 虚拟化基本原理

混江龙づ霸主 提交于 2020-03-17 06:06:53
X86 操作系统是设计在直接运行在裸硬件设备上的,因此它们自动认为它们完全占有计算机硬件。x86 架构提供四个特权级别给操作系统和应用程序来访问硬件。 Ring 是指 CPU 的运行级别,Ring 0是最高级别,Ring1次之,Ring2更次之…… 就 Linux+x86 来说, 操作系统(内核)需要直接访问硬件和内存,因此它的代码需要运行在最高运行级别 Ring0上,这样它可以使用特权指令,控制中断、修改页表、访问设备等等。 应用程序的代码运行在最低运行级别上ring3上,不能做受控操作。如果要做,比如要访问磁盘,写文件,那就要通过执行系统调用(函数),执行系统调用的时候,CPU的运行级别会发生从ring3到ring0的切换,并跳转到系统调用对应的内核代码位置执行,这样内核就为你完成了设备访问,完成之后再从ring0返回ring3。这个过程也称作用户态和内核态的切换。 那么,虚拟化在这里就遇到了一个难题,因为宿主操作系统是工作在 ring0 的,客户操作系统就不能也在 ring0 了,但是它不知道这一点,以前执行什么指令,现在还是执行什么指令,但是没有执行权限是会出错的。所以这时候虚拟机管理程序(VMM)需要避免这件事情发生。 虚机怎么通过 VMM 实现 Guest CPU 对硬件的访问,根据其原理不同有三种实现技术: 1. 全虚拟化 2. 半虚拟化 3. 硬件辅助的虚拟化 1

openstack虚拟机迁移的操作记录

会有一股神秘感。 提交于 2020-03-17 06:04:23
需求说明: 计算节点linux-node1.openstack:192.168.1.8 计算节点linux-node2.openstack:192.168.1.17 这两个计算节点在同一个控制节点下(192.168.1.8既是控制节点,也是其中一个计算节点),现在需要将linux-node1.openstack上的虚拟机kvm-server005迁移到liunx-node2.openstack上。 一、openstack的虚拟机线下迁移( ”冷迁移“ ,迁移前关闭虚拟机) 操作记录如下: linux-node1.openstack上的操作: 1) 查看虚拟机 [root@linux-node1 src]# source admin-openrc.sh [root@linux-node1 src]# nova list +--------------------------------------+----------------------------+--------+------------+-------------+--------------------+ | ID | Name | Status | Task State | Power State | Networks | +--------------------------------------+--------

Centos7部署KVM

痞子三分冷 提交于 2020-03-17 05:44:50
一、准备工作 VMware虚拟机CPU虚拟化引擎设置 检查宿主机CPU是否支持虚拟化 cat /proc/cpuinfo | egrep '(vmx|svm)' | wc -l 结果大于0表示支持 二、安装kvm KVM核心软件包 yum install kvm libvirt python-virtinst qemu-kvm virt-viewer bridge-utils 如果有桌面环境,想使用图形界面管理器virt-manager,可以安装完整的KVM环境: yum groupinstall Virtualization 'Virtualization Client' 'Virtualization Platform' 'Virtualization Tools' 验证内核模块是否加载 systemctl status libvirtd 启动虚拟机管理接口服务 systemctl start libvirtd.service systemctl enable libvirtd.service 启动libvirtd后,会自动创建了一个网卡,并启动dnsmasq服务,用来为虚拟机分配IP地址 ifconfig 三、使用虚拟系统管理器安装虚拟机系统 在桌面环境下:应用程序–系统工具–虚拟系统管理器–文件–新建虚拟机 四、使用命令方式安装虚拟机系统

Java面试系列01:Java基础之JVM

那年仲夏 提交于 2020-03-17 05:33:36
参考链接: JVM之内存结构详解 https://www.choupangxia.com/2019/10/18/jvm%E4%B9%8B%E5%86%85%E5%AD%98%E7%BB%93%E6%9E%84%E8%AF%A6%E8%A7%A3/ 绪论 1.什么是Java虚拟机? Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 2.为什么Java被称作是“平台无关的编程语言”? 一般的高级语言如要在不同的平台上运行,至少需要编译成不同的目标代码。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。而引入JVM后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。 3.jvm最大内存限制多少? 默认是物理内存的1/64,JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。 一、Java 类加载过程? 类加载器就是寻找类或接口字节码文件进行解析并构造JVM内部对象表示的组件。 在java中类装载器把一个类装入JVM,经过以下步骤: 加载

JVM--一文读懂垃圾回收

最后都变了- 提交于 2020-03-16 21:50:00
JVM--一文读懂垃圾回收 与其他语言相比,例如c/c++,我们都知道,java虚拟机对于程序中产生的垃圾,虚拟机是会自动帮我们进行清除管理的,而像c/c++这些语言平台则需要程序员自己手动对内存进行释放。 虽然这种自动帮我们回收垃圾的策略少了一定的灵活性,但却让代码编写者省去了很多工作,同时也提高了很多安全性。(因为像C/C++假如你创建了大量的对象,但却由于自己的疏忽忘了将他们进行释放,可能会造成内存溢出)。 何为垃圾? 刚才说了,虚拟机会自动帮助我们进行垃圾的清除,那什么样的对象我们才可以称为是垃圾对象呢? 假如你创建了一个对象 Man m = new Man(); 你用一个变量指向了这个对象,显然对于这个对象,你可以用变量m对这个对象进行利用,但过了一段时间,你执行了 m = null; 并且也并没有新的变量来指向刚才创建的对象。此时对于这个没有任何变量指向的对象,你觉得它还有用处吗? 显然,对于这种没有被变量指向的对象,它是一点卵用也没有的,它只能在 堆 随风漂流。 因此,对于这样的对象,我们就可以把它称为垃圾了,它早晚会被垃圾回收器给干掉。 怎么知道它已经是垃圾对象了? 假如代码是你自己编写的,你可能知道这个对象啥时候应该被抛弃,你可以随时让它成为垃圾对象。 但是,你毕竟是你,虚拟机则没那么智能。那虚拟机是如何知道的呢? 上面已经说了,没有变量引用这个对象时