
Java关键知识点
ApacheCrazyFan
巨人的肩膀
展开
-
Java关键知识点 - JDK HashMap工作原理分析
这个时候就出现了哈希表这种数据结构。这是一种折中的方式,插入没链表快,查询没数组快。原创 2016-11-23 15:08:08 · 425 阅读 · 0 评论 -
log4j.properties配置详解与实例(2)
原文地址为:http://blog.sina.com.cn/s/blog_5ed94d710101go3u.html最近使用log4j写log时候发现网上的写的都是千篇一律,写的好的嘛不全,写的全一点的嘛没有一点格式,看着累。这里把网上收集到的整理了一下,并且全部都在机器上测试成功了。这么好的文档估计没有了吧? #######################################转载 2017-02-04 22:35:10 · 415 阅读 · 0 评论 -
log4j.properties 详解与配置步骤
log4j.properties 详解与配置步骤一、log4j.properties 的使用详解1.输出级别的种类ERROR、WARN、INFO、DEBUGERROR 为严重错误 主要是程序的错误WARN 为一般警告,比如session丢失INFO 为一般要显示的信息,比如登录登出DEBUG 为程序的调试信息2.配置日志信息输转载 2017-02-04 22:26:36 · 523 阅读 · 0 评论 -
JVM/HotSpot-Java对象头的HotSpot实现分析
java对象头的HotSpot实现分析HotSpot虚拟机中,对象在内存中的布局分为三块区域:对象头、实例数据和对齐填充。对象头对象头包括两部分:Mark Word 和 类型指针。Mark WordMark Word用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等等,占用内存大小与虚拟机位长一原创 2016-12-29 14:10:57 · 1262 阅读 · 0 评论 -
JVM之-GC垃圾收集器(一)
JVM源码分析之堆内存的初始化前言Java堆是被所有线程共享的一块内存区域,所有对象和数组都在堆上进行内存分配。为了进行高效的垃圾回收,虚拟机把堆内存划分成新生代、老年代和永久代(1.8中无永久代,使用metaspace实现)三块区域。堆初始化Java堆的初始化入口位于Universe::initialize_heap方法中,实现如下:其中U原创 2016-12-29 13:48:39 · 651 阅读 · 0 评论 -
JVM-由常量池 运行时常量池 String intern方法想到的(三)之String内存模型
由常量池 运行时常量池 String intern方法想到的(三)之String内存模型在这篇博文中描述的,所有在运行时常量池中出现的字符串其实都是一个String对象。因为,java是一种强类型的语言,要求每一种变量都要有具体的数据类型。但是基本数据类型存放的不是对象(String不属于基本数据类型)。基本数据类型的常量在运行时常量池中存放的是字面值。貌似JVM会自动将boolean、byt转载 2016-12-26 19:58:05 · 1475 阅读 · 0 评论 -
占小狼之-Java进阶之路-深入分析String.intern和String常量的实现原理
深入分析String.intern和String常量的实现原理背景字符串类型在实际应用场景中使用非常频繁,如果为每个字符串常量都生成一个对应的String对象,明显会造成内存的浪费,针对这一问题,虚拟机实现一个字符串常量池的概念,提供了如下实现:1、同一个字符串常量,在常量池只有一份副本;2、通过双引号声明的字符串,直接保存在常量池中;3、如果是String对象,可原创 2016-12-25 23:25:46 · 1070 阅读 · 0 评论 -
占小狼之-JVM-JVM源码分析之Java对象的创建过程
JVM源码分析之Java对象的创建过程接着上篇《JVM源码分析之Java类加载过程》,本文将基于HotSpot实现对Java对象的创建过程进行深入分析。定义两个简单的类AAA和BBB通过``javap -c AAA```查看编译之后的字节码,具体如下:Java中的new关键字对应jvm中的new指令,定义在InterpreterRunti原创 2016-12-25 20:32:14 · 1568 阅读 · 0 评论 -
占小狼之-JVM-JVM源码分析之Java类加载过程
JVM源码分析之Java类加载过程背景最近对Java细节的底层实现比较感兴趣,如Java类文件是如何加载到虚拟机的,类对象和方法是以什么数据结构存在于虚拟机中?虚方法、实例方法和静态方法是如何调用的?本文基于openjdk-7的OpenJDK实现Java类在HotSpot的内部实现进行分析。HotSpot内存划分在HotSpot实现中,内存被划分成Java堆、方法区原创 2016-12-25 20:25:14 · 1714 阅读 · 0 评论 -
江南白衣之-Java进阶-StringBuffer在高性能场景下的正确用法
StringBuilder在高性能场景下的正确用法。关于StringBuilder,一般同学只简单记住了,字符串拼接要用StringBuilder,不要用+,也不要用StringBuffer,然后性能就是最好的了,真的吗吗吗吗?还有些同学,还听过三句似是而非的经验:1. Java编译优化后+和StringBuilder的效果一样;2. StringBuilder原创 2016-12-23 20:21:29 · 1448 阅读 · 0 评论 -
占小狼-Java进阶之路-浅谈StringBuffer
浅谈StringBuilder连接符号 "+" 本质在 浅谈Java String内幕(1) 中,字符串变量(非final修饰)通过 "+" 进行拼接,在编译过程中会转化为StringBuilder对象的append操作,注意是编译过程,而不是在JVM中。public class StringTest { public static void main(Stri原创 2016-12-23 19:56:20 · 1173 阅读 · 0 评论 -
占小狼-Java进阶之路-浅谈Java String内幕(一)
浅谈Java String内幕:前言String字符串在Java应用中使用非常频繁,只有理解了它在虚拟机中的实现机制,才能写出健壮的应用,本文使用的JDK版本为1.8.0_3。常量池Java代码被编译成class文件时,会生成一个常量池(Constant pool)的数据结构,用以保存字面常量和符号引用(类名、方法名、接口名和字段名等)。package com.原创 2016-12-23 19:27:09 · 755 阅读 · 0 评论 -
占小狼-Java进阶之路-浅谈Java String内幕(二)
浅谈Java String内幕(2)String.intern()原理String.intern()是一个Native方法,底层调用C++的 StringTable::intern 方法,源码注释:当调用 intern 方法时,如果常量池中已经该字符串,则返回池中的字符串;否则将此字符串添加到常量池中,并返回字符串的引用。package com.ctrip.ttd.原创 2016-12-23 19:44:40 · 703 阅读 · 0 评论 -
JVM之 - Java内存模型
在揭开面纱之前,我们需要认识几个基础概念:内存屏障(memory Barriers),指令重排序,happens-before规则,as-if-serial语义。什么是 Memory Barrier(内存屏障)?内存屏障,又称内存栅栏,是一个CPU指令,基本上它是一条这样的指令:1、保证特定操作的执行顺序。2、影响某些数据(或则是某条指令的执行结果)的内存可见性。编译器原创 2017-01-03 14:50:34 · 560 阅读 · 0 评论 -
JVM之 - 深入浅出系列之 - synchronized
深入浅出synchronizedsynchronized可以保证方法或代码块在运行时,同一时刻只有一个线程可以进入到临界区(互斥性),同时它还保证了共享变量的内存可见性。Java中的每个对象都可以作为锁。普通同步方法,锁是当前实例对象。静态同步方法,锁是当前类的class对象。同步代码块,锁是括号中的对象。先看一个场景等待 / 通知机制直接上代码:原创 2017-01-03 14:47:16 · 1034 阅读 · 0 评论 -
JVM之 - 深入分析synchronized的JVM实现
本文转载自:http://www.jianshu.com/p/c5058b6fe8e5深入分析synchronized的JVM实现java内部锁synchronized的出现,为多线程的并发执行提供了一个稳定的环境,有效的防止多个线程同时执行同一个逻辑,本文不会讲如何使用synchronized,以HotSpot1.7的虚拟机为例,对synchronized的实现进行深入分析。转载 2017-01-03 14:41:55 · 2374 阅读 · 0 评论 -
Java中关于String类型的10个问题
Java中关于String类型的10个问题2016-12-16 14:50程序员之家部落1. 如何比较两个字符串?用“=”还是equals简单来说,“==”是用来检测俩引用是不是指向内存中的同一个对象,而equals()方法则检测的是两个对象的值是否相等。只要你项检测俩字符串是不是相等的,你就必须得用equals()方法。如果你知道“字符串保留(string inter原创 2016-12-17 11:45:13 · 460 阅读 · 0 评论 -
重新认识java (一) ---- 面向对象之多态(向上转型与向下转型)
原文地址:https://blog.youkuaiyun.com/qq_31655965/article/details/54746235什么是多态简单的理解多态多态,简而言之就是同一个行为具有多个不同表现形式或形态的能力。比如说,有一杯水,我不知道它是温的、冰的还是烫的,但是我一摸我就知道了。我摸水杯这个动作,对于不同温度的水,就会得到不同的结果。这就是多态。那么,java中是怎么体现多态呢?我们来直接看代...转载 2018-05-02 10:56:19 · 347 阅读 · 0 评论