虚拟机

关于计算机编程语言——编译型和解释型_2

家住魔仙堡 提交于 2020-03-28 03:02:29
目前,我们都是采用高级语言编程(写汇编和机器语言的大牛们除外),但是计算机只能识别二进制( 机器语言),不能直接理解高级语言 ,所以我们必须把高级语言“ 翻译”成计算机能够理解的机器语言。 说到“ 翻译“, 其实总共有两种方式: 1. 编译: 通过编译系统(不仅仅只是通过编译器,编译器只是编译系统的一部分)把高级语言“ 翻译 ”成机器语言(具体翻译过程可以参看下图), 把源高级程序编译成为机器语言文件,比如windows下的exe文件。 一个完整的编译系统与 一个用C编写的程序hello.c的编译过程 2. 解释:解释型程序在运行的时候才“ 翻译 ”,比如VB语言,在执行的时候,专门有一个解释器将VB语言“ 翻译 ”成机器语言, 每条语句都是执行的时候才翻译。 编译型与解释型,两者各有利弊: 1、 编译型语言:一次编译完成后,可以直接运行, 程序执行效率高 ; 解释型语言:执行时才“翻译”成机器语言,解析一行,“ 翻译 ”一行,执行一行,程序执行效率相对较低; 但是不能一概而论, 部分解释型语言的解释器通过在运行时动态优化代码,甚至能够使解释型语言的性能超过编译型语言。 2、由于 编译型程序 执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它, 像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言;

JVM史上最最最完整深入解析(12000字噢)

空扰寡人 提交于 2020-03-27 18:12:07
3 月,跳不动了?>>> 点点这个链接免费获取: 【推荐】2020年最新Java电子书集合.pdf(吐血整理) >>> 工作之余,总结一下JVM相关知识。 Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图: 1、程序计数器:指向当前线程正在执行的字节码指令。线程私有的。 2、虚拟机栈:虚拟机栈是Java执行方法的内存模型。每个方法被执行的时候,都会创建一个栈帧,把栈帧压人栈,当方法正常返回或者抛出未捕获的异常时,栈帧就会出栈。(1)栈帧:栈帧存储方法的相关信息,包含局部变量数表、返回值、操作数栈、动态链接a、局部变量表:包含了方法执行过程中的所有变量。局部变量数组所需要的空间在编译期间完成分配,在方法运行期间不会改变局部变量数组的大小。b、返回值:如果有返回值的话,压入调用者栈帧中的操作数栈中,并且把PC的值指向 方法调用指令 后面的一条指令地址。c、操作数栈:操作变量的内存模型。操作数栈的最大深度在编译的时候已经确定(写入方法区code属性的max_stacks项中)。操作数栈的的元素可以是任意Java类型,包括long和double

KVM之KVM安装部署

让人想犯罪 __ 提交于 2020-03-27 16:34:43
一. 准备工作: 系统环境: centos 7.7 关闭selinux: [root@localhost ~]# setenforce 0 * [root@localhost ~]# sed -ri 's/^(SELINUX=). /\1disabled/g' /etc/selinux/config [root@localhost ~]# getenforce ** Disabled 2.关闭防火墙: [root@localhost ~]# systemctl status firewalld firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: inactive (dead) since Tue 2020-03-03 15:04:25 CST; 3 weeks 1 days ago Docs: man:firewalld(1) Process: 907 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0

Java面试之JVM

