GC详解及Minor GC和Full GC触发条件总结

GC,即就是Java垃圾回收机制。目前主流的JVM(HotSpot)采用的是分代收集算法。与C++不同的是,Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用。即:从gcroot开始,把所有可以搜索得到的对象标记为存活对象。 GC机制 要准确理解Java的垃圾回收机制,就要从...

2019-03-26 21:42:19

阅读数 23

评论数 0

什么是java OOM?如何分析及解决oom问题?

最近查找了很多关于OOM,甚至于Java内存管理以及JVM的相关资料,发现这方面的东西太多了,竟有一种眼花缭乱的感觉,要想了解全面的话,恐非一篇文章能说清的,因此按照自己的理解整理了一篇,剩下的还需要继续学习。 1)什么是OOM?OOM,全称“Out Of Memory”,翻译成中文就是“内存用...

2019-03-23 12:23:58

阅读数 41

评论数 0

74 Java 对象在内存中状态

2019-03-23 12:09:32

阅读数 6

评论数 0

JAVA中类、实例与Class对象

类 类是面向对象编程语言的一个重要概念,它是对一项事物的抽象概括,可以包含该事物的一些属性定义,以及操作属性的方法。面向对象编程中,我们都是以类来编码。 实例 简单理解,就是new,就是对类的实例化,创建这个类对应的实际对象,类只是对事物的描述,而实例化就相当于为这个描述新开辟了一...

2019-03-22 14:29:41

阅读数 34

评论数 0

java 中定位高cpu的线程

(3)定位 CPU 高的线程打印其 nid 查看线程下具体进程信息的命令如下: top -H -p 6735 top - 14:20:09 up 611 days, 2:56, 1 user, load average: 13.19, 7.76, 7.82 Threads: 6991...

2019-03-18 09:01:49

阅读数 21

评论数 0

Java 自定义 ClassLoader 实现 JVM 类加载

定义需要加载的类 为了能够实现类加载,并展示效果,定义一个Hello类,再为其定义一个sayHello()方法,加载Hello类之后,调用它的sayHello()方法。 public class Hello { public static void sayHello(){ ...

2019-03-10 20:34:06

阅读数 8

评论数 0

类加载发生的时机是什么时候?

虚拟机严格规定,有且仅有 5 种情况必须对类进行加载: 注意,有些文章会称为对类进行“初始化”。 1、遇到new、getstatic、putstatic、invokestatic这四条字节码指令时,如果类还没进行初始化,则需要先触发其初始化。 2、使用java.lang.reflect包...

2019-03-10 17:35:45

阅读数 15

评论数 0

触发JVM进行Full GC的情况及应对策略

堆内存划分为 Eden、Survivor 和 Tenured/Old 空间,如下图所示: 从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,对老年代GC称为Major GC,而Full GC是对整个堆来说的,在最近几个版本的JDK里默认包括了对永生带...

2019-03-10 17:31:06

阅读数 13

评论数 0

Java并发编程:synchronized和锁优化

1. 使用方法 synchronized 是 java 中最常用的保证线程安全的方式,synchronized 的作用主要有三方面: 确保线程互斥的访问代码块,同一时刻只有一个方法可以进入到临界区 保证共享变量的修改能及时可见 有效解决重排序问题 语义上来讲,synchronized主要有...

2019-03-10 11:22:18

阅读数 11

评论数 0

Java GC、新生代、老年代、gc日志分析

1、堆内存 Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。 在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survi...

2019-03-08 00:10:51

阅读数 34

评论数 0

Java方法区和永久代

目前有三大Java虚拟机:HotSpot,oracle JRockit,IBM J9。 JRockit是oracle发明的,用于其WebLogic服务器,IBM JVM是IBM发明的用于其Websphere服务器(所以在某行开发的时候,他们用的是IBM的JDK,因为他们使用的IBM的应用程序服务...

2019-03-08 00:09:56

阅读数 24

评论数 0

JVM中的直接引用和符号引用

在JVM中,类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。而解析阶段即是虚拟机将常量池内的符号引用替换为直接引用的过程。 1.符号引用(Symbolic References):符号引用以一组符号来描述所引用的目标,符号...

2019-03-07 23:55:56

阅读数 10

评论数 0

如何选择合适的 GC 时间 —— USER, SYS, REAL理解

在 GC 日志文件中,每个 GC 事件有三种类型的时间: user sys real 例如: [Times: user=11.53 sys=1.38, real=1.03 secs]. 在我们开始分析 GC 日志的时候,会遇到两个问题: 1、user、sys...

2019-03-07 23:43:43

阅读数 66

评论数 0

从 synchronized 到 CAS 和 AQS - 彻底弄懂 Java 各种并发锁

概述 Java 中的并发锁大致分为隐式锁和显式锁两种。隐式锁就是我们最常使用的 synchronized 关键字,显式锁主要包含两个接口:Lock 和 ReadWriteLock,主要实现类分别为 ReentrantLock 和 ReentrantReadWriteLock,这两个类都是基于 A...

2019-01-22 10:23:03

阅读数 574

评论数 0

volatile 的内部如何实现的

反汇编Java字节码,查看汇编层面对volatile关键字做了什么 有了上面的理论基础,我们可以研究volatile关键字到底是如何实现的。首先写一段简单的代码: 1 /** 2 * @author 五月的仓颉http://www.cnblogs.com/xrq730/p/7048...

2019-01-22 08:45:51

阅读数 98

评论数 1

happens-before

3.有序性   在Java内存模型中,允许编译器和处理器对指令进行重排序,但是重排序过程不会影响到单线程程序的执行,却会影响到多线程并发执行的正确性。   在Java里面,可以通过volatile关键字来保证一定的“有序性”(具体原理在下一节讲述)。另外可以通过synchronized和Loc...

2019-01-22 08:35:18

阅读数 35

评论数 0

synchronized 关键字原理

synchronized 关键字原理 众所周知 synchronized 关键字是解决并发问题常用解决方案,有以下三种使用方式: 同步普通方法,锁的是当前对象。 同步静态方法,锁的是当前 Class 对象。 同步块,锁的是 () 中的对象。 实现原理: JVM 是通过进入、退出对象监视器(...

2019-01-15 08:35:46

阅读数 13

评论数 0

jvm 中的参数

我们前面说了很多原理,现在我们就开始实战,说一下JVM的调优参数: 一般情况JVM调优参数如下: set JAVA_OPTS=-server -Xms1400M -Xmx1400M -Xmn768M -Xss128k -XX:PermSize=256M -XX:MaxPermSize=256M...

2018-12-30 17:44:50

阅读数 33

评论数 0

java idea如何线上debug

      1 建立一个remote 项目 2 ip 填入远程的机器   3 端口进行查看 ,catalina.sh   4 选择自己的模块;   下面表示成功       参数解释 -agentlib:jdwp=transport=dt_socket,serve...

2018-12-05 10:27:30

阅读数 233

评论数 0

java full gc coredump visualVm分析出对应的未释放的对象

1 首先要了解在java、jvm中 什么是内存泄漏的问题,下面的一张图帮助你理解 2 主要分析出 大对象的引用 就可以了(可以自己想象成 c++ 中类似指针和引用);然后在程序中找出对应的对象,分析出为什么没有掉入到 jvm回收池子中        ...

2018-11-23 12:48:49

阅读数 48

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