虚拟机

Java回顾--jvm简单描述

霸气de小男生 提交于 2020-02-09 04:13:14
1、关于JVM的简单叙述:    JVM是Java Virtual Machine(Java 虚拟机 )的缩写。    主要分为五大模块:类装载器子系统、运行时数据区、执行引擎、本地方法接口和垃圾收集模块。   其中运行时数据区,即jvm运行时将数据分区域存储,也称Java内存区域,包括:   1、虚拟机栈:     线程私有,与线程生命周期相同。不连续的内存空间。     它描述的是Java方法执行的内存模型:方法创建时会创建一个栈帧,用于存储局部变量表,操作栈,动态链接,方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。      局部变量表 :是一组变量存储空间,用于存放方法参数和方法内部的局部变量,即八大基础数据类型和引用类型(指向对象地址的引用指针)。      操作栈: 其结构同局部变量表,也是一个以字节长度为单位的数组。不同的是,局部变量表通过索引进行访问,而操作栈则是通过 压栈--出栈 完成的。其中存储数据的方式也和局部变量表一样,如int、long、float、double、reference和returnType的存储。对于byte、short以及char类型的值在压入到操作数栈之前,也会被转换为int。虚拟机把操作数栈作为它的工作区——大多数指令都要从这里弹出数据,执行运算,然后把结果压回操作数栈。     

jvm 内存模型

荒凉一梦 提交于 2020-02-09 04:12:53
cpu和计算机内存的交互 在计算机中,cpu和内存的交互最为频繁,相比内存,磁盘读写太慢,内存相当于高速的缓冲区 但是随着cpu的发展,内存的读写速度也远远赶不上cpu。因此cpu厂商在每颗cpu上加上高速缓存,用于缓解这种情况。现在cpu和内存的交互大致如下。 cpu上加入了高速缓存这样做解决了处理器和内存的矛盾(一快一慢),但是引来的新的问题是缓存一致性 缓存一致性 在多核cpu中,每个处理器都有各自的高速缓存(L1,L2,L3),而主内存确只有一个 。 CPU要读取一个数据时,首先从一级缓存中查找,如果没有找到再从二级缓存中查找,如果还是没有就从三级缓存或内存中查找,每个cpu有且只有一套自己的缓存。 如何保证多个处理器运算涉及到同一个内存区域时,多线程场景下会存在缓存一致性问题,那么运行时保证数据一致性? 为了解决这个问题,各个处理器需遵循一些协议保证一致性。【如MSI,MESI啥啥的协议。。】 在CPU层面,内存屏障提供了个充分必要条件 内存屏障(Memory Barrier) 什么时内存屏障 CPU中,每个CPU又有多级缓存【上图统一定义为高速缓存】,一般分为L1,L2,L3,因为这些缓存的出现,提高了数据访问性能,避免每次都向内存索取,但是弊端也很明显,不能实时的和内存发生信息交换,分 在不同CPU执行的不同线程对同一个变量的缓存值不同。 硬件层的内存屏障分为两种:

CentOS开机黑屏卡死问题

白昼怎懂夜的黑 提交于 2020-02-09 03:23:43
转载自 https://www.cnblogs.com/wyh-study/p/12015833.html 导致的错误 1、直接就是黑屏,连杠杠都没有 2、centos系统关不掉 3、关闭vmware提示:虚拟机XXX繁忙 解决方式 一(我的失败,依旧不行) 1、强制关闭vmware,重启计算机(不重启虚拟机重新开提示占用,网上删.lck方式试过没用) 2、编辑虚拟机设置 3、内存改为2GB 处理器如下图所示 勾选虚拟化引擎前两个 再次启动,可能修改后第一次启动会有点慢,等一会不出来关闭重新启动即可。就可以打开了。 解决方式 二 1.以管理员身份运行cmd控制台程序 2.在cmd窗口中输入netsh winsock reset命令,作用是重置winsock网络规范 3.重启系统,再打开VMware就可以正常启动系统了 方式三 (我是用这个方式可以的) 如果这些方法解决不了,那就试一试把禁用虚拟打印打开,我的就是打开了这个虚拟打印,就没问题了 VMware 虚拟机 提示在该系统上全局禁用了 虚拟机 打印功能怎么办?在开启虚拟系统是每次都提示:在该系统上全局禁用了 虚拟机 打印功能,不会为该虚拟机启用此功能。如果主机上安装有打印机,这实在是个损失!因为会造成虚拟机无法打印。该问题是因为虚拟机首选项设置中,没有启用 虚拟打印机 功能造成的,我们只需要设置开启即可,下面是具体操作方法。

