虚拟机

JVM 基础(1) -- Java 的内存结构

只谈情不闲聊 提交于 2020-03-16 19:54:31
以黄小斜博文为主的学习总结 文章目录 1. 了解 JVM 内存有什么好处 2. JVM 主要组成部分 3. 运行时数据区的五大组成部分 1. 程序计数器 2. Java 虚拟机栈 3. 本地方法栈 4. Java 堆 5. 方法区 4. 控制各区域大小的参数 1. 了解 JVM 内存有什么好处 所有的 Java 开发人员可能会遇到这样的困惑:我该为堆内存设置多大空间呢?OutOfMemoryError 的异常到底涉及到运行时数据区的哪块区域?该怎么解决呢? 其实如果你经常解决服务器性能问题,那么这些问题就会变的非常常见,了解 JVM 内存可以帮助我们在服务器出现性能问题的时候,快速的了解哪块内存区域出现了问题,以便快速的解决生产故障。 2. JVM 主要组成部分 JVM 主要由 类加载器 、运行时数据区 、执行引擎和本地库接口四部分组成。 JVM 工作的流程大致就是:首先由类加载器将我们的 .class 文件加载进运行时数据区,然后 JVM 会在堆中创建一个对应类的 Class 对象,但由于我们的字节码只是 JVM 的一套指令集规范,并不能直接交给底层的操作系统去执行,所以这里就需要用到特定的字节码解析器执行引擎将我们的字节码解析成底层操作系统可以执行的机器指令,然后交由 CPU 去执行,在执行的过程中可能还需要用到其他语言的本地库接口进而完成整个程序的功能。 3.

Java类载入器

£可爱£侵袭症+ 提交于 2020-03-16 17:59:18
1. 系统载入器简单介绍   Java虚拟机中能够安装多个类载入器,系统默认三个主要类载入器(BootStrap、ExtClassLoader、AppClassLoader)。每一个类载入器负责载入特定位置的类。   类载入器本身也是Java类(BootStrap除外)。由于它本身也要被类载入器载入,这样显然一定有第一个类载入器不是Java类。没错,正是BootStrap类载入器。它是由C++语言编写的。嵌在了Java虚拟机内核中的类载入器。当启动Java虚拟机时,它就被载入了。 2. 类载入器的结构与管辖范围   Java虚拟机中的全部类载入器採用具有父子关系的树形结构进行组织。在实例化一个类载入器对象时都须要为其指定一个父级类载入器对象,或者默认採用系统类载入器为其父级类载入。类载入器的树形结构与管辖范围例如以下图:    3. 类载入器的托付机制 当Java虚拟机载入某一个类时,究竟派出哪个类去载入呢?载入时遵循例如以下几个原则:   原则1:首先派出当前线程的类载入器载入类   原则2:每一个类载入器载入类时又先托付给其上级载入器。当全部的祖宗载入器没有载入到类,才回到发起者载入器。假设还没有载入到类,则将会抛出ClassNotFoundException。不会再去找发起者载入器的儿子,由于没有getChild方法,即使有,那么多个儿子(父类仅仅有一个),找哪一个呢?  

Ceph

ε祈祈猫儿з 提交于 2020-03-16 08:14:51
ceph 准备四台KVM虚拟机,其三台作为存储集群节点,一台安装为客户端,实现如下功能: 创建1台客户端虚拟机 创建3台存储集群虚拟机 配置主机名、IP地址、YUM源 修改所有主机的主机名 配置无密码SSH连接 配置NTP时间同步 创建虚拟机磁盘 使用4台虚拟机,1台客户端、3台存储集群服务器。所有主机的主机名及对应的IP地址如下所示。 client eth0 192.168.4.10/24 #1台客户端 node1 eth0 192.168.4.11/24 node2 eth0 192.168.4.12/24 node3 eth0 192.168.4.13/24 -------------------------------------------------- 步骤一:安装前准备 1)为所有机子配置yum源服务器(真机作为yum源)。 [root@room9pc01 ~]# yum -y install vsftpd #真机默认已经安装 [root@room9pc01 ~]# mkdir /var/ftp/ceph [root@room9pc01 ~]# mount -o loop rhcs2.0-rhosp9-20161113-x86_64.iso /var/ftp/ceph [root@room9pc01 ~]# systemctl restart vsftpd -----

JDK、JRE、JVM三者间的关系

旧时模样 提交于 2020-03-16 02:40:43
     文章出处:http://playkid.blog.163.com/blog/static/56287260201372113842153/   JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。Java Runtime Environment(JRE)是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。JVM是Java Virtual Machine(Java虚拟机)的缩写,是整个java实现跨平台的最核心的部分,能够运行以Java语言写作的软件程序。        在计算机开发语言的历史中,从来没有哪种语言象Java那样受到如此众多厂商的支持,有如此多的开发工具。      JDK(Java Development Kit)   JDK是Java开发工具包,是Sun Microsystems针对Java开发员的产品。   JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。   JDK是整个JAVA的核心,包括了Java运行环境JRE(Java Runtime Envirnment)

C++调用java

