王知无(import_bigdata)
微信搜:import_bigdata
GitHub搜:https://github.com/wangzhiwubigdata/God-Of-BigData
展开
-
【大数据Java基础- JVM 23】面试题(一)
194.说一下 jvm 的主要组成部分?及其作用?类加载器(ClassLoader)运行时数据区(Runtime Data Area)执行引擎(Execution Engine)本地库接口(Native Interface)组件的作用:首先通过类加载器(ClassLoader)会把Java代码转换成字节码,运行时数据区(RuntimeDataArea)再把字节码加载到内存中,而字节码文件只是JVM的一套指令集规范,并不能直接交个底层操作系统去执行,因此需要特定的命令解析器执...原创 2021-10-25 20:24:05 · 877 阅读 · 0 评论 -
【大数据Java基础- Java并发 02】深入分析CAS
CAS,Compare And Swap,即比较并交换。Doug lea大神在同步组件中大量使用CAS技术鬼斧神工地实现了Java多线程的并发操作。整个AQS同步组件、Atomic原子类操作等等都是以CAS实现的,甚至ConcurrentHashMap在1.8的版本中也调整为了CAS+Synchronized。可以说CAS是整个JUC的基石。CAS分析在CAS中有三个参数:内存值V、旧的预期值A、要更新的值B,当且仅当内存值V的值等于旧的预期值A时才会将内存值V的值修改为B,否则什么都不干。其.原创 2021-10-27 01:32:33 · 463 阅读 · 0 评论 -
【大数据Java基础-Java基础07】运算符
1-算术运算符1.算术运算符: + - + - * / % (前)++ (后)++ (前)-- (后)-- +【典型代码】//除号:/int num1 = 12;int num2 = 5;int result1 = num1 / num2;System.out.println(result1);//2// %:取余运算//结果的符号与被模数的符号相同//开发中,经常使用%来判断能否被除尽的情况。int m1 = 12;int n1 = 5;System.out.println("原创 2021-10-24 11:18:53 · 412 阅读 · 0 评论 -
【大数据Java基础- JVM 18】垃圾回收(二)垃圾回收相关算法
1. 标记阶段1.1 引用计数算法1.1.1 对象存活判断1.在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GCオ会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。2.那么在JVM中究竟是如何标记一个死亡对象呢?简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。3.判断对象存活一般有两种方式:引用计数算法和可达性分析算法。原创 2021-10-25 19:12:49 · 410 阅读 · 0 评论 -
【大数据Java基础-JAVA 面向对象14】面向对象的特征二:继承性 (三) 关键字:super以及子类对象实例化全过程
关键字:super1.super 关键字可以理解为:父类的2.可以用来调用的结构:属性、方法、构造器3.super调用属性、方法:3.1 我们可以在子类的方法或构造器中。通过使用"super.属性"或"super.方法"的方式,显式的调用父类中声明的属性或方法。但是,通常情况下,我们习惯省略"super."3.2 特殊情况:当子类和父类中定义了同名的属性时,我们要想在子类中调用父类中声明的属性,则必须显式的使用"super.属性"的方式,表明调用的是父类中声明的属性。3.3 特殊情况:当原创 2021-10-25 00:02:24 · 334 阅读 · 0 评论 -
【大数据Java基础-JAVA 面向对象08】面向对象的特征一:封装性
面向对象的特征一:封装与隐藏1.为什么要引入封装性?我们程序设计追求“高内聚,低耦合”。高内聚 :类的内部数据操作细节自己完成,不允许外部干涉;低耦合 :仅对外暴露少量的方法用于使用。隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。2.问题引入:当我们创建一个类的对象以后,我们可以通过"对象.属性"的方式,对对象的属性进行赋值。这里,赋值操作要受到属性的数据类型和存储范围的.原创 2021-10-24 23:18:23 · 324 阅读 · 0 评论 -
【大数据Java基础- Java并发 06】Java内存模型之重排序
在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件:在单线程环境下不能改变程序运行的结果; 存在数据依赖关系的不允许重排序如果看过LZ上篇博客的就会知道,其实这两点可以归结于一点:无法通过happens-before原则推导出来的,JMM允许任意的排序。as-if-serial语义as-if-serial语义的意思是,所有的操作均可以为了优化而被重排序,但是你必须要保证重排序后执行的结果不能被改变,编译器、原创 2021-10-27 23:28:38 · 317 阅读 · 0 评论 -
【大数据Java基础- JVM 20】垃圾回收(四)垃圾回收器 (一)
1. GC分类与性能指标垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经产生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。1.1 GC分类1.按线程数(垃圾回收的线程)分可以分为串行垃圾回收器和并行垃圾回收器。串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束。在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别原创 2021-10-25 19:30:34 · 358 阅读 · 0 评论 -
【大数据Java基础-Java基础03】环境搭建(三) 搭建Java编译环境(树莓派)
安装需求1.JDK的安装2.PI4J的安装JDK的安装1.首先到JDK的官网:https://www.oracle.com/technetwork/java/javase/downloads/index.html2.在这里我们需要看看自己的系统是多少位的:getconf LONG_BIT,比如我这里的就是32的系统3.在JDK选择的上我们选择Java SE 8u221版本就可以了,至于最高版本我也没试验过,不知道可不可以。根据刚刚的自己的系统版本然后来选择下载,当然你也可以使用wg.原创 2021-10-20 23:37:11 · 346 阅读 · 0 评论 -
【大数据Java基础-JAVA 面向对象21】属性的赋值顺序
①默认初始化②显式初始化/⑤在代码块中赋值③构造器中初始化④有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值执行的先后顺序:① - ② / ⑤ - ③ - ④package atguigu.basic.day14.java3;/* * 对属性可以赋值的位置: * ①默认初始化 * ②显式初始化/⑤在代码块中赋值 * ③构造器中初始化* ④有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值 * * * 执行的先后顺序:① - ② / ⑤原创 2021-10-25 01:24:52 · 383 阅读 · 0 评论 -
【大数据Java基础-JAVA 数据结构04】java常用类(四)比较器以及其他类
比较器1.Java比较器的使用背景:Java中的对象,正常情况下,只能进行比较:== 或 != 。不能使用 > 或 < 的但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。如何实现?使用两个接口中的任何一个:Comparable 或 Comparator2.自然排序:使用Comparable接口2.1 说明1.像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象大小的方式。2.像Str原创 2021-10-24 20:10:22 · 350 阅读 · 0 评论 -
【大数据Java基础-JAVA 面向对象11】关键字(二):package/import
1.1 使用说明:* 1.为了更好的实现项目中类的管理,提供包的概念* 2.使用package声明类或接口所属的包,声明在源文件的首行* 3.包,属于标识符,遵循标识符的命名规则、规范(xxxyyyzzz)、“见名知意”* 4.每"."一次,就代表一层文件目录。1.2 举例:举例一:某航运软件系统包括:一组域对象、GUI和reports子系统举例二:MVC设计模式1.3 JDK中的主要包介绍:2. import的使用:import:导入1. 在源文件中..原创 2021-10-24 23:36:51 · 301 阅读 · 0 评论 -
【大数据Java基础- Java并发 05】J.U.C之并发工具类:Exchanger
Exchange是最简单的也是最复杂的,简单在于API非常简单,就一个构造方法和两个exchange()方法,最复杂在于它的实现是最复杂的(反正我是看晕了的)。在API是这么介绍的:可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象。Exchanger 可能被视为 SynchronousQueue 的双向形式。Exchanger 可能在应用程序(比如遗传算法和管道设计)中很有用。Exchanger,原创 2021-10-27 23:23:50 · 312 阅读 · 0 评论 -
【大数据Java基础-JAVA 数据结构09】Collection子接口:List接口
1. 存储的数据特点:存储序的、可重复的数据。2. 常用方法:(记住)增:add(Object obj)删:remove(int index) / remove(Object obj)改:set(int index, Object ele)查:get(int index)插:add(int index, Object ele)长度:size()遍历:① Iterator迭代器方式② 增强for循环③ 普通的循环3. 常用实现类:|----Collection接口:单列集合,原创 2021-10-24 20:23:41 · 303 阅读 · 0 评论 -
【大数据Java基础-JAVA 面向对象23】关键字:abstract以及模板方法的设计模式
abstractabstract: 抽象的1.可以用来修饰:类、方法2.具体的:abstract修饰类:抽象类> 此类不能实例化> 抽象类中一定有构造器,便于子类实例化时调用(涉及:子类对象实例化的全过程)> 开发中,都会提供抽象类的子类,让子类对象实例化,完成相关的操作 --->抽象的使用前提:继承性abstract修饰方法:抽象方法> 抽象方法只方法的声明,没方法体> 包含抽象方法的类,一定是一个抽象类。反之,抽象类中可以没有抽象方法的。&g原创 2021-10-25 01:36:47 · 322 阅读 · 0 评论 -
【大数据Java基础- JVM 19】垃圾回收(三)垃圾回收相关概念
1. System.gc()的理解1.在默认情況下,通过System.gc()或者Runtime. getRuntime().gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。2.然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(仅仅是提醒垃圾回收,会不会回收不一定)。3.JVM实现者可以通过System.gc()调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动触发,否则就太过于麻烦了。在一原创 2021-10-25 19:25:55 · 323 阅读 · 0 评论 -
【大数据Java基础-JAVA 面向对象03】类成员(一)类结构 属性
类的设计中,两个重要结构之一:属性对比:属性 vs 局部变量1.相同点:1.1 定义变量的格式:数据类型 变量名 = 变量值1.2 先声明,后使用1.3 变量都其对应的作用域2.不同点:2.1 在类中声明的位置的不同属性:直接定义在类的一对{}内局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量2.2 关于权限修饰符的不同属性:可以在声明属性时,指明其权限,使用权限修饰符。常用的权限修饰符:private、public、缺省、protected .原创 2021-10-24 22:36:01 · 305 阅读 · 0 评论 -
【大数据Java基础-JAVA 面向对象22】关键字(四):final
final:最终的1.可以用来修饰:类、方法、变量2.具体的:2.1 final 用来修饰一个类:此类不能被其他类所继承。比如:String类、System类、StringBuffer类2.2 final 用来修饰方法:表明此方法不可以被重写比如:Object类中getClass();2.3 final 用来修饰变量:此时的"变量"就称为是一个常量1. final修饰属性:可以考虑赋值的位置:显式初始化、代码块中初始化、构造器中初始化2. final修饰局部变量:尤其是使用f.原创 2021-10-25 01:30:29 · 342 阅读 · 0 评论 -
【大数据Java基础-JAVA 面向对象25】内部类:类的第五个成员
内部类:类的第五个成员1.定义:Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类.2.内部类的分类:成员内部类(静态、非静态 ) vs 局部内部类(方法内、代码块内、构造器内)3.成员内部类的理解:一方面,作为外部类的成员:>调用外部类的结构>可以被static修饰>可以被4种不同的权限修饰另一方面,作为一个类:> 类内可以定义属性、方法、构造器等> 可以被final修饰,表示此类不能被继承。言外之意,不使用f..原创 2021-10-25 01:44:12 · 286 阅读 · 0 评论 -
【大数据Java基础-JAVA 面向对象26】枚举类的使用
1. 枚举类的说明:1.枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类2.当需要定义一组常量时,强烈建议使用枚举类3.如果枚举类中只一个对象,则可以作为单例模式的实现方式。2. 如何自定义枚举类?步骤://自定义枚举类class Season{ //1.声明Season对象的属性:private final修饰 private final String seasonName; private final String seasonDesc;原创 2021-10-25 01:47:25 · 319 阅读 · 0 评论 -
【大数据Java基础-JAVA 面向对象24】interface:接口
interface:接口1.使用说明:1.接口使用interface来定义2.Java中,接口和类是并列的两个结构3.如何定义接口:定义接口中的成员3.1 JDK7及以前:只能定义全局常量和抽象方法>全局常量:public static final的.但是书写时,可以省略不写3.2 JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法(略4. 接口中不能定义构造器的!意味着接口不可以实例化5. Java开发中,接口通过让类去实现(implements)的方式原创 2021-10-25 01:41:16 · 313 阅读 · 0 评论 -
【大数据Java基础-JAVA 数据结构12】Collections工具类的使用
Collections工具类1.作用:操作Collection和Map的工具类2.常用方法:reverse(List):反转 List 中元素的顺序shuffle(List):对 List 集合元素进行随机排序sort(List):根据元素的自然顺序对指定 List 集合元素升序排序sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序swap(List,int, int):将指定 list 集合中的 i 处元素和 j 处元素进原创 2021-10-24 20:31:43 · 308 阅读 · 0 评论 -
【大数据Java基础- Java并发 04】J.U.C之Java并发容器:ConcurrentSkipListMap
到目前为止,我们在Java世界里看到了两种实现key-value的数据结构:Hash、TreeMap,这两种数据结构各自都有着优缺点。1.Hash表:插入、查找最快,为O(1);如使用链表实现则可实现无锁;数据有序化需要显式的排序操作。2.红黑树:插入、查找为O(logn),但常数项较小;无锁实现的复杂性很高,一般需要加锁;数据天然有序。然而,这次介绍第三种实现key-value的数据结构:SkipList。SkipList有着不低于红黑树的效率,但是其原理和实现的复杂度要比红黑树简单多了。S原创 2021-10-27 20:13:07 · 308 阅读 · 0 评论 -
【大数据Java基础- Java并发 03】J.U.C之阻塞队列:SynchronousQueue
作为BlockingQueue中的一员,SynchronousQueue与其他BlockingQueue有着不同特性:SynchronousQueue没有容量。与其他BlockingQueue不同,SynchronousQueue是一个不存储元素的BlockingQueue。每一个put操作必须要等待一个take操作,否则不能继续添加元素,反之亦然。 因为没有容量,所以对应 peek, contains, clear, isEmpty … 等方法其实是无效的。例如clear是不执行任何操作的,cont原创 2021-10-27 02:47:32 · 388 阅读 · 0 评论 -
【大数据Java基础-JAVA 数据结构07】Collection接口
1.单列集合框架结构|----Collection接口:单列集合,用来存储一个一个的对象* |----List接口:存储序的、可重复的数据。 -->“动态”数组* |----ArrayList、LinkedList、Vector** |----Set接口:存储无序的、不可重复的数据 -->高中讲的“集合”* |----HashSet、LinkedHashSet、TreeSet对应图示:2.Collection接口常用方法:add(Obje原创 2021-10-24 20:17:58 · 356 阅读 · 0 评论 -
【大数据Java基础- Java并发 14】J.U.C之阻塞队列:LinkedBlockingDeque
前面的BlockingQueue都是单向的FIFO队列,而LinkedBlockingDeque则是一个由链表组成的双向阻塞队列,双向队列就意味着可以从对头、对尾两端插入和移除元素,同样意味着LinkedBlockingDeque支持FIFO、FILO两种操作方式。LinkedBlockingDeque是可选容量的,在初始化时可以设置容量防止其过度膨胀,如果不设置,默认容量大小为Integer.MAX_VALUE。LinkedBlockingDequeLinkedBlockingDeque 继承原创 2021-10-29 02:32:52 · 369 阅读 · 0 评论 -
【大数据Java基础-Java基础11】流程控制(四)补充:Scanner类的使用
/*如何从键盘获取不同类型的变量:需要使用Scanner类具体实现步骤:1.导包:import java.util.Scanner;2.Scanner的实例化:Scanner scan = new Scanner(System.in);3.调用Scanner类的相关方法(next() / nextXxx()),来获取指定类型的变量注意:需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时,会报异常:InputMisMatchException导致程序终止。*.原创 2021-10-24 11:36:01 · 358 阅读 · 0 评论 -
【大数据Java基础-JAVA 面向对象02】JVM内存结构
编译完源程序以后,生成一个或多个字节码文件。我们使用JVM中的类的加载器和解释器对生成的字节码文件进行解释运行。意味着,需要将字节码文件对应的类加载到内存中,涉及到内存解析。《JVM规范》虚拟机栈,即为平时提到的栈结构。我们将局部变量存储在栈结构中堆,我们将new出来的结构(比如:数组、对象)加载在对空间中。补充:对象的属性(非static的)加载在堆空间中。方法区:类的加载信息、常量池、静态域堆(Heap),此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这原创 2021-10-24 22:28:43 · 327 阅读 · 0 评论 -
【大数据Java基础-Java基础14】数组(三) 二维数组
1.如何理解二维数组?数组属于引用数据类型数组的元素也可以是引用数据类型一个一维数组A的元素如果还是一个一维数组类型的,则,此数组A称为二维数组。2.二维数组的声明与初始化正确的方式: int[] arr = new int[]{1,2,3};//一维数组 //静态初始化 int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}}; //动态初始化1 String[][] arr2 = new String[3][2]; //原创 2021-10-24 19:26:22 · 310 阅读 · 0 评论 -
【大数据Java基础- Java并发 09】J.U.C之并发工具类:CountDownLatch
此篇博客所有源码均来自JDK 1.8在上篇博客中介绍了Java四大并发工具一直的CyclicBarrier,今天要介绍的CountDownLatch与CyclicBarrier有点儿相似。CyclicBarrier所描述的是“允许一组线程互相等待,直到到达某个公共屏障点,才会进行后续任务",而CountDownLatch所描述的是”在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待“。在API中是这样描述的:用给定的计数 初始化 CountDownLatch。由于调用了 .原创 2021-10-28 00:12:43 · 285 阅读 · 0 评论 -
【大数据Java基础- JVM 22】垃圾回收(六)垃圾回收器 (三)
4. GC日志分析4.1 日志分析1.通过阅读GC日志,我们可以了解Java虚拟机内存分配与回收策略。2.内存分配与垃圾回收的参数列表-XX:+PrintGC:输出GC日志。类似-verbose: gc3.-XX: +PrintGCDetails输出GC的详细日志4.-XX:+ PrintGCTimeStamps输出GC的时间戳(以基准时间的形式)5.-XX:+ PrintGCDateStamps输出GC的时间戳(以日期的形式,如2013-0504m21:53:...原创 2021-10-25 19:50:27 · 527 阅读 · 0 评论 -
【大数据Java基础-JAVA 面向对象06】类成员(二)类结构 方法(三) JAVA的值传递机制
java的值传递机制1.针对于方法内变量的赋值举例:System.out.println("***********基本数据类型:****************");int m = 10;int n = m;System.out.println("m = " + m + ", n = " + n);n = 20;System.out.println("m = " + m + ", n = " + n);System.out.println("***********引用数据类型:*****原创 2021-10-24 23:01:04 · 284 阅读 · 0 评论 -
【大数据Java基础- Java并发 19】J.U.C之Condition
在没有Lock之前,我们使用synchronized来控制同步,配合Object的wait()、notify()系列方法可以实现等待/通知模式。在Java SE5后,Java提供了Lock接口,相对于Synchronized而言,Lock提供了条件Condition,对线程的等待、唤醒操作更加详细和灵活。下图是Condition与Object的监视器方法的对比(摘自《Java并发编程的艺术》):Condition提供了一系列的方法来对阻塞和唤醒线程:await() :造成当前线程在接到信号或被.原创 2021-11-03 00:52:48 · 347 阅读 · 0 评论 -
【大数据Java基础- JVM 12】运行时数据区(七)对象的实例化内存布局与访问定位
1. 对象的实例化1.1 创建对象的方式new最常见的方式 变形1 : Xxx的静态方法 变形2 : XxBuilder/XxoxFactory的静态方法Class的newInstance():反射的方式,只能调用空参的构造器,权限必须是public Constructor的newInstance(Xxx):反射的方式,可以调用空参、带参的构造器,权限没有要求 使用clone():不调用任何构造器,当前类需要实现Cloneable接口,实现clone() 使用反序列化:从文件中、从网络原创 2021-10-25 17:51:31 · 314 阅读 · 0 评论 -
【大数据Java基础- JVM 15】执行引擎
1. 执行引擎概述1.1 执行引擎1.2 概述1.执行引擎是Java虚拟机的核心组成部分之一。2.虚拟机是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。3.JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等原创 2021-10-25 18:11:51 · 318 阅读 · 0 评论 -
【大数据Java基础-Java基础08】 流程控制(一)分支结构
if(条件表达式){执行表达式}结构二:二选一if(条件表达式){执行表达式1}else{执行表达式2}结构三:n选一if(条件表达式){执行表达式1}else if(条件表达式){执行表达式2}else if(条件表达式){执行表达式3}...else{执行表达式n}1.2.说明:1. else 结构是可选的。2. 针对于条件表达式:> 如果多个条件表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句声明在上面还是下面,无所谓。&g原创 2021-10-24 11:25:19 · 313 阅读 · 0 评论 -
【大数据Java基础-JAVA 数据结构08】Iterator接口与foreach循环
1.遍历Collection的两种方式:使用迭代器Iterator foreach循环(或增强for循环)2.java.utils包下定义的迭代器接口:Iterator2.1说明:Iterator对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素。GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生。2.2作用:遍历集合Collectiton元素2.3如何获取原创 2021-10-24 20:20:20 · 401 阅读 · 0 评论 -
【大数据Java基础-Java基础02】环境搭建(二) 搭建Java编译环境(linux系统)
jdk安装配置首先下载JDK和JRE,这里你的需要看看你的Linux系统是多少位的,比如我的是64位的:下载JDK并指定到Download目录,JRE同样操作:解压并且配置环境:tar -zxvf jdk9.0 //解压命令配置环境:vi /etc/profileJAVA_HOME=/usr/local/java/jdk9.0 #jdk存放位置JRE_HOME=/usr/local/java/jre9.0 #jre存放位置PATH=$PATH:$JRE原创 2021-10-20 23:33:32 · 382 阅读 · 0 评论 -
【大数据Java基础- JVM 17】垃圾回收(一)简述
1. 什么是垃圾1.1 C++与Java1.2 概述1.垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。2.关于垃圾收集有三个经典问题哪些内存需要回收? 什么时候回收? 如何回收?3.垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断的演进中,不同大小的设备、不同特征的应用场景,对垃圾收集提出了新的挑战,这当然也原创 2021-10-25 18:38:05 · 457 阅读 · 0 评论 -
【大数据Java基础- Java并发 08】Java内存模型之happens-before
由于存在线程本地内存和主内存的原因,再加上重排序,会导致多线程环境下存在可见性的问题。那么我们正确使用同步、锁的情况下,线程A修改了变量a何时对线程B可见?我们无法就所有场景来规定某个线程修改的变量何时对其他线程可见,但是我们可以指定某些规则,这规则就是happens-before,从JDK 5 开始,JMM就使用happens-before的概念来阐述多线程之间的内存可见性。在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须存在happens-before关系。原创 2021-10-28 00:02:23 · 321 阅读 · 0 评论