文章分类 -  java核心

摘要:OOM,Out Of Memory,内存溢出,发生内存溢出是会导致JVM挂掉的。 在我们启动JVM的时候,指定了一些内存参数,JVM内存大小是有限的,如果不停地往里面放东西,那么在一定情况下就会发生OOM。 那我们具体来看一看哪些区域会发生OOM,以及分别在什么条件下会发生OOM。 JVM内存区域可 阅读全文
posted @ 2023-02-27 11:07 木木林2022 阅读(346) 评论(0) 推荐(0)
摘要:Jstat可以了解到JVM的运行状况,而jstat –gc更是可以摸清JVM GC相关状况。而jmap、jhat搭配使用,可以帮助我们观察JVM中的对象分布。 Jmap –heap PID:这个命令可以打印一个堆的摘要信息,包括使用的GC算法、堆配置信息、各个内存区域的使用信息等: Jmap –hi 阅读全文
posted @ 2023-02-27 11:03 木木林2022 阅读(25) 评论(0) 推荐(0)
摘要:要摸清JVM的运行状况,最有用的方式之一,就是使用jstat命令。 首先通过jps可以找到你想要的java进程对应的PID,然后执行jstat –gc PID,就可以看到这个Java进程(其实本质是一个JVM)的内存和GC情况了: 运行jstat –gc PID之后,会看到如下列,给大家解释一下: 阅读全文
posted @ 2023-02-27 11:02 木木林2022 阅读(28) 评论(0) 推荐(0)
摘要:要查看gc日志,那么首先得把gc日志进行输出,在JVM启动的时候添加参数: -XX:+PrintGCDetails 打印GC日志细节 -XX:+PrintGCTimeStamps 打印GC日志时间 -Xloggc:gc.log 将GC日志输出到指定的磁盘文件上去,这里会把gc.log输出到项目根路径 阅读全文
posted @ 2023-02-27 10:47 木木林2022 阅读(490) 评论(0) 推荐(0)
摘要:什么是JVM优化?JVM里面有类加载器、执行引擎等东西,不是我们关心的,我们就关心JVM中的内存区域划分,也就是说,所谓的JVM优化主要关注的是:内存。 JVM优化只关注两个方面,第一个方面就是避免频繁Full GC,第二个方面就是避免OOM。 避免频繁Full GC: 我们都知道GC是需要stop 阅读全文
posted @ 2023-02-27 10:29 木木林2022 阅读(129) 评论(0) 推荐(0)
摘要:STOP THE WORLD问题:所谓”stop the world”说的意思是,在垃圾回收线程进行垃圾回收的过程中,必须暂停JVM的所有其他工作线程。为什么呢?因为这样可以保证在进行垃圾回收的过程中不再有新的垃圾产生。以新生代的垃圾回收来进行举例: 当Eden区满了之后,要把Eden区和其中一个S 阅读全文
posted @ 2023-02-27 10:24 木木林2022 阅读(157) 评论(0) 推荐(0)
摘要:老年代采用的是什么垃圾回收器算法?老年代中的对象存活时间比较久,每次垃圾回收之后,存活对象比较多,而需要回收的垃圾对象比较少,所以适合采用标记-清除、标记-整理算法。无论是标记-清除还是标记-整理,都有一个阶段是清除垃圾对象,垃圾对象越少则执行效率越高。 对象是如何进入老年代的?对象年龄够了之后:前 阅读全文
posted @ 2023-02-27 10:02 木木林2022 阅读(173) 评论(0) 推荐(0)
摘要:为什么要有JVM分代模型?JVM中的对象生命周期不同,有的对象长期存在,而有的对象朝生夕死,对象生命周期的不同直接导致了进行垃圾回收时存活对象比例不同,而存活对象比例不同就导致需要使用不同的垃圾回收算法:当对象存活比例高时,应该采用标记-清除、标记-整理算法;当对象存活比例低时,采用复制算法更合理。 阅读全文
posted @ 2023-02-27 09:50 木木林2022 阅读(97) 评论(0) 推荐(0)
摘要:为什么要有垃圾回收机制?因为会有垃圾产生啊,可垃圾什么时候会产生呢?这就是涉及到运行时数据区的工作流程了: 当线程A在执行如下代码时: public void say(){ A a = new A(); } 此时对应于JVM运行时数据区发生的事情便是:a对象的引用放在了当前线程栈中的say()方法对 阅读全文
posted @ 2023-02-27 09:34 木木林2022 阅读(16) 评论(0) 推荐(0)
摘要:内存区域划分图: 方法区:存储类信息、常量、静态变量、JIT即时编译器编译后的代码。所有线程共享。 当JVM中的类加载器将一个类的.class文件加载到JVM内存时,是把这个.class信息加载到了方法区中,而.class内部记录的是字节码指令,线程要根据这样的字节码指令才能去进行具体工作,所以可以 阅读全文
posted @ 2023-02-24 15:47 木木林2022 阅读(44) 评论(0) 推荐(0)
摘要:场景:双十一、商品秒杀等 高并发实现的底层和多线程技术是密不可分的,所以必须要了解多线程、多线程里的锁和异步处理等细节,可能学完这些对高并发还是一头雾水 我们还需要知道“部署实施高并发”,即在服务上部署redis,nginx,kafka,甚至是集群,用组件来应对高并发,毕竟高并发毕竟不是单纯能靠写代 阅读全文
posted @ 2023-02-24 09:32 木木林2022 阅读(20) 评论(0) 推荐(0)
摘要:作为一名JAVA开发,虽然平时学习了很多关于线程安全的问题,但是你有没有思考这样一个问题:为什么平时开发过程中我们根本不需要管线程安全的问题呢? 我们的后台程序是同时面向很多用户的,通过Tomcat线程池,给每个访问的用户分配一个线程去执行我们的程序。既然是这样,那不就意味着同样的数据同时被多个线程 阅读全文
posted @ 2023-02-23 15:03 木木林2022 阅读(62) 评论(0) 推荐(0)
摘要:HashMap是日常开发中用到频率相当高的一种键值对处理的数据类型,1.8以后JDK对HashMap的底层进行了优化,引入了红黑树等的数据结构以及扩容的优化,本文着重介绍HashMap的各个子类,以及其使用场景 HashMap简单介绍 Java为数据结构中的映射定义了一个接口java.util.Ma 阅读全文
posted @ 2023-02-23 10:50 木木林2022 阅读(116) 评论(0) 推荐(0)
摘要:Map是一种依照键存储元素的容器。 在map中键可以是任意类型的对象。 map中不能有重复的键,每个键都有一个对应的值。 Map是一个集合,一种依照键(key)存储元素的容器,键(key)很像下标,在List中下标是整数。 Map的特点: 1.包含键(key)值(value)对 2.键(K)唯一 3 阅读全文
posted @ 2023-02-22 12:01 木木林2022 阅读(52) 评论(0) 推荐(0)
摘要:1. LinkedList和ArrayList的差别主要来自于Array和LinkedList数据结构的不同。ArrayList是基于数组实现的,LinkedList是基于双链表实现的。另外LinkedList类不仅是List接口的实现类,可以根据索引来随机访问集合中的元素,除此之外,LinkedL 阅读全文
posted @ 2023-02-22 11:48 木木林2022 阅读(176) 评论(0) 推荐(0)
摘要:一.数组的概念 数组是一种数据结构,用来存储同一类型的集合,也就是说数组包含的变量必须是相同类型! 二.创建数组 基本语法如下: //动态初始化 数据类型[] 数组名称 = new 数据类型 []{初始化数据}; //静态初始化数据类型[] 数组名称 = {初始化数据}; 代码示例 public c 阅读全文
posted @ 2023-02-21 12:14 木木林2022 阅读(107) 评论(0) 推荐(0)
摘要:一、数组 数组存储数据的特点: 有序、可重复。 缺点: 1、一旦初始化以后,其长度就不可以修改 2、数组中提供的方法十分有限,对于添加,删除,插入数据等操作时非常不便,同时效率不高 3、获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用 二、List集合 特点: 1.是一个有序的集合 (存 阅读全文
posted @ 2023-02-21 11:39 木木林2022 阅读(124) 评论(0) 推荐(0)
摘要:1、 数组(Arrary) 数组是一种线性结构的数据,连续的存储空间和相同的类型数据。查询速度快,但是数组的容量固定,无法扩容,只能存储同类型的数据,对于添加和删除元素比较慢 2、链表(Linked List) 链表是一种线性的链式结构,链表的内存不是连续的,前一个节点存储的地址不一定就是一个元素, 阅读全文
posted @ 2023-02-21 10:24 木木林2022 阅读(841) 评论(0) 推荐(0)
摘要:1、JDK所提供的所有流类位于java.io包中,都分别继承自以下四种抽象流类。 InputStream:继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位)。 OutputStream:继承自OutputStream的流都是程序用于向外输出数据的,且数据单位都是字 阅读全文
posted @ 2023-02-20 12:00 木木林2022 阅读(38) 评论(0) 推荐(0)
摘要:一、final关键字 在java这门编程语言中,final是一个关键字,它可以被用来修饰类,变量以及成员方法。 1. final修饰类 当final关键字修饰一个类,则该类会成为最终类,即该类不能被继承(俗称“断子绝孙类”),但是该类可以有父类。 2、final修饰成员变量:该成员变量必须在其所在类 阅读全文
posted @ 2023-02-19 15:24 木木林2022 阅读(63) 评论(0) 推荐(0)