欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

一般使用的都 图纸加密 是工具自带的JRE

点击: 次  来源:宝鼎软件 时间:2018-03-28

原文出处: 五月的仓颉

媒介

之前的文章尤其是讲授GC的时候提到了许多的观念,好比内存溢出内存泄露、并行与并发、Client模式和Server模式、Minor GC和Full GC,本文具体讲授下这些观念的区别。

内存溢出和内存泄露的区别

1、内存溢出

内存溢出指的是措施在申请内存的时候,没有足够大的空间可以分派了。

2、内存泄露

内存泄露指的是措施在申请内存之后,没有步伐释放掉已经申请到内存,它始终占用着内存,即被分派的工具可达但无用。内存泄露一般都是因为内存中有一块很大的工具,可是无法释放。

从界说上可以看出,内存泄露终将导致内存溢出。

留意,定位虚拟机问题内存问题的时候第一步就是要判定到底是内存溢出照旧内存泄露,前者好判定,跟踪仓库信息就可以了;后者较量巨大一点,一般都是暮年月中的大工具没释放掉,要通过各类步伐找出暮年月中的大工具没有被释放的原因。

并行和并发的区别

这两个名词都是并发编程中的观念,在谈论垃圾收集器的上下文语境中,可以这么领略这两个名词:

1、并行Parallel

多条垃圾收集线程并行事情,昆山软件开发,但此时用户线程仍然处于期待状态

2、并发Concurrent

指用户线程与垃圾收集线程同时执行(但并不必然是并行的,大概会瓜代执行),用户措施在继承运行,而垃圾收集措施运行于另一个CPU上

Minor GC和Full GC的区别

1、新生代GC(Minor GC)

指产生在新生代的垃圾收集行动,因为大大都Java工具存活率都不高,所以Minor GC很是频繁,一般接纳速度也较量快

2、暮年月GC(Major GC/Full GC)

指产生在暮年月的垃圾收集行动,呈现了Major GC,常常会陪伴至少一次的Minor GC(但并不是绝对的)。Major GC的速度一般要比Minor GC慢上10倍以上

Client模式和Server模式的区别

部门商用虚拟机中,Java措施最初是通过表明器对.class文件举办表明执行的,当虚拟机发明某个要领或代码块运行地出格频繁的时候,就会把这些代码认定为热点代码Hot Spot Code(这也是我们利用的虚拟机HotSpot名称的由来)。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与当地平台相关的呆板码,并举办各类条理的优化,完成这个任务的编译器叫做即时编译器(Just In Time Compiler,即JIT编译器)。JIT编译器并不是虚拟机必须的部门,Java虚拟机类型并没有要求要有JIT编译器的存在,更没有限定或指导JIT编译器应该如何去实现。可是,JIT编译器机能的优劣、代码优化水平的坎坷却是权衡一款商用虚拟机优秀与否的最要害指标之一。

表明器和编译器其实和编译器各有优势:

1、当措施需要迅速启动和执行的时候,表明器可以先发挥浸染,省去编译的时间,当即执行

2、在措施运行后,跟着时间的推移,编译器逐渐发挥浸染,把越来越多的代码编译成当地代码之后,可以获取更高的执行效率

我们利用的HotSpot中内置了两个JIT编译器,即C1编译器和C2编译器,默认回收的是表明器和一个编辑器共同的方法举办事情。HotSpot在启动的时候会按照自身版本以及宿主呆板的硬件机能自动选择运行模式,好比会检测宿主呆板是否为处事器、好比J2SE会检测主机是否有至少2个CPU和至少2GB的内存。

1、假如是,则虚拟时机以Server模式运行,该模式与C2编译器配合运行,更注重编译的质量,启动速度慢,可是运行效率高,适适用在处事器情况下,针对出产情况举办了优化

2、假如不是,则虚拟时机以Client模式运行,该模式与C1编译器配合运行,更注重编译的速度,启动速度快,更适适用在客户端的版本下,针对GUI举办了优化

有两种要领查察虚拟机是运行在Client模式下照旧Server模式下:

1、在措施呼吁行运行“java -version”呼吁,查察的是你当地安装的虚拟机是信息

2、好比我们用Eclipse可能MyEclipse运行措施,一般利用的都是东西自带的JRE,虚拟机并不是当地安装的虚拟机。这时候怎么办呢,可以通过在措施中运行下面的语句来查察虚拟机信息

System.out.println(System.getProperty("java.vm.name"));

我这里的运行功效是

Java HotSpot(TM) 64-Bit Server VM

虽然要改变虚拟机运行的模式也可以,昆山软件开发,只需要改jvm.cfg就可以了。我们可以从以下几个处所找到jvm.cfg:

  1. 32位的JDK的文件路径是  JAVA_HOME/jre/lib/i386/jvm.cfg
  2. 64位的JDK的文件路径是  JAVA_HOME/jre/lib/amd64/jvm.cfg
  3. MyEclipse在 …/Common/binary/com.sun.java.jdk.win32.x86_64_1.6.0.013/jre/lib/amd64/jvm.cfg