♀尐吖头ヾ 提交于 2020-03-27 15:27:43
194. 说一下 JVM 的主要组成部分?及其作用? 类加载器(ClassLoader) 运行时数据区(Runtime Data Area) 执行引擎(Execution Engine) 本地库接口(Native Interface) 组件的作用: 首先通过类加载器(ClassLoader)会把 Java 代码转换成字节码,运行时数据区(Runtime Data Area)再把字节码加载到内存中,而字节码文件只是 JVM 的一套指令集规范,并不能直接交给底层操作系统去执行,因此需要特定的命令解析器执行引擎(Execution Engine),将字节码翻译成底层系统指令,再交由 CPU 去执行,而这个过程中需要调用其他语言的本地库接口(Native Interface)来实现整个程序的功能。 195. 说一下 JVM 运行时数据区? 不同虚拟机的运行时数据区可能略微有所不同,但都会遵从 Java 虚拟机规范, Java 虚拟机规范规定的区域分为以下 5 个部分: 程序计数器(Program Counter Register):当前线程所执行的字节码的行号指示器,字节码解析器的工作是通过改变这个计数器的值,来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能,都需要依赖这个计数器来完成; Java 虚拟机栈(Java Virtual Machine

使用Log Analytics监视Azure VM的创建和删除

佐手、 提交于 2020-03-27 11:33:41
随着企业对云资源使用的越来越广泛,很多企业的关注点已经不单单满足于简单的使用云,而是更关注如何把运用的更好。对于如何把云用的更好,其实我们有很多个方面可以考量,比如系统的监控,比如成本的管控等等。因此对云资源使用的合理性,成为企业越来越关注的一个重点。那么接下来我们就一起来看一下如何使用Log Analytics监视Azure VM的创建和删除,从而帮助资源的使用者来了解云上最近新增/减少了什么资源。 前面我们提过Log Analytics允许从许多Azure资源中收集诊断数据。Log Analytics可以收集的资源之一是Azure活动日志。活动日志中包括有关虚拟机创建,更新和删除的信息。下面我们就一起来看一下如何实现这一点。 将Azure活动日志连接到Log Analytics工作区 若要允许Log Analytics Workspace从Azure活动日志捕获数据,需要进入Log Analytics工作区,转到“工作区数据源”,然后单击“ Azure活动日志”。 点击“Azure活动日志”,可以确定要收集活动日志数据的Azure订阅是否已连接到Log Analytics Workspace。 点击“订阅”,将弹出以下对话框。然后点击“连接” 点击连接后,我们会看到,指定订阅的Azure活动日志现在已经收集到Log Analytics工作区。 查看收集到的数据 要查看Log

Centos7配置IP地址和DNS

半城伤御伤魂 提交于 2020-03-27 09:36:38
目录 一、查看IP地址 1、ifconfig命令 2、ip addr命令 二、配置网卡 1、动态IP地址 2、静态IP地址 3、重启网卡 三、注意事项 四、本地虚拟机设置静态IP后不能上网的解决方法 1、以系统管理员打开VMWare 2、选择虚拟网络编辑器菜单 3、选择VMnet8这一行 4、还原VMnet8的默认设置 5、修改VMnet8的参数 6、NAT设置 7、保存设置 8、确认虚拟机为NAT模式 9、启动虚拟机CentOS7 10、设置CentOS7的不静态IP地址 11、重启CentOS7的网络服务 12、测试效果 13、注意事项 五、版权声明 一、查看IP地址 1、ifconfig命令 ifconfig是Linux查看和配置网卡的命令, 上图中,我们重点关注五方面信息: 1)网卡名:即网卡设备名,lo是本机(全称loopback,是回环地址,经常被分配到127.0.0.1地址上,用于本机通信,经过内核处理后直接返回,不会在任何网络中出现);eth0是真实的网卡,如果服务器有多个网卡,网卡命名将是eth0、eth1、eth2、……。注意:真实网卡的名称不一定是eth打头,还可以是no(由主板bios内置的网卡)、ens(代表有主板bios内置的PCI-E网卡)、enp2s(PCI-E独立网卡)等,后面的编号也不一定从0开始。 2)IP地址:inet后的内容是IP地址

JVM笔记(一) Java内存区域

