java
xjjdlut
大数据技术爱好者,分享学习大数据技术过程中的心得和笔记
展开
-
深入浅出JVM之字节码执行
1.javap反汇编工具javap是jdk自带的反汇编工具,可以通过该命令查看编译后的class文件的常量池、字段以及方法等信息。对于下面的这个类:public class CalcCirc { public int doCalc() { int a=10; int b=20; int c=2; return (a+b)*c; }}使用javap -v CalcCi...原创 2020-04-13 08:28:56 · 477 阅读 · 0 评论 -
深入浅出JVM之Class文件结构
一、语言无关性jvm并不是只支持java语言,其他的语言如groovy,scala,ruby等,只要能够生产class文件,都可以在jvm上运行。最新版本的jvm上甚至还增加了一些新的指令,这些指令在java语言中无法使用,而在动态语言如groovy中才能使用。所以class文件才是jvm运行的基石。二、文件结构用二进制文件打开工具Notepad++或Winhex打开一个class文件,可以...原创 2020-04-09 14:49:17 · 262 阅读 · 0 评论 -
深入浅出JVM之锁及优化方法
一、线程安全当多个线程同时修改一个变量时会有线程安全问题,如果要保证这个变量时全局唯一进行修改,就需要给这个变量加锁,加锁后能够保证该变量的修改是串行进行的,因此该变量时线程安全的。但是需要牺牲一定的性能。比如ArrayList,该对象不是线程安全的,当线程A对该对象增加数据的时候,线程B也可以对该对象增加数据,当线程A的数组存储空间不足时会自动申请扩展空间,此时数据是不可用状态,而此时线程B...原创 2020-04-07 09:28:05 · 214 阅读 · 0 评论 -
深入浅出JVM之Java堆分析
一、内存溢出(OOM)的原因jvm中可能引起内存溢出的内存区域有堆、永久区、线程栈和直接内存。其中堆保存了所有的对象的内容,永久区保存对象的信息。这四个区域的内存空间得不到满足都有可能导致内存溢出。堆溢出由于对象不断的占用分配的空间,而这些对象的引用也没有及时的释放,堆的空间不断被占用,最终导致内存溢出。解决办法是增大堆空间,及时释放内存(减少对象被引用的时间)永久区由于系统中类的数量太...原创 2020-04-02 08:07:09 · 180 阅读 · 0 评论 -
深入浅出JVM之类装载器
class装载验证流程1.加载:这装载类的第一个阶段,取得类的二进制流,有三种方式,一个是直接从本地class文件获取,一个是从jar包中获取,一个是通过远程调用从网络获取类的二进制流。将类的内容(常量、字段和方法信息)转换为方法区的数据结构,然后在Java堆中生产对应的java.lang.Class对象。2.链接2.1验证: 保证Class二进制流的格式是否正确。...原创 2020-04-01 11:34:34 · 119 阅读 · 0 评论 -
深入浅出JVM之GC参数
一、堆的结构edens0s1tenured一个对象被创建后一般是会放在eden区的,但也有例外,比如局部变量会在栈上分配,超过一定阈值的大对象会直接放在老年代。s0和s1是幸存代,使用复制算法来复制对象,所以s0和s1的内存大小是一样的。当对象经过多次垃圾回收还存在的话就会被标记为老年对象,会将该对象放入到老年代(tenured)中。二、串行收集器最古老,...原创 2020-04-01 11:33:15 · 146 阅读 · 0 评论 -
深入浅出JVM之GC算法与种类
1.GC的概念Garbage Collection垃圾收集,在C或C++语言中,内存空间由程序员来释放,但是Java语言中程序员不会单独操作内存空间,所以内存释放需要由JVM来实现。在Java中,GC对象是堆空间和永久区。2.引用计数法老牌垃圾回收算法,通过计算对象的引用计数来标记对象是否是垃圾。该算法会为每个对象记录一下引用的次数,如果有一次引用就记录为1,如果有三次引用就标记为3,如果用...原创 2020-04-01 11:31:55 · 130 阅读 · 0 评论 -
深入浅出JVM之性能监控工具
一、系统性能监控linux操作系统中有很多命令可以查看应用程序的性能情况,下面介绍一下这些常用的命令:uptime:可以查看的信息有系统时间,运行时间,连接数-其中每一个终端算一个连接,1,5,15分钟内的系统平均负载,也就是运行队列中的平均进程数。这是一个操作系统级的命令,可以查看当前操作系统的整体的状况如何。top:常用的系统性能监控命令,可显示当前进程的cpu利用率和内存使用率,找到...原创 2020-04-01 11:27:59 · 195 阅读 · 0 评论 -
深入浅出JVM之常用jvm配置参数
1.Trace跟踪参数-verbose:gc 打开GC功能-XX:+printGC 打开GC日志在控制台显示-XX:+PrintGCTimeStamps 打印GC发生的时间戳-XX:+PrintGCDetails 打开GC详细信息,在程序调用结束后会打印出详细的堆内存信息,下面是在64位jdk1.7版本下使用参数:-Xmx10m -Xms10m -XX:+PrintGCDetails -X...原创 2020-03-31 11:58:23 · 202 阅读 · 0 评论 -
深入浅出JVM之JVM运行机制
一、JVM启动流程启动jvm首先在命令窗口输入java命令,该命令会根据当前路径和系统版本寻找jvm.cfg(该配置文件一般在JAVA_HOME/jre/lib/amd64文件夹下),来加载jvm的配置文件,根据这个配置文件寻找jvm.dll(JAVA_HOME\jre\bin\server),jvm.dll是jvm的主要实现。然后初始化JVM获得JNIEnv接口,java中通过findClas...原创 2020-03-31 11:56:46 · 199 阅读 · 0 评论 -
深入浅出JVM之JVM入门知识
一、Java语言规范:1.java语法java的语法比较简单,对于分支语句的结构如下:if then Statement:if(Expression) Statement对应的代码如下:if(true){do sth;}ArgumentList:在定义一个方法时可能需要指定方法的参数,这个参数个数可以是固定的,也可以是不固定的。jdk1.7之后支持多个参数2.词法结构:在源代...原创 2020-03-31 11:54:20 · 195 阅读 · 0 评论