java学习笔记(一)java基础

╄→гoц情女王★ 提交于 2020-02-09 03:12:24
java学习笔记(一)java基础 文章目录 java学习笔记(一)java基础 Java技术既是编程语言又是平台。 java编程语言 java平台 第一个java程序 java代码如下 java的注释 main方法 问题和练习 Java技术既是编程语言又是平台。 java编程语言 一个类文件(.class)不包含的代码是原产于你的处理器; 相反,它包含*字节码 -Java虚拟机(Java VM)的机器语言。然后,java启动器工具将使用Java虚 拟机的实例运行您的应用程序。 java 虚拟机的优点: 因为Java VM在许多不同的操作系统上都可用,所以相同 的.class文件能够在不同的操作系统上运行。一些虚拟机(例如 [Java SE HotSpot概览)在运行时执行其他步骤,以提高应用程序 的性能。这包括各种任务,例如查找性能瓶颈和重新编译(使用本 机代码)经常使用的代码部分。 java平台 一个平台是在程序运行的硬件或软件环境。我们已经提到了一些最受欢 迎的平台,例如Microsoft Windows,Linux,Solaris OS和Mac OS。 可以将大多数平台描述为操作系统和基础硬件的组合。Java平台与大多 数其他平台的不同之处在于,它是一个基于软件的平台,可以在其他 基于硬件的平台上运行。 java平台有两个组件 在Java虚拟机 Java应用程序编程接口

VSAN配置手册

天涯浪子 提交于 2020-02-09 02:20:55
VSAN配置手册 1. 配置前的基本准备工作 1.1. 手动将磁盘标记为 SSD 磁盘 在某些情况下,当在RAID配置中将一个SSD配置为RAID-0模式后,vSphere只将这个磁盘当作一个普通的HDD盘,而不能将它正确地识别为SSD盘。出现这种情况的时候,就需要通过命令行方式手动将这个磁盘标记为“SSD”盘。 首先,登录到vSphere的控制台,在菜单中选择‘TroubleShooting Options’: 然后,敲回车键,分别启用“Shell”和“SSH”. 这个时候,就可以通过SSH连接到这台ESXi主机。 # ssh root@10.110.x.x 成功登录以后,运行以下命令。 # esxcli storage core device list 以上这个命令将会列出这台ESXi主机上的所有磁盘列表,将SSD盘找出来,并且将这个SSD盘的ID复制下来,后面会用到。(一般来说,SSD盘的容量比普通硬盘小很多,所以可以根据容量轻易地将SSD盘找出来。) 然后,运行以下命令,将命令中的ID(红色部分)替换成刚刚复制下来的ID。 # esxcli storage nmp satp rule add -s VMW_SATP_LOCAL -d naa.6b8ca3a0e81e03001a4e539c08862b30 -o enable_ssd # esxcli storage

IP技术 -- 11 VXLAN之二

蓝咒 提交于 2020-02-09 01:42:40
在数据中心大二层网络技术中有提到,Overlay技术是目前大二层网络最热点的技术,可适用于目前整个数据中心,甚至跨数据中心的大二层组网。 随着数据中心租户规模的越来越大,虚拟机的数量也大幅增加,此时传统二层网路的隔离技术VLAN因其Tag域只有12bit,仅能划分出4096个虚拟二层网络,已经无法满足大二层网络中标识大量用户集的需求,同时,为了使数据中心的资源得到灵活的调配,需要支持虚拟机跨分区,甚至跨数据中心的灵活迁移,这时基于VLAN的传统二层网络很难做到 虚拟机在迁移前后的IP和MAC地址不能改变 。 为了帮助数据中心完成上述挑战,VXLAN(Virtual eXtensible Local Area Network)技术应用而生,是一种在三层网络上构造虚拟化二层网络的技术。 首先,VXLAN引入了类似VLAN ID的用户标识,称为VXLAN Network Identifier(VNI),它由24bit组成,可以构划分出1600万个相互隔离的虚拟二层网络,可以支持大二层网络的用户隔离 其次,VXLAN使用MAC in UDP的封装方式,将虚拟机发出的原始以太报文,完整的封装在VXLAN信息中,在现有承载网络中进行透明传输,到了目的地,通过解封装VXLAN信息,将原始二层报文发给目标虚拟机,从而实现了虚拟机之间的相互通信,这样,虚拟机彻底摆脱了二三层网络的范围限制,可以跨设备

netns命名空间使用

旧时模样 提交于 2020-02-09 01:24:18
在linux系统中通过netns创建虚拟主机,作用同VM,相比于VM其优势是随时创建,随时删除,操作方便 增加虚拟网络命名空间vm,vm是命名空间的名字,可以随意起,就创建了一台虚拟ns ip netns add vm 显示物理机里的命名空间,加不加list都行,显示刚创建的vm ip netns (list) 进入netns,也可以不进入但执行每一个ip link都需要在前面加上ip netns exec vm ip netns exec vm bash 在物理机和netns上分别创建网卡,这两个网卡是一对,在物理机上的网卡是nc-host,在netns上的网卡是nc-netns ip link add nc-host type veth peer name nc-netns 启动物理机上网卡 ip link set nc-host up 将netns的网卡添加到netns ip link set nc-netns netns vm 启动netns上网卡 ip link set nc-netns up 启动物理机上环回口 ip link set l0 up 给netns的虚拟网卡增加ip地址 ip addr add dev nc-netns 192.168.1.0/16 给netns的虚拟网卡增加mac地址 ip link set nc-netns add fe:80:fe:00

The Best Peak Shape

泄露秘密 提交于 2020-02-09 00:02:28
In many research areas, one important target of analyzing data is to find the best "peak shape" out of a huge amount of raw data full of noises. A "peak shape" of length L is an ordered sequence of L numbers { D ​ 1 ​​, ⋯, D ​ L ​​ } satisfying that there exists an index i ( 1) such that D ​ 1 ​​ < ⋯ < D ​ i − 1 ​​ < D ​ i ​​ > D ​ i + 1 ​​ > ⋯ > D ​ L ​​. Now given N input numbers ordered by their indices, you may remove some of them to keep the rest of the numbers in a peak shape. The best peak shape is the longest sub-sequence that forms a peak shape. If there is a tie, then the most

Java运行时数据区域

落爺英雄遲暮 提交于 2020-02-09 00:00:07
   Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自不同的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范(Java SE 7版)》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域: 1. 程序计数器   程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。   由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。   如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的事Native方法

java运行机制详细

人盡茶涼 提交于 2020-02-08 23:16:40
JVM( Java 虚拟机)一种用于计算设备的规范,可用不同的方式(软件或硬件)加以实现。编译虚拟机的指令集与编译微处理器的指令集非常类似。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 Java虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。 1.为什么要使用Java虚拟机 Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编 译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台 相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字 节码时,把字节码解释成具体平台上的机器指令执行。 Java运行机制 Java程序的运行必须经过 编写 、 编译 、 运行 三个步骤。 编写是指在Java开发环境中进行程序代码的输入,最终形成后缀名为.java的Java源文件。 编译是指使用Java编译器对源文件进行错误排查的过程,编译后将生成后缀名为.class的字节码文件,这不像