Java 与 JVM (25)

Java 基础、集合、反射、并发、JVM、GC 与排障相关内容。

推荐阅读顺序

  1. Java虚拟机(JVM)你只要看这一篇就够了!(1)

    1. Java 内存区域与内存溢出异常 1.1 运行时数据区域 根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。 1.1.1 程序计数器 内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理...

  2. Java虚拟机(JVM)你只要看这一篇就够了!垃圾回收器(2)

    2.5 垃圾回收器 收集算法是内存回收的理论,而垃圾回收器是内存回收的实践。 说明:如果两个收集器之间存在连线说明他们之间可以搭配使用。 2.5.1 Serial 收集器 这是一个单线程收集器。意味着它只会使用一个 CPU 或一条收集线程去完成收集工作,并且在进行垃圾回收时必须暂停其它所有的工作线程直到收集结束。 2....

  3. LocalDateTime操作

    1.LocalDateTime时间转换 import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; ​ public class DateTimeConversionExample { public static void mai...

  4. java内省机制与反射机制的区别

    概念上的区别 反射是在运行状态把Java类中的各种成分映射成相应的Java类,可以动态的获取所有的属性以及动态调用任意一个方法,强调的是运行状态。 内省(IntroSpector) 是Java 语言对 JavaBean(简称VO)类属性、事件的一种缺省处理方法。内省机制是通过反射来实现。例如类User中有属性name,...

  5. Java反射生成对象

    想要了解反射生成class和创建java对象,首先我们要了解什么是反射? 一、什么是反射? Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制。 二、反射生成Class的...

  6. Java 逐行读取文本文件的几种方式以及效率对比

    先放结果 1000000 行文本读取结果比对: BufferedReader 耗时: 49ms Scanner 耗时: 653ms Apache Commons IO 耗时: 44ms InputStreamReader 耗时: 191ms FileInputStream 耗时: 3171ms BufferedInpu...

  7. 线程流转状态图

    新建状态(New): 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。 就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。处于就绪状态的线程,随时可...

  8. 关于Mono和Flux的理解

    关于java的响应式编程框架 SpringReactor 关于Reactor的介绍 Reactor是Spring中的一个子项目是一个基于java的响应式编程框架,此框架是 Pivotal 公司(开发 Spring 等技术的公司)开发的,实现了 Reactive Programming(反应式编程即响应式编程) 思想,符...

Java虚拟机(JVM)你只要看这一篇就够了!(1)

1. Java 内存区域与内存溢出异常 1.1 运行时数据区域 根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。 1.1.1 程序计数器 内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理...

Java虚拟机(JVM)你只要看这一篇就够了!垃圾回收器(2)

2.5 垃圾回收器 收集算法是内存回收的理论,而垃圾回收器是内存回收的实践。 说明:如果两个收集器之间存在连线说明他们之间可以搭配使用。 2.5.1 Serial 收集器 这是一个单线程收集器。意味着它只会使用一个 CPU 或一条收集线程去完成收集工作,并且在进行垃圾回收时必须暂停其它所有的工作线程直到收集结束。 2....

LocalDateTime操作

1.LocalDateTime时间转换 import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; ​ public class DateTimeConversionExample { public static void mai...

java内省机制与反射机制的区别

概念上的区别 反射是在运行状态把Java类中的各种成分映射成相应的Java类,可以动态的获取所有的属性以及动态调用任意一个方法,强调的是运行状态。 内省(IntroSpector) 是Java 语言对 JavaBean(简称VO)类属性、事件的一种缺省处理方法。内省机制是通过反射来实现。例如类User中有属性name,...

Java反射生成对象

想要了解反射生成class和创建java对象,首先我们要了解什么是反射? 一、什么是反射? Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制。 二、反射生成Class的...

线程流转状态图

新建状态(New): 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。 就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。处于就绪状态的线程,随时可...

关于Mono和Flux的理解

关于java的响应式编程框架 SpringReactor 关于Reactor的介绍 Reactor是Spring中的一个子项目是一个基于java的响应式编程框架,此框架是 Pivotal 公司(开发 Spring 等技术的公司)开发的,实现了 Reactive Programming(反应式编程即响应式编程) 思想,符...

jvm调优(堆溢出和调优参数)

内存溢出和内存泄漏的区别: 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。 内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄...

Java垃圾回收期Cms和G1梳理

目录 1 CMS收集器 安全点(Safepoint) 安全区域 2 G1收集器 卡表(Card Table) 在开始介绍CMS和G1前,我们可以剧透几点: 根据不同分代的特点,收集器可能不同。有些收集器可以同时用于新生代和老年代,而有些时候,则需要分别为新生代或老年代选用合适的收集器。一般来说,新生代收集器的收集频率较...

JVM指令手册

栈和局部变量操作 将常量压入栈的指令 aconst null 将null对象引用压入栈 iconst m1 将int类型常量 1压入栈 iconst 0 将int类型常量0压入栈 iconst 1 将int类型常量1压入栈 iconst 2 将int类型常量2压入栈 iconst 3 将int类型常量3压入栈 icon...

Java多线程中锁的理解与使用

1.简介 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等 ) 。 2.Java锁的种类 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 上面是很多锁的名词,这些分类并不...

Centos7时间和java获取时间不一致

问题描述 遇到一个问题,web显示的时间比服务器时间快12小时。Tomcat和MySQL安装在同一台服务器,系统是centos7,且服务器时间和MySQL时间一致,均是当前北京时间。 解决思路 1、在程序中使用java的函数设定时区。 2、在启动java程序时加参数 Duser.timezone=GMT+8 3、修改/...

java触发gc的条件和时机

1.什么时候触发GC        (1)程序调用System.gc时可以触发,也不是立即触发,只是发了个通知要触发,时机由jvm自己把握        (2)系统自身来决定GC触发的时机(根据Eden区和From Space区的...

javap分析java汇编指令

一、javap命令简述 javap是jdk自带的反解析工具。它的作用就是根据class字节码文件,反解析出当前类对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息。 当然这些信息中,有些信息(如本地变量表、指令和代码行偏移量映射表、常量池中方法的参数名称等等)需要在使用javac编译成...

IO多路复用机制详解

服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: 一. 同步阻塞IO(Blocking IO):即传统的IO模型。 二. 同步非阻塞IO(Non blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非J...

js京东全民养红包一步完成

京东喜迎双十一 这个活动和天猫的活动几乎可以说很像了,都是浏览商家店铺获取金币, 可是这样进度太慢了。于是浏览的大佬的贴子,终于找到可以一键完成养红包的所有任务了。 使用步骤 一、打开谷歌浏览或者火狐也浏览也行(支持开发者模式),按 F12 进入,切换手机模式如图: 738 x 395 1366 x 732 二、进入京...

java解决Hash碰撞冲突方法总结

1.什么是hash碰撞 对象Hash的前提是实现equals()和hashCode()两个方法,那么HashCode()的作用就是保证对象返回唯一hash值,但当两个对象计算值一样时,这就发生了碰撞冲突。如下将介绍如何处理冲突,当然其前提是一致性hash。 为什么hashcode会相同? hashCode是所有java...

如何定位java进程中使用最耗内存的进程

1.清除进程和线程的关系 2.知道linux查看进程对应线程的命令 查看进程命令 ps ef grep java 查看进程对应线程命令 top Hp <pid> 找到最大线程的pid号 3.打印堆栈信息 jstack <pid> jstack 里面存的是16进制的数字。所以需要把十进制转换为16...

Lists.transform的使用和采坑

Lists.transform的使用 Lists.transform:能够轻松的从一种类型的list转换为另一种类型的list。 Map<String,String> map = Maps.newHashMap(); map.put("a","testa"); map.put("b","test2"); m...