落花浮王杯 提交于 2020-03-15 23:47:58
摘要: 1 java类生成c头文件和库文件 2 对于c/c++程序,启动时先启动jvm,然后获得对应的java类的对象和方法。然后正常使用。 最近正在做一个C/C++调用java的程序,这里说的调用java不是使用方式 exec(/path/to/java,.....),而是调用一个class文件中的一个特定的函数。 实践后总结如下: 1. 安装 jdk 2. 安装gcc(linux自带有的就无需安装了) 利用JNI(java native interface),来实现动态建立java runtime environment. 第一,C/C++程序中包含头文件"jni.h" #include <jni.h> 一般在JAVA_HOME/include 目录下。 调用jni.h中的方法建立runtime env 然后调用java 程序。 第二,编译 g++ -o testjava testjava.cpp -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux -L${JRE_HOME}/lib/i386/client -ljvm 以上就是大致思路,现详细说明过程如下: #####################################################################################

JVM系列八(虚拟机性能监控命令).

醉酒当歌 提交于 2020-03-15 23:26:33
jps JVM Process Status Tool,显示指定系统内所有的 HotSpot 虚拟机进程。显示信息包括虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID)。 jps [-q] [-mlvV] [<hostid>] 选项 作用 -q 只输出 LVMID,省略主类的名称 -m 输出虚拟机进程启动时传递给主类 main() 函数的参数 -l 输出主类的名称,如果进程执行的是 jar 包,输出 jar 路径 -v 输出虚拟机进程启动时 JVM 参数 jstat JVM Statistics Monitoring Tool,用于收集 HotSpot 虚拟机各方面的运行数据。包括显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT 编码等运行数据。 jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]] 参数 interval 和 count 代表查询间隔和次数,如果省略这两个参数,说明只查询一次。 选项 作用 -class 监视类装载、卸载数量、总空间以及类装载所耗费的时间 -compiler 输出 JIT 编译过的方法、耗时等信息 -printcompilation 输出已经被 JIT 编译的方法 -gc 监视 Java

openstack create vm

柔情痞子 提交于 2020-03-15 23:21:12
一台虚拟机有哪些东西呢?CPU、内存、操作系统、磁盘、网络等。 那么我们需要通过规格、镜像、网络、磁盘、安全组来实现虚拟机的创建。 下面通过cirros创建一台迷你虚拟机,通过Packstack安装openstack的操作请参考上一篇文章。 一、查看信息 1)鉴权 [root@rong ~]# cat keystonerc_admin unset OS_SERVICE_TOKEN export OS_USERNAME=admin export OS_PASSWORD='8d07f364025d414e' export OS_REGION_NAME=RegionOne export OS_AUTH_URL=http://192.168.222.128:5000/v3 export PS1='[\u@\h \W(keystone_admin)]\$ ' export OS_PROJECT_NAME=admin export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_DOMAIN_NAME=Default export OS_IDENTITY_API_VERSION=3 [root@rong ~]# source keystonerc_admin [root@rong ~(keystone_admin)]# 2)查看规格

lubuntu18.04.4LTS系统安装及esp8266的环境搭建

血红的双手。 提交于 2020-03-15 20:36:00
之前是乐鑫自己的开发环境,但是有点老了,是14.04的版本,我想使用最新的lubuntu18.04,非LTS不用,因此,特意下载安装,体验。 1、镜像下载,可以前往中科大或清华镜像,比如https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cdimage/,或者http://mirrors.ustc.edu.cn/ubuntu-cdimage/lubuntu/releases/可以自行查找,http://cdimage.ubuntu.com/官方的肯定速度很慢 2、虚拟机使用virtualbox最新版6.1.4,这个也可以在中科大镜像站下载。 3、硬盘给他动态分了60G 4、安装的时候,不允许lubuntu自动升级,因为镜像里面,软件源是官方的,但是速度很慢,因此先安装了,再更新软件源。 5、安装了,虚拟机直接整个硬件安装,也可以自己手动分区。我选择前者。后面再来学习分区,也不难的。 6、虚拟机里面还有一个是non_free的驱动,应该是安装wifi网卡等驱动的,虚拟机直接忽略。 7、之后就是一路next,而且可以设置密码,直接登录,这样一来,开机直接登录,无需输入密码了,当时安装软件是必须要sudo的。 8、安装好后,安装软件升级,删除不需要(即老的)linux-header、image,之后dd命令清理磁盘,最后-

what is docker

两盒软妹~` 提交于 2020-03-15 09:30:11
尽管之前久闻Docker的大名了,但是天资愚钝,对其到底是个啥东西一直摸不清,最近花了一段时间整理了一下,算是整理出一点头绪来。 官网的介绍是这样的: Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications.... 其实看完这句话还是不明白究竟是啥的,下面就慢慢解释。不过长话短说的话,把他想象成一个用了一种新颖方式实现的超轻量虚拟机,在大概效果上也是正确的。当然在实现的原理和应用上还是和VM有巨大差别的,并且专业的叫法是应用容器(Application Container)。 为啥要用容器? 那么应用容器长什么样子呢,一个做好的应用容器长得就好像一个装好了一组特定应用的虚拟机一样。比如我现在想用Mysql那我就找个装好Mysql的容器,运行起来,那么我就可以使用 Mysql 了。 那么我直接装个 Mysql 不就好了,何必还需要这个容器这么诡异的概念?话是这么说,可是你要真装Mysql的话可能要再装一堆依赖库,根据你的操作系统平台和版本进行设置,有时候还要从源代码编译报出一堆莫名其妙的错误,可不是这么好装。而且万一你机器挂了,所有的东西都要重新来,可能还要把配置在重新弄一遍。但是有了容器,你就相当于有了一个可以运行起来的虚拟机