400-616-5551

您所在位置: 首页> 学习课程> java培训 | 深入java虚拟机以及大数据知识点汇总

java培训 | 深入java虚拟机以及大数据知识点汇总

发布百知教育 来源:学习课程 2019-10-12

182  68

1.jvm的相关概念

当List放了大量的数据超过jvm中所能容纳的内存后,就会发生堆溢出。

当递归调用没有临界退出条件就会出现 栈溢出。

 

当批量导入大量数据或者用dom4j解析大的xml文件的时候,

会出现 堆溢出,这个时候可以通过分段批量提交以及用

sax代替dom4j来解决问题。

 

heap(堆),stack(栈)

 

jvm的结构细分及其概述?

 

Java 虚拟机有一个堆,堆是运行时数据区域,

所有类实例和数组的内存均从此处分配。

堆是在 Java 虚拟机启动时创建的。”

“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。

可以看出JVM主要管理两种类型的内存:堆和非堆。

简单来说堆就是Java代码可及的内存,是留给开发人员使用的;

非堆就是JVM留给自己用的。

 

jvm 内存结构?

堆: 逻辑上是连续,物理上可以处于不连续的内存空间中,

     里面存储的是对象实例以及数组。可以细分为新生代,老生代。

     通过-Xmx和-Xms控制大小。


虚拟机栈:基本数据类型,对象引用(地址,指针)。

 

本地方法栈(了解):它与虚拟机栈发挥的作用差不多,区别在于虚拟机栈为java方法

的执行提供服务,而本地方法栈为虚拟机使用到的Native(本地)方法服务。

 

方法区:放了所加载的类的信息(名称、修饰符等)、类中的静态变量、

        类中定义为final类型的常量、类中的Field信息、类中的方法信息

        在Sun JDK中这块区域对应的为PermanetGeneration,又称为持久代,

        默认为64M,可通过-XX:PermSize以及-XX:MaxPermSize来指定其大小

   

在服务器启动的时候报内存溢出是因为方法区太小,也就相当于持久代的内存太小。

通过-XX:PermSize以及-XX:MaxPermSize来指定其大小,可以解决这个问题。

 

 

常量池是方法区的一部分,用来存储常量信息。如String就存储在

常量池中。

 

计数器(了解):通过该计数器的值来选取下一条要执行的字节码指令。

 

GC是什么,为什么要有GC?

GC就是垃圾回收,java这种语言是动态分配内存大小的,并且依靠

垃圾回收机制来完成对分配内存空间的回收,从而来避免内存溢出的问题,

也在一定程度上降低了程序员工作的复杂度。

 

jvm中的GC采用了generation(分代回收)算法,

因为大多数的对象存活的时间比较短,

而少部分的对象才能够长时间存活。

因此,jvm将堆内存划分为年轻代(young generation)和

年老代(old generation)。

年轻代中的对象通常建立时间不久,且大部分生命周期也很短;

年老代中的对象则已经创建比较久了,

其声明周期也相对年轻代比较长。

按照上面的划分,jvm在做GC时也进行了区别对待,

对年轻代GC会相对比较频繁,且采用了copying(复制)算法;

年老代的GC相对比较少,且采用的是tracing算法的一种,

是标记-清除-压缩。

 

JVM内存限制(最大值)

 

JVM内存的最大值跟操作系统有很大的关系。

简单的说就32位处理器虽然 可控内存空间有4GB,

但是具体的操作系统会给一个限制,

这个限制一般是2GB-3GB

(一般来说Windows系统下为1.5G-2G,Linux系统 下为2G-3G),

而64bit以上的处理器就不会有限制了。

 

Java 监视和管理控制台:

JConsole 使您能够在运行时监视各种 JVM 资源统计信息。

这种特性特别适用于检测死锁、内存泄漏。

它可以连接到一个本地或远程 JVM 并可用来进行监视:

线程状态(包括相关的锁)

内存使用情况

垃圾收集

运行时信息

JVM 信息

 

jvm的调优?

 

开启-Server模式,增大堆的大小,以及持久代的大小,从而

提高程序的运行效率,并且将初始堆大小和最大堆大小设置为

一样的值从而避免了堆增长会带来额外压力。持久代大小的设置

