Java进阶篇
ApacheCrazyFan
巨人的肩膀
展开
-
IDEA 应用/服务 启动错题集
1.java: Compilation failed: internal java compiler errorError:java: Compilation failed: internal java compiler error 解决办法_ruoxiyun的博客-CSDN博客2.java.lang.OutOfMemoryError: GC overhead limit exceededjava.lang.OutOfMemoryError:GC overhead limit exceeded_原创 2022-05-10 23:22:25 · 321 阅读 · 0 评论 -
JVM-由常量池 运行时常量池 String intern方法想到的(三)之String内存模型
由常量池 运行时常量池 String intern方法想到的(三)之String内存模型在这篇博文中描述的,所有在运行时常量池中出现的字符串其实都是一个String对象。因为,java是一种强类型的语言,要求每一种变量都要有具体的数据类型。但是基本数据类型存放的不是对象(String不属于基本数据类型)。基本数据类型的常量在运行时常量池中存放的是字面值。貌似JVM会自动将boolean、byt转载 2016-12-26 19:58:05 · 1444 阅读 · 0 评论 -
JVM之-GC垃圾收集器(一)
JVM源码分析之堆内存的初始化前言Java堆是被所有线程共享的一块内存区域,所有对象和数组都在堆上进行内存分配。为了进行高效的垃圾回收,虚拟机把堆内存划分成新生代、老年代和永久代(1.8中无永久代,使用metaspace实现)三块区域。堆初始化Java堆的初始化入口位于Universe::initialize_heap方法中,实现如下:其中U原创 2016-12-29 13:48:39 · 626 阅读 · 0 评论 -
JVM/HotSpot-Java对象头的HotSpot实现分析
java对象头的HotSpot实现分析HotSpot虚拟机中,对象在内存中的布局分为三块区域:对象头、实例数据和对齐填充。对象头对象头包括两部分:Mark Word 和 类型指针。Mark WordMark Word用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等等,占用内存大小与虚拟机位长一原创 2016-12-29 14:10:57 · 1220 阅读 · 0 评论 -
一图读懂JVM架构解析
每个Java开发人员都知道字节码经由JRE(Java运行时环境)执行。但他们或许不知道JRE其实是由Java虚拟机(JVM)实现,JVM分析字节码,解释并执行它。作为开发人员,了解JVM的架构是非常重要的,因为它使我们能够编写出更高效的代码。本文中,我们将深入了解Java中的JVM架构和JVM的各个组件。JVM虚拟机是物理机的软件实现。Java的设计理念是WORA(Write On转载 2016-12-31 23:11:56 · 3025 阅读 · 1 评论 -
log4j.properties 详解与配置步骤
log4j.properties 详解与配置步骤一、log4j.properties 的使用详解1.输出级别的种类ERROR、WARN、INFO、DEBUGERROR 为严重错误 主要是程序的错误WARN 为一般警告,比如session丢失INFO 为一般要显示的信息,比如登录登出DEBUG 为程序的调试信息2.配置日志信息输转载 2017-02-04 22:26:36 · 491 阅读 · 0 评论 -
log4j.properties配置详解与实例(2)
原文地址为:http://blog.sina.com.cn/s/blog_5ed94d710101go3u.html最近使用log4j写log时候发现网上的写的都是千篇一律,写的好的嘛不全,写的全一点的嘛没有一点格式,看着累。这里把网上收集到的整理了一下,并且全部都在机器上测试成功了。这么好的文档估计没有了吧? #######################################转载 2017-02-04 22:35:10 · 393 阅读 · 0 评论 -
POI遍历Excle表
最近一个哥哥给我出了一个题目:用POI把Excle表的数据插入到数据库中。下面是我做的:明确两点。1.读取Excel表的数据2.连接数据库(oracle)并插入数据1。首先Maven导包:我是从csdn下的,然后用 mvn install:install-file -Dfile= -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar 命令将包...原创 2017-02-06 23:18:24 · 3726 阅读 · 0 评论 -
重新认识java (一) ---- 面向对象之多态(向上转型与向下转型)
原文地址:https://blog.csdn.net/qq_31655965/article/details/54746235什么是多态简单的理解多态多态,简而言之就是同一个行为具有多个不同表现形式或形态的能力。比如说,有一杯水,我不知道它是温的、冰的还是烫的,但是我一摸我就知道了。我摸水杯这个动作,对于不同温度的水,就会得到不同的结果。这就是多态。那么,java中是怎么体现多态呢?我们来直接看代...转载 2018-05-02 10:56:19 · 325 阅读 · 0 评论 -
占小狼之-Java进阶之路-深入分析String.intern和String常量的实现原理
深入分析String.intern和String常量的实现原理背景字符串类型在实际应用场景中使用非常频繁,如果为每个字符串常量都生成一个对应的String对象,明显会造成内存的浪费,针对这一问题,虚拟机实现一个字符串常量池的概念,提供了如下实现:1、同一个字符串常量,在常量池只有一份副本;2、通过双引号声明的字符串,直接保存在常量池中;3、如果是String对象,可原创 2016-12-25 23:25:46 · 1025 阅读 · 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 · 1527 阅读 · 0 评论 -
JVM之 - 深入浅出系列之 - synchronized
深入浅出synchronizedsynchronized可以保证方法或代码块在运行时,同一时刻只有一个线程可以进入到临界区(互斥性),同时它还保证了共享变量的内存可见性。Java中的每个对象都可以作为锁。普通同步方法,锁是当前实例对象。静态同步方法,锁是当前类的class对象。同步代码块,锁是括号中的对象。先看一个场景等待 / 通知机制直接上代码:原创 2017-01-03 14:47:16 · 1000 阅读 · 0 评论 -
JVM之 - Java内存模型
在揭开面纱之前,我们需要认识几个基础概念:内存屏障(memory Barriers),指令重排序,happens-before规则,as-if-serial语义。什么是 Memory Barrier(内存屏障)?内存屏障,又称内存栅栏,是一个CPU指令,基本上它是一条这样的指令:1、保证特定操作的执行顺序。2、影响某些数据(或则是某条指令的执行结果)的内存可见性。编译器原创 2017-01-03 14:50:34 · 532 阅读 · 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 · 672 阅读 · 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 · 712 阅读 · 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 · 1141 阅读 · 0 评论 -
江南白衣之-Java进阶-StringBuffer在高性能场景下的正确用法
StringBuilder在高性能场景下的正确用法。关于StringBuilder,一般同学只简单记住了,字符串拼接要用StringBuilder,不要用+,也不要用StringBuffer,然后性能就是最好的了,真的吗吗吗吗?还有些同学,还听过三句似是而非的经验:1. Java编译优化后+和StringBuilder的效果一样;2. StringBuilder原创 2016-12-23 20:21:29 · 1414 阅读 · 0 评论 -
占小狼之-JVM-JVM内存的那些事
JVM内存的那些事前言对于C语言开发的程序员来说,在内存管理方面,必须负责每一个对象的生命周期,从有到无。对于Java程序员你来说,在虚拟机内存管理的帮助下,不需要为每个new对象都匹配free操作,内存泄露和内存溢出等问题也不太容易出现,不过也正是因为把内存管理交给了虚拟机,一旦运行中的程序出现了内存泄露问题,给排查过程造成很大困难。所以只有理解了Java虚拟机的运行机制,才原创 2016-12-25 20:09:23 · 1857 阅读 · 0 评论 -
占小狼之-JVM-JVM源码分析之Java类加载过程
JVM源码分析之Java类加载过程背景最近对Java细节的底层实现比较感兴趣,如Java类文件是如何加载到虚拟机的,类对象和方法是以什么数据结构存在于虚拟机中?虚方法、实例方法和静态方法是如何调用的?本文基于openjdk-7的OpenJDK实现Java类在HotSpot的内部实现进行分析。HotSpot内存划分在HotSpot实现中,内存被划分成Java堆、方法区原创 2016-12-25 20:25:14 · 1685 阅读 · 0 评论 -
JVM之 - 深入分析synchronized的JVM实现
本文转载自:http://www.jianshu.com/p/c5058b6fe8e5深入分析synchronized的JVM实现java内部锁synchronized的出现,为多线程的并发执行提供了一个稳定的环境,有效的防止多个线程同时执行同一个逻辑,本文不会讲如何使用synchronized,以HotSpot1.7的虚拟机为例,对synchronized的实现进行深入分析。转载 2017-01-03 14:41:55 · 2343 阅读 · 0 评论