- 博客(36)
- 收藏
- 关注
转载 【jvm jdk】class文件中的字段表集合--field字段在class文件中是怎样组织的
文章目录1.概述2. 字段表集合在class文件中的位置3. Java中的一个Field字段应该包含那些信息?4. field字段的访问标志5. 字段的数据类型表示和字段名称表示6.属性表集合-----静态field字段的初始化7.实例解析读完本文,你将会学到:类中定义的field字段是如何在class文件中组织的不同的数据类型在class文件中是如何表示的static final类型的field字段的初始化赋值问题1.概述字段表集合是指由若干个字段表(field_info)组成
2020-09-30 19:37:07 306
转载 【jvm jdk】Class文件中的常量池详解(下)
NO9.类中引用到的field字段在常量池中是怎样描述的?(CONSTANT_Fieldref_info, CONSTANT_Name_Type_info)一般而言,我们在定义类的过程中会定义一些 field 字段,然后会在这个类的其他地方(如方法中)使用到它。有可能我们在类的方法中只使用field字段一次,也有可能我们会在类定义的方法中使用它很多很多次。举一个简单的例子,我们定一个叫Person的简单 java bean,它有name和age两个field字段,如下所示:public class
2020-09-30 14:31:09 186
转载 Elasticsearch数据刷新策略RefreshPolicy简述
说明默认情况下ElasticSearch索引的refresh_interval为1秒,这意味着数据写1秒才就可以被搜索到。每次索引refresh会产生一个新的 lucene 段,这会导致频繁的 segment merge 行为,对系统 CPU 和 IO 占用都比较高。如果产品对于实时性要求不高,则可以降低刷新周期,如:index.refresh_interval: 120s。但是这种特性对于功能测试来说比较麻烦:因为实时性不能保证,所以每次插入测试数据之后,都需要sleep一段时间,才能进行测试
2020-09-30 10:35:16 4848
转载 【jvm jdk】Class文件中的常量池详解(上)
文章目录NO1.常量池在class文件的什么位置?NO2.常量池的里面是怎么组织的?NO3.常量池项 (cp_info) 的结构是什么?NO4.常量池能够表示那些信息?NO5. int和float数据类型的常量在常量池中是怎样表示和存储的?NO6. long和 double数据类型的常量在常量池中是怎样表示和存储的?NO7. String类型的字符串常量在常量池中是怎样表示和存储的?NO8. 类文件中定义的类名和类中使用到的类在常量池中是怎样被组织和存储的?NO1.常量池在class文件的什么位置?在c
2020-09-29 20:56:12 309
转载 【java队列】LinkedBlockingDeque
文章目录1、简介2、源码分析2.1、属性2.2、构造函数2.3、方法2.3.1、入队方法add相关的方法offer相关的方法put相关的方法2.3.2、出队方法remove相关的方法poll相关的方法1、简介上一篇我们介绍了 LinkedBlockingDeque 的兄弟篇 LinkedBlockingQueue 。听名字也知道一个实现了 Queue 接口,一个实现了 Deque 接口,由于 Deque 接口又继承于 Queue ,所以 LinkedBlockingDeque 自然就有 LinkedBl
2020-09-29 14:57:47 368
原创 【线程】 线程并发协作(生产者/消费者模式)
缓冲区类BufferLock 中,value是共享变量,isEmpty 是否为空的信号量,并将put()和get()声明为同步方法。public class BufferLock { private int value; /** * value是否为空的信令号量,可以理解存储产品的池子,容量只有1<br> * 为空表示池子空了,可以放入数据,不可以取数据;<br> * 非空表示池子满了,不可以放入数据,可以取数据 */ private boolean isEm
2020-09-26 23:10:18 159
原创 【jvm jdk】切换jdk版本不成功解决
背景JDK区分安装版和zip解压版,在命令行通过java -version查看效果,前者安装后可能在没有设置JAVA_HOME和PATH情况下,也能正确显示,后者必须设置,这是什么原因呢?当我们本地存在多个版本的JDK,切换目标版本时,一般通过修改JAVA_HOME,但是有时会失效,是什么原因呢?解密对于安装版,在安装过程中,会写入一些注册表或环境变量,因此即使不设置JAVA_HOME和PATH,也会按照优先级,从多个地方查看;而对于解压版,不会有自动写注册表,只能从AVA_HOME和PATH中查找
2020-09-24 00:47:44 1038
转载 【jvm jdk】JVM client模式和Server模式的区别
文章目录概述1. 当前是Client or Server?ClientServer2. Client与Server切换2.1 模式配置文件32位JDK64位JDK2.2 模式切换概述JVM有两种运行模式Server与Client。两种模式的区别在于,Client模式启动速度较快,Server模式启动较慢;但是启动进入稳定期长期运行之后Server模式的程序运行速度比Client要快很多。这是因为Server模式启动的JVM采用的是重量级的虚拟机,对程序采用了更多的优化;而Client模式启动的JVM采用
2020-09-24 00:04:24 1591
翻译 【深入理解java虚拟机v3】代码清单4-9 死锁代码样例
文章目录简介例子简介目的是介绍Jconsole查看死锁线程的状态例子public class ThreadDeadLockTestCase_2 { /** * 线程死锁等待演示 */ static class SynAddRunnalbe implements Runnable { int a, b; public SynAddRunnalbe(int a, int b) { this.a = a; this.b = b; } @Override p
2020-09-23 22:54:20 90
翻译 【深入理解java虚拟机v3】代码清单4-8 线程等待演示代码
import java.io.BufferedReader;import java.io.InputStreamReader;/** * @author zzm */public class ThreadDeadLockTestCase_1 { /** * 线程死循环演示 */ public static void createBusyThread() { Thread thread = new Thread(new Runnable() {
2020-09-21 00:17:31 168
翻译 【深入理解java虚拟机v3】代码清单2-3 java堆内存溢出异常测试
import java.util.ArrayList;import java.util.List;/** * Vm args: -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError * */public class HeapOOM { static class OOMObject { } public static void main(String[] args) { List<OOMObject>
2020-09-19 01:07:59 88
翻译 《深入理解java虚拟机v3》 3.8.5 空间分配担保 代码清单3-11
在发生Minor GC之前,虚拟机必须先检查老年代最大可用的连续空间是否大于新生代所有对象总空间,如果这个条件成立,那这一次Minor GC可以确保是安全的。如果不成立,则虚拟机会先查看-XX:HandlePromotionFailure参数的设置值是否允许担保失败(Handle Promotion Failure);如果允许,那会继续检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小,如果大于,将尝试进行一次Minor GC,尽管这次Minor GC是有风险的;如果小于,或者-XX:Ha
2020-09-19 01:06:45 228
翻译 《深入理解java虚拟机v3》3.8.4动态对象年龄判定 > 代码清单3-10
为了能更好地适应不同程序的内存状况,HotSpot虚拟机并不是永远要求对象的年龄必须达到-XX:MaxTenuringThreshold才能晋升老年代,如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无须等到-XX:MaxTenuringThreshold中要求的年龄。执行代码清单3-10中的testTenuringThreshold2()方法,并将设置-XX:MaxTenuring-Threshold=15,发现运行结
2020-09-18 23:33:29 249
翻译 《深入理解java虚拟机v3》长期存活的对象将进入老年代 > 代码清单3-9
文章目录1. 概述2. 例子2.1 以`-XX:MaxTenuringThreshold=1`参数来运行1. 概述HotSpot虚拟机中多数收集器都采用了分代收集来管理堆内存,那内存回收时就必须能决策哪些存活对象应当放在新生代,哪些存活对象放在老年代中。为做到这点,虚拟机给每个对象定义了一个对象年龄(Age)计数器,存储在对象头中(详见第2章)。对象通常在Eden区里诞生,如果经过第一次Minor GC后仍然存活,并且能被Survivor容纳的话,该对象会被移动到Survivor空间中,并且将其对象年
2020-09-18 22:59:34 474 2
翻译 《深入理解java虚拟机v3》大对象直接进入老年代 > 代码清单3-8
大对象就是指需要大量连续内存空间的Java对象,最典型的大对象便是那种很长的字符串,或者元素数量很庞大的数组,本节例子中的byte[]数组就是典型的大对象。大对象对虚拟机的内存分配来说就是一个不折不扣的坏消息,比遇到一个大对象更加坏的消息就是遇到一群“朝生夕灭”的“短命大对象”,我们写程序的时候应注意避免。在Java虚拟机中要避免大对象的原因是,在分配空间时,它容易导致内存明明还有不少空间时就提前触发垃圾收集,以获取足够的连续空间才能安置好它们,而当复制对象时,大对象就意味着高额的内存复制开销。Hot
2020-09-17 23:21:22 516
原创 【jvm jdk】如何查看Open JDK jvm使用的垃圾收集器
参考:https://www.cnblogs.com/grey-wolf/p/9217497.htmlhttps://blog.csdn.net/yelvgou9995/article/details/106444351
2020-09-17 14:34:45 1731 3
翻译 《深入理解java虚拟机v3》对象优先在Eden分配 > 代码单3-7 新生代Minor GC
对象优先在Eden分配大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC。HotSpot虚拟机提供了-XX:+PrintGCDetails这个收集器日志参数,告诉虚拟机在发生垃圾收集行为时打印内存回收日志,并且在进程退出的时候输出当前的内存各区域分配情况。在代码清单3-7的testAllocation()方法中,尝试分配三个2MB大小和一个4MB大小的对象,在运行时通过-Xms20M、-Xmx20M、-Xmn10M这三个参数限制了Java堆
2020-09-16 23:18:57 293 3
原创 【java技巧】Java中for循环每次都通过list.size()、str.length、length()获取数组或者字符串的长度是否消耗资源
文章目录1.数组.length2.集合.size()3.字符串.length()最近看到有同事在使用for循环的时候首先会将数组或者字符串的长度赋值给一个变量;在网上查了一下说是这样可以节约资源的消耗,真实的情况又是如何?1.数组.length String[] s = {"qw","as","a"}; for(int i=0; i<s.length; i++) { System.out.println(s[i]); }结论:纯属性,直接读取该数组的_l
2020-09-15 16:03:23 1331 3
翻译 《深入理解java虚拟机v3》代码清单3-2 一次对象自我拯救的演示
/** * 此代码演示了两点: 1.对象可以在被GC时自我拯救。 2.这种自救的机会只有一次,因为一个对象的finalize()方法最多只会被系统自动调用一次 * * @author zzm */public class FinalizeEscapeGC { public static FinalizeEscapeGC SAVE_HOOK = null; public void isAlive() { System.out.println("yes, i am.
2020-09-14 20:42:36 105
原创 【线程池】java.util.concurrent.ThreadFactory作用
参考:https://blog.csdn.net/a13662080711/article/details/107173701/
2020-09-14 17:27:02 1106
转载 【java队列】LinkedBlockingQueue
文章目录1、简介2、源码分析2.1、属性2.2、构造函数2.3、方法2.3.1、入队方法put(E e)offer(E e)offer(E e, long timeout, TimeUnit unit)2.3.2、出队方法take()poll()2.3.3、获取元素方法2.3.4、删除元素方法3、问题4、总结1、简介上篇我们介绍了ArrayBlockingQueue的相关方法的原理,这一篇我们来学习一下ArrayBlockingQueue的“亲戚” LinkedBlockingQueue。在集合框架里,
2020-09-12 21:40:36 246
转载 【java队列】ArrayBlockingQueue
文章目录1、简介2、数据结构3、源码分析3.1、属性3.2、构造函数3.3、方法3.3.1、入队方法add(E e)offer(E e)offer(E e, long timeout, TimeUnit unit)1、简介ArrayBlockingQueue,顾名思义:基于数组的阻塞队列。数组是要指定长度的,所以使用ArrayBlockingQueue时必须指定长度,也就是它是一个有界队列。它实现了BlockingQueue接口,有着队列、集合以及阻塞队列的所有方法,队列类图如下图所示:既然它在J
2020-09-12 15:40:09 784
转载 《深入理解java虚拟机v3》代码清单2-8 String.intern()返回引用的测试 释疑
文章目录二、解释答案验证一、背景《深入理解java虚拟机》第二版 57页对String.intern()返回引用的测试代码如下:第三版是63页public class RuntimeConstantPoolOOM_2 { public static void main(String[] args) { String str1 = new StringBuilder("计算机").append("软件").toString(); System.out.pr
2020-09-10 16:02:02 144
原创 【深入理解java虚拟机v3】代码清单2-6 创建线程,导致内存溢出异常
测试环境JDK1.8给每个栈分配的内存越大,反而越容易出现OOM异常原因:操作系统给每个进程分配的内存是有限制的,比如32位windows的单个进程的最大内存为2GB。HotSpot虚拟机提供了参数可以控制java堆和方法区这两部分的最大值,剩余的内存即为2GB减去最大堆容量,再减去最大方法区容量,程序计数器耗内存很少,可以忽略掉,如果把直接内存和虚拟机进程自身消耗的内存也去掉的话,剩余的内存就由虚拟机栈和本地方法栈来分配了。虚拟机栈和本地方法栈内存=2G-最大堆容量-最大方法区容量-程序计数器-直接
2020-09-10 15:16:04 123
原创 【深入理解java虚拟机v3】代码清单2-4 、2-5虚拟机栈和本地方法栈测试
-Xss 限制虚拟机栈的大小-Xoss 限制本地方法栈大小由于HotSpot虚拟机不区分虚拟机栈和本地方法栈,对于HotSpot来说,-Xoss参数虽然存在,但是没有实际效果。虚拟机栈深度报错代码清单2-4:注意设置-Xss128k,限定了栈的上限,因此很快就报错/** * VM Args:-Xss128k * * @author zzm */public class JavaVMStackSOF_1 { private int stackLength = 1;
2020-09-10 15:15:42 170
原创 Quartz (3) 常见api解释
文章目录TriggerTrigger的公共属性优先级(priority)错过触发(misfire Instructions)TriggerBuilderwithIdentity()startAt()endAt()startNow()usingJobData()withPriority()ForJob()Job和Trigger关联问题TriggerTrigger是一个接口,字面意思触发器 - 定义执行给定作业的计划的组件。//v2.23public abstract class AbstractTri
2020-09-04 09:38:03 782
转载 quartz 传参
文章目录传入参数获取参数有时候,我们需要往job的execute()方法中传递参数,那么如果实现呢?传入参数quartz 中用 jobDataMap 去存储附加信息。jobDataMap类,每个JobDetail都关联了一个JobDataMap实例,JobDataMap是java.util.Map的子类,基本上是提供key- value形式的数据,当你创建JobDetail的时候,可以把附加信息放到JobDataMap中,那么在execute方法中可以根据key找到需 要的值。有两种方式将数据添加
2020-09-03 11:49:08 612
翻译 《Elasticsearch:权威指南》Query DSL -- Full text queries -- Match Query
Match Query匹配查询可以接受文本、数字及日期数据,进行分析然后构造查询。GET /_search{ "query": { "match" : { "message" : "this is a test" } }}注意:message是字段名称,你可以替换任何字段的名称。match查询会先对搜索词进行分词,分词完毕后再逐个对分词结果进行匹配,因此相比于term的精确搜索,match是分词匹配搜索,match搜索还
2020-09-02 20:13:24 200
翻译 《Elasticsearch:权威指南》Query DSL -- Full text queries
Elasticsearch:权威指南6.8.6目录文章目录Full text queriesFull text queries高级别的全文搜索通常用于在全文字段(例如:一封邮件的正文)上进行全文搜索。它们了解如何分析查询的字段,并在执行之前将每个字段的分析器(或搜索分析器)应用于查询字符串。查询分类:match query用于执行全文查询的标准查询,包括模糊匹配和词组或邻近程度的查询match_phrase query与 match query类似,但是是用于更加精确的匹配相似的词组或单词
2020-09-02 18:17:30 126
翻译 《Elasticsearch:权威指南》Query DSL -- Match All Query
Elasticsearch:权威指南6.8.6目录文章目录Match All QueryMatch All Query最简单的查询,它匹配所有文档,_score默认 值为固定值 1.0。GET /_search{ "query": { "match_all": {} }}可以通过boost改变_score的值:GET /_search{ "query": { "match_all": { "boost" : 1.2 } }
2020-09-02 17:02:39 297
翻译 《Elasticsearch:权威指南》Query DSL -- Term-level queries --Wildcard Query
Elasticsearch:权威指南6.8.6目录文章目录Wildcard Query例子参数valueboostrewriteWildcard Query返回包含与通配符模式匹配的词语的文档。通配符运算符是匹配一个或多个字符的占位符。 例如,*通配符运算符匹配零个或多个字符。 您可以将通配符运算符与其他字符结合使用以创建通配符模式。例子下面例子可以匹配 kiy, kity, 或 kimchy.GET /_search{ "query": { "wildcard":
2020-09-02 14:06:00 264
翻译 《Elasticsearch:权威指南》Query DSL -- Term-level queries --Terms Query
文章目录Terms Query(多项条件精确匹配)Terms lookup(多项)查找机制terms lookup 查询例子Terms Query(多项条件精确匹配)过滤具有与任何提供的多项条件词语(未分析)匹配的字段的文档。 例如:GET /_search{ "query": { "terms" : { "user" : ["kimchy", "elasticsearch"]} }}terms和term意思相近,从字面意思可以知道是多个条件。可以先初步理解为
2020-09-02 10:35:24 369
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人