同理,也设置为初始大小和最大大小一样大。

 

jvm的类加载机制?  jvm中类的生命周期?

 

生命周期:加载、连接、初始化,使用,卸载


对象基本上都是在jvm的堆区中创建,在创建对象之前,

会触发类加载(加载、连接、初始化),

当类初始化完成后,

根据类信息在堆中实例化类对象,

初始化非静态变量、非静态代码以及默认构造方法,

当对象使用完之后会在合适的时候被jvm垃圾收集器回收。

 

要经过三步:加载(Load),链接(Link),初始化(Initializ)。

其中链接又可分为校验(Verify),准备(Prepare),解析(Resolve)三步。

ClassLoader就是用来装载的。通过指定的className,找到二进制码,

生成Class实例,放到JVM中。

 

ClassLoader从顶向下分为 :

 

Bootstrap ClassLoader:引导类加载器,

它负责加载Java的核心类(如rt.jar)

 

Extension ClassLoader:扩展类加载器,

它负责加载JRE的扩展目录

(JAVA_HOME/jre/lib/ext)中的JAR包

 

System ClassLoader:系统(也称为应用)类加载器,

它负责在JVM被启动时加载来自在命令java中的-classpath

中的JAR包

 

User-Defined ClassLoader:用户自定义的类加载器

 

linux中的命令:

 

ps -ef | grep :查看进程信息

 

vi:文件编辑命令

 

more:分页查看命令

 

top:常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况

 

ifconfig:显示或配置网络设备的命令

 

ping:它通常用来测试与目标主机的连通性

 

rsync、scp:文件同步命令

2.云计算+大数据的具体技术实现方案:

 

Hadoop是一个能够对大量数据进行分布式处理的软件框架。

它以并行的方式工作,通过并行处理加快处理速度,

维护多个工作数据副本,

具有可伸缩性,能够处理 PB 级数据.

 

hadoop 由许多元素构成。其最底部是HDFS,

它存储 Hadoop 集群中所有存储节点上的文件。

HDFS的上一层是MapReduce 引擎.

 

hadoop下的子项目:

HDFS:Hadoop分布式文件系统

MapReduce:并行计算框架(建立在HDFS上的)

HBase: 类似Google BigTable的分布式NoSQL 列数据库

Hive:数据仓库工具

Zookeeper:分布式锁设施

Pig: 大数据分析平台,为用户提供多种接口

 

行业知识(了解):

存储容量:是该存储设备上可以存储数据的最大数量,通常使用千字节(kb kilobyte)、兆字节(MB megabyte)、吉字节(GB, gigabyte)、太字节(TB ,terabyte)和PB(Petabyte)、EB(Exabyte)等来衡量。

1KB=2(10)B=1024B; 括号中的数字为2的指数(即多少次方)

1MB=2(10)KB=1024KB=2(20)B;

1GB=2(10)MB=1024MB=2(30)B。

1TB=2(10) GB=1024GB=2(40)B

1PB=2(10) TB=1024TB=2(50)B

1EB=2(10) PB=1024PB=2(60)B

1Byte(相當於一個英文字母,您的名字相當6Bytes(6B)。

Kilobyte(KB)=1024B相當於一則短篇故事的內容。

Megabyte(MB)=l024KB相當於一則短篇小說的文字內容。

Gigabyte(GB)=1024MB相當於貝多芬第五樂章交響曲的樂譜內容。

Terabyte(TB)=1024GB相當於一家大型醫院中所有的X光圖片資訊量。

Petabyte(PB)=l024TB相當於50%的全美學術研究圖書館藏書資訊內容。

Exabyte (EB)=1024PB;5EB相當於至今全世界人類所講過的話語。

Zettabyte(ZB)=1024EB如同全世界海灘上的沙子數量總和。

Yottabyte(YB)=1024ZB相當於7000位人類體內的微細胞總和。


java培训:http://www.baizhiedu.com/java2019


上一篇:java培训 | 浅谈java事务及隔离级别

下一篇:应届生去公司找个Java程序员的职位需要什么技能?

相关推荐

www.baizhiedu.com

有位老师想和您聊一聊

关闭

立即申请