虚拟主机部署java,java虚拟机内存模型?
1.什么是jvm?(1)jvm是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的。(2)jvm包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和一个存储方法域。(3)JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。
2.jdk、jre、jvm是什么关系?(1)JRE(Java Runtime Environment),也就是java平台。所有的java程序都要在JRE环境下才能运行。(2)JDK(Java Development Kit),是开发者用来编译、调试程序用的开发包。JDK也是JAVA程序需要在JRE上运行。(3)JVM(Java Virtual Machine),是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台。
3.JVM原理(1)jvm是java的核心和基础,在java编译器和os平台之间的虚拟处理器,可在上面执行字节码程序。(2)java编译器只要面向jvm,生成jvm能理解的字节码文件。java源文件经编译成字节码程序,通过jvm将每条指令翻译成不同的机器码,通过特定平台运行。
4. JVM执行程序的过程1) 加载.class文件 2) 管理并分配内存 3) 执行垃圾收集JRE(java运行时环境)由JVM构造的java程序的运行环,也是Java程序运行的环境,但是他同时一个操作系统的一个应用程序一个进程,因此他也有他自己的运行的生命周期,也有自己的代码和数据空间。JVM在整个jdk中处于最底层,负责于操作系统的交互,用来屏蔽操作系统环境,提供一个完整的Java运行环境,因此也就虚拟计算机。操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境:1) 创建JVM装载环境和配置 2) 装载JVM.dll 3) 初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例4) 调用JNIEnv实例装载并处理class类。5. JVM的生命周期1) JVM实例对应了一个独立运行的java程序它是进程级别 a) 启动。启动一个Java程序时,一个JVM实例就产生了,任何一个拥有public static void main(String[] args)函数的class都可以作为JVM实例运行的起点 b) 运行。main()作为该程序初始线程的起点,任何其他线程均由该线程启动。JVM内部有两种线程:守护线程和非守护线程,main()属于非守护线程,守护线程通常由JVM自己使用,java程序也可以表明自己创建的线程是守护线程 c) 消亡。当程序中的所有非守护线程都终止时,JVM才退出;若安全管理器允许,程序也可以使用Runtime类或者System.exit()来退出 2) JVM执行引擎实例则对应了属于用户运行程序的线程它是线程级别的
6、JVM内存模型
(1)java代码具体执行过程如下图,
(2)运行时数据区,即jvm内存结构图如下图
(3)运行时数据区存储了哪些数据?
a) 程序计数器(PC寄存器)
由于在JVM中,多线程是通过线程轮流切换来获得CPU执行时间的,因此,在任一具体时刻,一个CPU的内核只会执行一条线程中的指令,
因此,为了能够使得每个线程都在线程切换后能够恢复在切 换 之前的程序执行位置,每个线程都需要有自己独立的程序计数器,并且不能互相被干扰,
否则就会影响到程序的正常执行次序。因此,可以这么说,程序计数器是每个线程所私有的。由于程序计数器中存储的数据所占空间的大小不会随程序的执行而发生改变,
因此,对于程序计数器是不会发生内存溢出现象(OutOfMemory)的。
b) java栈
Java栈中存放的是一个个的栈帧,每个栈帧对应一个被调用的方法,在栈帧中包括局部变量表(Local Variables)、操作数栈(Operand Stack)、
指向当前方法所属的类的运行时常量池(运行时常量池的概念在方法区部分会谈到)的引用(Reference to runtime constant pool)、
方法返回地址(Return Address)和一些额外的附加信息。当线程执行一个方法时,就会随之创建一个对应的栈帧,并将建立的栈帧压栈。当方法执行完毕之后,便会将栈帧出栈。
c)本地方法栈
本地方法栈与Java栈的作用和原理非常相似。区别只不过是Java栈是为执行Java方法服务的,而本地方法栈则是为执行本地方法(Native Method)服务的
d)堆
Java中的堆是用来存储对象本身的以及数组(数组引用是存放在Java栈中的)。堆是被所有线程共享的,在JVM中只有一个堆。
e)方法区
与堆一样,是被线程共享的区域。在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。
在Class文件中除了类的字段、方法、接口等描述信息外,还有一项信息是常量池,用来存储编译期间生成的字面量和符号引用。
在方法区中有一个非常重要的部分就是运行时常量池,它是每一个类或接口的常量池的运行时表示形式,在类和接口被加载到JVM后,
对应的运行时常量池就被创建出来。当然并非Class文件常量池中的内容才能进入运行时常量池,在运行期间也可将新的常量放入运行时常量池中,比如String的intern方法。
7、JVM内存溢出的情况
a) 程序计数器(Program Counter Register)
每条线程都有一个独立的的程序计数器,各线程间的计数器互不影响,因此该区域是线程私有的。该内存区域是唯一一个在Java虚拟机规范中没有规定任何OOM(内存溢出:OutOfMemoryError)情况的区域。
b)Java虚拟机栈(Java Virtual Machine Stacks)
在Java虚拟机规范中,对这个区域规定了两种异常情况:
1、如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常。
2、如果虚拟机在动态扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常。
这两种情况存在着一些互相重叠的地方:当栈空间无法继续分配时,到底是内存太小,还是已使用的栈空间太大,其本质上只是对同一件事情的两种描述而已。
在单线程的操作中,无论是由于栈帧太大,还是虚拟机栈空间太小,当栈空间无法分配时,虚拟机抛出的都是StackOverflowError异常,而不会得到OutOfMemoryError异常。
而在多线程环境下,则会抛出OutOfMemoryError异常。
c)堆Java Heap
Java Heap是Java虚拟机所管理的内存中最大的一块,它是所有线程共享的一块内存区域。几乎所有的对象实例和数组都在这类分配内存。Java Heap是垃圾收集器管理的主要区域,因此很多时候也被称为“GC堆”。
根据Java虚拟机规范的规定,Java堆可以处在物理上不连续的内存空间中,只要逻辑上是连续的即可。如果在堆中没有内存可分配时,并且堆也无法扩展时,将会抛出OutOfMemoryError异常。
d)方法区域,又被称为“永久代”,当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常。
java中如何保证消息队列的高可用?
通过KeepIived加ⅤIP虚拟IP,实现两个节点的双主集集模式,一个节点挂掉之后,VIP与流量自动转入另外一个节点;并且会自动在故障之后发送报警邮件或执行sh脚本做Nginx修改刷新conf参数,将当前MQ队列集群的域名转发到备用集群的VIP虚拟地址上。
如何评价高校927事件?
看到这个题目的时候,我都不知道什么“高校927”,本着不调查,就没有发言权,我还是先从网络上搜索了一下“高校927事件”到底是怎么回事。
首先因为事件发生在9月27号,并且此事件涉及到的就是各大高校,就连清华北大等名校也没有幸免,所以命名为“高校927事件”。事件核心就是一款起源于一个名为“送给最好的TA”的一个apk软件,这款仅有724.32KB大小的一个小软件,其传播的途径主要在我们平时的主流聊天软件,只要我们点一下这个apk,由于内存较小可以瞬间的打开,然后马上运行,最后发出那种不可描述的声音,就算你手机关了静音也无济于事。
为啥很多人中招,因为他就是熟悉的人发的,很多人对于熟悉的人,对于同学之间没有啥戒心,再就是这款聊天软件,被包装的很好。以各种面目出现。
如果有亲密的好友给你发了这样的软件,大家肯定会毫不犹豫的去点开。可是点开之后,就会发出女性“娇喘的”呻吟,直接控在你的手机音量,会被设置成最大音量,就是带着耳机也在所难逃。
很多人在不同的地方点开软件,比如课堂,比如会场,比如图书馆等等场所。很多人因为此整蛊软件遭到了处分。还有的为了很快的制止住手机里发出来的令自己尴尬的声音,就有把手机从楼上扔出去的,还有直接把手机摔断的。
就是这款软件疯狂的病毒式传播,让许多的高校纷纷沦陷,南大、浙大西交、中财、川大等高校,就算是清华北大也无一幸免。
开始时一小部分学生被软件整蛊。后来软件被整蛊的同学向外传播,以网络强大的关系网,席卷了整个高校。传播者就是高校的在校生们,他们开始被整蛊了,没有去举报这款非法的软件,而是出于看热闹,看玩笑的心理,推波助澜,把这款携带病毒的软件,以一天的时间传遍各大高校。
这些高校的学子们,没有一点防范意识,在明知道是网络病毒的情况下,不去抵制,而是加快了病毒软件的传播。可见这些大学生对于网络安全意识不够。
并且大学生们心理很是不健康,自己不小心下载了这款病毒被整蛊了,自己不但不对好朋友们提出警示,却要充当帮凶,也要整蛊别人,并且是从自己的好朋友入手。因为是好友,互相信任,毫不犹豫的就会点开软件,结果却令自己想找个地缝钻进去来逃避尴尬。那时你再去给人家解释,解释都显得苍白无力吧。因此令好友受到处分,难道这就是想要的结果吗?这到底是闺蜜、好哥们。还是冤家对头呀。自此后你们的关系恐怕再也无法复原了吧。一个整蛊软件,已经测出你们的友谊深厚程度了。
这款软件,其实在一年多以前,由北邮的一个学生设计出来的。
这款软件起初并非病毒,而是一款整蛊新生的软件。开发这款软件的也是一位名校的大学生,他开发的时候认为现在大学生上课玩手机的实在是太多太多,于是就想给他们长点教训。然而未曾想到的是这款软件以极快的速度传播开来,并且还被修改了代码,成为了一款能采集个人隐私的病毒。因此,对于现在看到这款病毒的大学生而言,最好不要再进行传播。
这款软件,你只要不去点开,就没有关系。可是好奇害死猫,很多人都中标了。
由此事件大家可从中得到很多的教训,比如很多大学生在课堂不是认真听课,而是看手机,大学课堂也像高中课堂一样,加一条不让学生带手机进课堂的制度。
再就是开玩笑、整蛊要有个限度。大家要文明上网。多学习点网络安全知识,对于不良的软件,要勇于制止,而不是去传播,做了推波助澜的人。
大家认为怎么看带着这个问题,请分享下,你对于高校927事件的看法吧。
Java是如何实现平台无关性的?
所谓平台无关性指的就是程序可以在任何平台运行,而不需要改动程序本身。基于这个概念,java平台无关性实现主要由一下几个部分组成。
1、中间字节码文件我们都知道java程序中的代码文件最终都会被编译成字节码文件,即. class文件。这个编译工作可以通过javac命令来完成。平常开发中我们更多的是通过开发工具来完成的。假如我们用maven构建一个项目,我们可以在idea中直接 build jar或者build war。最终生成的文件就是字节码文件。这些字节码文件是不能被操作系统识别的,操作系统只能识别0和1。那这些文件靠谁识别呢?JVM。
2、JVMjava虚拟机即jvm,是运行在操作系统之上的一个虚拟的编译系统。它的作用就是将字节码文件翻译成操作系统可以识别的语言0和1。这就是我们为什么学java,先要安装jdk。jdk中包括了jvm。没有jvm,java源代码是无法编译成字节码文件的。不同操作系统我们需要安装不同的jdk,不同平台的jvm对外暴露的是同样的接口,但是内部解释0和1的过程是不一样的,这就间接实现了跨平台。我们平常写代码就不用考虑不同平台兼容性的问题,jvm会帮你做,write once,run anywhere。鉴于此,我们也可以开发一种语言,只要能编译成字节码文件,就能借助jvm让其运行在操作系统上,就像scala。~笑脸~
3、语言本身的规范这也是跨平台一个重要的原因。Java的基本数据类型的值域和行为都是由它自己定义的。
不管是在那种平台下运行,Java中的int都是32位二进制表示有符号整数,而float则总是遵循IEEE754浮点标准的32位浮点数。在像C/C++这样的语言中,基本数据类型int的值域是由它的占位宽度决定的,而它的占位宽度则由平台决定的。这就是它不能跨平台的一个原因了。
IDC服务器租用和虚拟主机两种服务有何区别?
1. 资源竞争
对于大型的网络系统而言,虚拟主机之所以不再是网络管理员偏爱的选择,主要原因是对资源的竞争。即使可以做到,你实际上也很难确切地知道到底有多少虚拟主机正在同时分享现实服务器的资源。许多虚拟主机服务商非常不情愿公布与您的网站在同一台服务器上运转的所有网站的确切数目,而且即使您得到了一个数字,这个数字的正确性与否也是不得而知的。然而现实的问题是,当与您的网站在同一台服务器上的某个(些)网站的访问量很大时,这台服务器的系统结构可能很容易就不堪重负,出现过载。如果同时有1000个网站在同一台服务器上运转,那么很可能在某个时候您的网站所在的那台服务器将无法处理所有进入的访问要求。这种情况对于您意味着什么呢?简单地说,别人将无法浏览您的网站。 如果在同一台服务器上的另外一个网站突然出现了访问量激增的情况,那么这台服务器上实际可用的硬件资源在任何时刻都可能发生过载。 如果有一篇文章在一本重要出版物上发表并据此建立了相关的网站,而且碰巧这个网站与你的网站在同一台服务器上,那么由于这个网站的访问量成指数增加,人们将无法访问您的网站。有许多地方可能会出现这种瓶颈问题,其中包括处理器能力、内存分配以及用于传送未加工数据的网卡等。 这台服务器上还可能有这样的一个网站,此网站中的大量脚本都编写的很糟糕,由此会使处理器的运转变得紧张,并且降低别人对您的网站的访问速度。也可能有某个客户正在进行大量的流水式文件传输,这会占用服务器可以使用的网络带宽中的绝大部分。此外,如果有人正在进行大量的数据库查询,可能会造成随机访问存储器的过度使用,这同样会使得别人无法访问您的网站。而且,如果使用一台共享的服务器,您通常无法明确服务器资源的使用情况,因此您也就无法确定哪些资源是可以使用的。 如果您的网站是放在一台租用的服务器上,那么您可以拥有更高级别的控制能力,并且可以自己决定服务的质量高低以及其它一些重要的事情。采用了服务器租用方案,您将能够对服务器资源的使用情况进行监督,您还可以决定何时升级服务器的资源配置,其中包括硬盘、随机访问存储器以及处理器等。如果您希望自己的网站迅速发展壮大并且接收到大量的通信或者是处理大量的数据库查询,那么采用服务器租用方案会带来极大的帮助。 目前,大约百分之十到百分之三十的网络交易都过早的失败了,其原因是服务器的响应速度太慢。想象一下,如果走进您商店的顾客中有百分之十到百分之三十的人因为您的店面光线不好或者是不怎么干净又走了出去,这将是一件多么可怕的事啊!更糟糕的是,有超过百分之二十五的购买活动因为SSL的连接和响应太慢而终止了。
2. 规模可伸缩性
规模可伸缩性的限制是造成虚拟主机"实际上"无法升级的另一个原因。如果您的网站获得了成功,那么您应该把它转移到一个服务器租用或者是主机托管服务器上,使用这两种主机模式可以确保服务器的结构规模能够自由地改变,于是就能够处理通信量和销售量增加的问题。 还有一点,如果您正考虑采用虚拟主机,那么必须确保服务商使用的不是其专有的系统方案,其中包括网络服务器、电子商务设置、合并方案等等。实际中常常出现这种情况,网站所有者花费了大量的时间与金钱开发出一种网站方案,此种方案符合了某个虚拟主机服务商的要求,可是结果却使得供货公司终止了这项服务或是更改了原先的价格模型。 其它需要格外注意的是,您还必须确保虚拟主机服务商使用的软件具有规模可伸缩性,以便满足你未来的需求;此外,同您的虚拟主机服务商合作的软件公司也必须能够随时提供帮助。虽然结果如何不得而知,但我们相信您总不希望买到手的是过时或者二流的技术。3. 灵活性
当您的网站需要具有更大的灵活性以便处理组织不断增长的需求时,虚拟主机可能就无能为力了。就像一间公寓给它的住户带来了限制和约束一样,虚拟主机不仅会受到共享环境中实际运转的资源的约束,而且会受到服务商允许您在服务器上运行的软件和服务项目的约束。 为了使许许多多的网站能够共享一台服务器的资源,很多功能和属性都必须受到限制,这样才可能以一种折衷的方案容纳所有的这些网站。在一个共享服务器环境中,许多功能和属性要么不允许使用、要么不受到支持、要么不对外公开,要么在使用时受到限制。诸如Telnet、服务器端包含、还有某些类型的Java等功能就不允许在一个虚拟主机环境中运行。其它的一些功能,比方说ftp访问和电子邮件的账号数目通常要受到访问范围以及能够设置的账号总数的限制。 为了使共享服务器上的所有网站协调运作,许多虚拟主机服务商对于什么时候以及多长时间才可以修改或更新一个网站上的内容也提出了限制。随着网络技术的日趋成熟,网络用户提出的期望要求也在成指数形式增长。他们现在希望能具有动态的网站内容,能进行交互式的会议,还能够在网站上充分展现个性化的一面。在一个共享的主机环境中,如果要运行可靠而且健壮的数据库驱动应用程序、集成的电子商务方案,那么很难获得最佳效果。大多数虚拟主机要么不允许用作数据库主机,要么仅允许在虚拟主机上运行一种类型的数据库,但是在对此数据库的使用上还设置了许多约束和限制。其它的一些方案,比方说流式多媒体传输产品,例如流行的Real Audio,运行起来每个月还会带来一笔额外的费用,在许多情况下甚至还不允许在共享的服务器上运行。 然而,如果使用的是服务器租用,那么将由客户本人决定在自己的网站上到底运行那些服务和软件,而不是由网站系统公司来决定。这将会使您可以充分发挥您的网络管理员或者网络开发组的杰出才干。
4. 可靠性
另外,如果共享服务器上的某个用户做出了非法的或者不道德的事情,比方说散布垃圾信,那么其他人可能会对这个网站实施报复。报复的手段是多种多样的,其后果是共享服务器的过载或者瘫痪。 在共享环境中,如果某个网站的脚本编写的很糟糕,那么可能会触发其它一些问题,并最终造成服务器重启,死锁或者是不允许对服务器进行访问等后果。 虚拟主机服务商多久对服务器上的东西进行一次备份?备份时使用的是什么样的协议?具体的操作过程是什么样的?对一个容纳了多个网站的服务器进行重建,其程序又是如何的? 安全性方面的考虑可能是您希望转移到服务器租用上的另一个主要原因。如果一个网站放在了虚拟主机环境中,那么这台服务器上的其它用户就有极大的机会实施一些恶意的行为,或者是针对您的网站,或者是针对整台服务器,不管怎么样,都会对别人访问您的网站造成不良影响。然而,如果您的网站是在一个租用的整机上,那么其它的任何人都无法接近您的文件或是组织的信息。 如果用作了虚拟主机,那么服务器本身也更容易遭到黑客的攻击或者病毒的感染。当许多用户都有一定的权限对服务器进行访问时,此服务器由于遭到黑客攻击或病毒感染而瘫痪的可能性也大大地增加了。如果您选择了把您的网站放在一台虚拟主机上,那么一定要向服务商问明他采取了哪些安全防范手段以及他对于病毒侵袭又采用了哪种类型的保护方案。 如果有人为了寻找一些有价值的信息,比如说,专有数据或者信用卡号码,而采用一定的方法对进入您的网站以及从您的网站传出的数据进行查询,那么就会引起数据包的泄密。虽然任何一种方案都无法做到百分之百的安全可靠,但是把网站放在虚拟主机上出现数据包泄密的可能性要比把它放在一个服务器租用环境中大许多。 在虚拟主机环境中,潜藏的破坏者是另一个潜在的安全性问题。如果虚拟主机服务商对于整个系统或者用户文件不采取适当的安全保护措施,那么共享服务器上的其他用户可以直接在服务器上读取您的数据。这就好像您刚刚搬入了一所新房子,可是不允许您在窗户上挂窗帘一样!5. 价格考虑
付出多少钱就得到价值多少的东西!这种陈词滥调在您决定为自己的网站是采用虚拟系统方案还是服务器租用方案时,听起来似乎有些道理。最初的时候,服务器租用与虚拟主机相比每个月可能要多支出¥1000至¥2000元,但是,虚拟主机会导致客户的继续发展走向死胡同。虚拟主机要使用额外的带宽所带来的费用会很快地超过服务器租用的费用。同样,在共享服务器上增添其它的功能性也会为每个月带来更多的费用。总的来说,如果您正考虑"我是否使用服务器租用"这一问题,那么您的最大问题是要想清楚:您是否有能力不把自己的网站放到目前可以获得的最健壮的主机环境中。您要明白,这种环境可以使您对所有的情况以及向网站访问者提供的服务的质量进行全面控制。
6. 其它方面的考虑
现在,既然有了这么多的优点,那么在决定采用虚拟系统方案还是服务器租用方案时,还有哪些其它的事情需要考虑呢?我们认为,您真正需要关心的应该是有没有物色好一位能够运行服务器租用的更高一级的技术专家。您必须确保您指派的某人能够对服务器的管理工作负责。您得确定:是否可以从内部人员中找到管理服务器的专家;您的虚拟主机服务商是否能够替您管理服务器;还有您是否可以同第三方签约让他们维护您的服务器。通常情况下,承担这项工作的最佳人选是您的系统集成员或者网络开发员。使用NT、SUN Solaris还是Linux也是一个问题。我们的回答是,使用您自己了解的系统。如果您或者同您签约的第三方在一种或另一种平台方面有技术上的专家人员,那么就采用这种平台方案。如果您在对平台不甚了解,那么应该多考虑考虑这些问题。如果您需要开发数据库应用程序或者希望使用最多种类的软件,那么NT是您首选的方案。但是您要知道,如果把网站放在了NT环境中,您将必须做好准备在网站有了实际的通信之后定期地重启服务器,要么一个月一次,要么一周一次,甚至是每天一次。 现在,SUN Solaris仍然是最健壮也最稳定的系统方案。Solaris操作系统与Apache网络服务器的结合对于提高系统性能和增加可靠性是一个不错的解决办法。在Sun与Apache相结合的方案中,唯一需要注意的问题是,您必须确保自己拥有一位熟悉这种环境的技术人员。 Linux作为操作系统领域的新贵,正得到许多人的密切关注,原因是它的性能价格比极高,并且它能够允许终端用户修改代码以满足他们特殊的需求。如果为了管理Sun服务器而要找到技术上的帮助很困难的话,那么要找到一位有能力管理基于Linux系统的服务器的技术人员就会加倍困难。但是采用Linux系统方案的好处在于,现在可以得到许许多多的免费软件和开放源代码,而且每天甚至还有更多的此类产品进入市场。