蓝咒 提交于 2020-03-27 08:38:33
Java 内存区域 总概 java虚拟机在执行java程序的过程中,会把它管理的内存划分为几个不同的数据区域。每当运行一个java程序时,就会启动一个虚拟机。 具体的区域如图所示: 同时,方法区 与 堆 是由所有线程共享的数据区;而 虚拟机栈、本地方法栈、程序计数器 则是被线程隔离的区域。 一、程序计数器 什么是程序计数器? 概念 :就是当前线程所执行的字节码的行号指示器。 JVM的概念模型中,字节码解释器通过改变这个计数器的值来选取下一条字节码指令。 JVM的多线程其实就是通过线程轮流切换并分配处理器执行时间的方式来实现的( 在任何一个确定的时刻内,一个处理器都只会执行一条线程中的指令 )。为了线程切换后能够恢复到正确的执行位置,每条线程都需要有 独立的程序计数器 ,各线程计数器互不影响,独立存储。 所以,程序计数器是 线程私有 的内存区域 如果线程执行一个Java方法,计数器记录的是正在执行的虚拟机字节码指令的地址;如果执行的是Native方法,则计数器的值为空。 Java虚拟机规范中唯一一个 没有规定任何OutOfMemoryError情况 的区域。 二、Java虚拟机栈 线程私有,生命周期与线程相同。 虚拟机描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个 栈帧(Stack Frame) 用于存储局部变量表、操作数栈、动态链接、方法出口等信息。(PS

Java内存模型

廉价感情. 提交于 2020-03-27 08:38:11
Java虚拟机规范中将Java运行时数据分为六种。 1.程序计数器:是一个数据结构,用于保存当前正常执行的程序的内存地址。Java虚拟机的多线程就是通过线程轮流切换并分配处理器时间来实现的,为了线程切换后能恢复到正确的位置,每条线程都需要一个独立的程序计数器,互不影响,该区域为“线程私有”。 2.Java虚拟机栈:线程私有的,与线程生命周期相同,用于存储局部变量表,操作栈,方法返回值。局部变量表放着基本数据类型,还有对象的引用。 3.本地方法栈:跟虚拟机栈很像,不过它是为虚拟机使用到的Native方法服务。 4.Java堆:所有线程共享的一块内存区域,对象实例几乎都在这分配内存。 5.方法区:各个线程共享的区域,储存虚拟机加载的类信息,常量,静态变量,编译后的代码。 6.运行时常量池:代表运行时每个class文件中的常量表。包括几种常量:编译时的数字常量、方法或者域的引用。 友情链接: Java中JVM虚拟机详解 来源: https://www.cnblogs.com/lxmyhappy/p/6761756.html

JVM内存

巧了我就是萌 提交于 2020-03-27 08:34:27
Java内存模型: Java虚拟机规范中将Java运行时数据分为六种。 1.程序计数器:是一个数据结构,用于保存当前正常执行的程序的内存地址。Java虚拟机的多线程就是通过线程轮流切换并分配处理器时间来实现的,为了线程切换后能恢复到正确的位置,每条线程都需要一个独立的程序计数器,互不影响,该区域为“线程私有”。 2.Java虚拟机栈:线程私有的,与线程生命周期相同,用于存储局部变量表,操作栈,方法返回值。局部变量表放着基本数据类型,还有对象的引用。 3.本地方法栈:跟虚拟机栈很像,不过它是为虚拟机使用到的Native方法服务。 4.Java堆:所有线程共享的一块内存区域,对象实例几乎都在这分配内存。 5.方法区:各个线程共享的区域,储存虚拟机加载的类信息,常量,静态变量,编译后的代码。 6.运行时常量池:代表运行时每个class文件中的常量表。包括几种常量:编译时的数字常量、方法或者域的引用。 来源: https://www.cnblogs.com/ng-xixi/p/9942099.html

JAVA学习之ClassLoader

筅森魡賤 提交于 2020-03-27 02:38:09
JAVA学习之ClassLoader 前言 最近被 一句话所触动—— 种一棵树最好的时间是十年前,其次是现在。 所以决定要开始记录自己的学习之路。 什么是类加载? 我们都知道,每个.java文件可以经过javac指令编译成.class文件,里面包含着java虚拟机的机器指令。当我们需要使用一个java类时,虚拟机会加载它的.class文件,创建对应的java对象。将.class调入虚拟机的过程,称之为加载。 loading :加载。通过类的完全限定名找到.class字节码文件,同时创建一个对象。 verification:验证。确保class字节码文件符合当前虚拟机的要求。 preparation:准备。这时候将static修饰的变量进行内存分配,同时设置初始值。 resolution:解析。虚拟机将常量池中的符号引用变为直接引用。 符号引用:在编译之后完成的,一个常量并没有进行内存分配,也就只能用符号引用。 直接引用:常量会在preparation阶段将常量进行内存分配,于是就可以建立直接的虚拟机内存联系,就可以直接引用。 initialization:初始化。类加载的最后阶段。如果这个类有超类,进行超类的初始化,执行类的静态代码块,同时给类的静态变量赋予初值。前面的preparation阶段是分配内存,都只是默认的值,并没有被赋予初值。 类加载在java中有两种方式 显示加载