常用概念比较

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

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

目前64位只支持Server模式,文件内容都是一样的,上面的注释不去管它,剩下的就是这些:

-server KNOWN
-client IGNORE
-hotspot ALIASED_TO -server
-classic WARN
-native ERROR
-green ERROR

由于我的电脑装的是64位JDK,所以是“-client INGORE”。同时支持Server模式和Client模式的,应该是“-server KNOWN”和“-client KNOWN”,一般只需要变更这两个配置的先后顺序即可,但是前提是JAVA_HOME/jre/bin目录下同时存在server和client两个文件夹,分别对应着各自的虚拟机,缺少一个,切换后就会报错。

时间: 2024-10-10 15:30:49

常用概念比较的相关文章

Auto入门 之 常用概念

1.SEMI (Semiconductor Equipment And Materials International)  国际半导体设备与材料产业协会 2.SECS SECS协议是基于RS-232或TCP/IP的点对点协议,由SECS I/HSMS.SECS II两层及GEM构成   SECS I/HSMS 为传输层,SECS II则把SECS I传输的二进制串翻译成形象直观的格式表示出来,SECS II规范传输资料的标准结构和显示内容,方便使用者查看数据内容. 3.GEM (Generic

Python--多线程、多进程常用概念

一.常用概念 进程 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成. 线程 线程的出现是为了降低上下文切换的消耗,提高系统的并发性,并突破一个进程只能干一样事的缺陷,使到进程内并发成为可能. 线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID.程序计数器.寄存器集合和堆栈共同组成.线程的引入减小了程序并发执行时的开销,提高了操作系统的并发性能.线程没有自己的系统资源. 线程切换的开销远远小于进程切换的开销 切

布局与控件(一)——布局与控件的常用概念

第1节 布局与控件的常用概念 界面设计中的控件,就是我们常常看到的按钮 滑动条 文字显示区等等,它们就像房间里的家具,是界面设计的最小单位. 布局是一个可以容纳别的布局(或者控件)的容器.它就像是一个大的房间,房间里面可以放各种家具(控件),也可以再隔离成更多的房间(放入别的布局). 不过,两者有很多共同的地方,例如定义它们的大小.边距等等. 1.1 尺寸单位 在使用布局或控件时,有时需要指定它们的尺寸.安卓系统提供了三种单位: px:以像素为单位进行设置,屏幕上每一个点,就是一个像素,例如一部

性能测试常用概念及计算公式

性能测试常用概念及计算公式 一.概念 1.并发连接数-SBC(Simultaneous Browser Connections) 并发连接数指的是客户端向服务器发起请求,并建立了TCP连接.每秒钟服务器链接的总TCP数量,就是并发连接数. 2.请求数-QPS(Query Per Second)/RPS(Request Per Second) 请求数有2个缩写,可以叫QPS也可以叫RPS.单位是每秒多少请求.Query=查询,也相当于请求.请求数指的是客户端在建立完连接后,向http服务发出GET

007-elasticsearch【一】概述、Elasticsearch 访问方式、Elasticsearch 面向文档、常用概念

一.概述 Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上. Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目标是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API. 然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎. 它可以被下面这样准确的形容: 一个分布式的实时文档存储

G-sensor概述及常用概念整理【转】

本文转载自:http://www.jianshu.com/p/d471958189a0?nomobile=yesG 本文对G-sensor进行整理,先介绍G-sensor的一些基本概念,再具体讲解BOSCH.ST.ADI三家的G-sensor,其中BOSCH的G-sensor重点讲BMA222E,ST的G-sensor重点讲LIS2DH12,ADI的G-sensor具体讲ADXL362. 一.G-sensor概述 什么是MEMS MEME(Micro-Electro-Mechanical Sys

SQL Server2005常用概念(created by one friend)

数据库(database):为特定目的或操作而组织和表示的信息.表和其他对象的集合. 数据库管理系统(database management system):是一种操纵和管理数据库的大型软件,用于建立.使用和维护数据库 数据库系统(database systems):是由数据库及其管理软件组成的系统 数据库对象:数据库中的表.索引.触发器.视图.键.约束.默认值.规则.用户定义数据类型或存储过程及数据库本身等 数据库所有者:DBO 架构:单个用户所拥有的数据库对象的集合,这些对象形成单个命名空间

python的常用概念

常用的概念 主体字符串 主体列表 内置函数和方法的区别 映射表 引用 迭代器: 1. 字典:单步遍历迭代器 2. 文件:逐行读取的迭代器

JMeter基础之常用概念

JMeter是一个非常流行的性能测试工具,它的优点如下: 开源,它是一款开源的免费软件,使用它不需要您支付任何费用. 小巧,相比LoadRunner的庞大(最新LR11将近4GB),它非常小巧,不需要安装,但需要JDK环境,因为它是使用java开发的工具. 功能强大,JMeter设计之初只是一个简单的Web性能测试工具,但经过不段的更新扩展,现在可以完成数据库.FTP.LDAP.WebService等方面的测试.因为它的开源性,当然您也可以根据自己的需求扩展它的功能. 从性能工具的原理上看,JM

JVM学习之常用概念

方法区     当JVM使用类装载器装载某个类时,它首先要定位对应的class文件,然后读入这个class文件,最后,JVM提取该文件的内容信息,并将这些信息存储到方法区,最后返回一个class实例.      方法区是系统分配的一个内存逻辑区域,是用来存储类型信息的(类型信息可理解为类的描述信息),方法区主要有以下几个特点:      一.方法区是线程安全的.由于所有的线程都共享方法区,所以,方法区里的数据访问必须被设计成线程安全的.例如,假如同时有两个线程都企图访问方法区中的同一个类,而这个