JVM 初始化阶段的重要意义分析
1、创建一个Mytest6类和Singleton类
public class MyTest6 {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
System.out.println("counter1:" +Singleton.counter1);
System.out.println("counter2:" +Singleton.counter2);
}
}
class Singleton{
public static int counter1 ;
public static int counter2 = 0;
private static Singleton singleton = new Singleton();
private Singleton(){
counter1 ++;
counter2 ++;
}
public static Singleton getInstance(){
return singleton;
}
}
输出结果
counter1:1
counter2:1
2、将counter2成员变量的位置移动到构造函数后面
public class MyTest6 {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
System.out.println("counter1:" +Singleton.counter1);
System.out.println("counter2:" +Singleton.counter2);
}
}
class Singleton{
public static int counter1 ;
private static Singleton singleton = new Singleton();
private Singleton(){
counter1 ++;
counter2 ++;
System.out.println("Singleton counter1:" +counter1);
System.out.println("Singleton counter2:" +counter2);
}
public static int counter2 = 0;
public static Singleton getInstance(){
return singleton;
}
}
输出结果如下:
Singleton counter1:1
Singleton counter2:1
counter1:1
counter2:0
首先Singleton singleton = Singleton.getInstance(); 是调用Singleton类的getInstance(),属于主动调用。Singleton在准备阶段,按照声明的顺序,赋予所有成员变量默认值。在初始化阶段,构造函数里couonter1和counter2的值变为1,但是后面counter2的值又被赋值为0。 所以打印了上面的结果。
上面代码中的构造函数里counter2 ++;

准备阶段的意义:如果没有准备阶段,counter2是没有值的,更不会有++操作
JVM 初始化阶段的重要意义分析的更多相关文章
- JVM 初始化阶段例子
创建如下Demo package com.example.jvm.classloader; class Parent{ static int a = 3; static { System.out.pr ...
- JVM 初始化阶段例子 final常量
1.创建FinalTest类,里面有一个final常量x class FinalTest{ public static final int x = 3; static { System.out.pri ...
- SpringMVC初始化阶段流程源码分析
1.都知道SpringMVC项目启动的时候都会初始化一个类:DispatcherServlet,看这个类的源码我们可以发现他其实就是一个servlet, 为什么这么说呢?请看: DispatcherS ...
- JVM调优总结 + jstat 分析(转)
[转] JVM调优总结 + jstat 分析 JVM调优总结 + jstat 分析 jstat -gccause pid 1 每格1毫秒输出结果jstat -gccause pid 2000 每格2秒 ...
- junit源码解析--初始化阶段
OK,我们接着上篇整理.上篇博客中已经列出的junit的几个核心的类,这里我们开始整理junit完整的生命周期. JUnit 的完整生命周期分为 3 个阶段:初始化阶段.运行阶段和结果捕捉阶段. 这篇 ...
- Jvm threaddump,heapdump的分析及问题定位
1 一.Thread Dump介绍 1.1 1.1什么是Thread Dump? 1.2 1.2 Thread Dump特点 1.3 1.3 Thread Dump 能诊断的问题 1.4 1.4如何抓 ...
- u-boot分析(九)----nand flash初始化|nand flash读写分析
u-boot分析(九) 上篇博文我们按照210的启动流程,分析到了初始化串口,由于接下来的取消存储保护不是很重要,所以我们今天按照u-boot的启动流程对nand flash初始化进行分析. 今天我们 ...
- 深入理解JVM-类加载初始化阶段-类的主动与被动引用
JVM的类加载阶段中初始化阶段 P210 虚拟机规定的五种情况必须对类的“初始化”情况 1.遇到new.getstatic.putstatic.或invokestic 四条字节码指令时,如果类没有经过 ...
- 一起学习vue源码 - Vue2.x的生命周期(初始化阶段)
作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e8 ...
随机推荐
- 【hadoop】hadoop3.2.0的安装并测试
前言:前段时间将hadoop01的虚拟机弄的崩溃掉了,也没有备份,重新从hadoop02虚拟上克隆过来的,结果hadoop-eclipse插件一样的编译,居然用不起了,找了3天的原因,最后还是没有解决 ...
- RestTemplate对象,进行get和post简单用法
如果只是针对纯Rest接口处理的话,我们可以使用restTemplate对象来操作,简单方便,可以不需要手写httpClient代码了. 我们看下基本的用法,如下: 1.getForObject cl ...
- Java List<String> list=new ArrayList<String>();为什么要声明为List,而不是ArrayList<String>
例如:代码List list = new ArrayList(); 下面通过list来操作集合.假如代码编写后却发现集合使用的不准确,应该使用LinkedList,那么只要修改一行代码List lis ...
- mount.cifs Windows共享目录权限755问题
umount -l /usr/local/tomcat7/webapps/dsideal_yy/html/down mount -t cifs -o rw,dir_mode=,file_mode=,s ...
- java写入内容到本地文件 -读取文件内容
/** 日志记录 * @author sys * @param content 要写入的类容 * @param path 目标路径 c:/log/ * @param filename 文件名 log. ...
- #《你们都是魔鬼吗》第八次团队作业:第五天Alpha冲刺
<你们都是魔鬼吗>第八次团队作业:Alpha冲刺 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 你们都是魔鬼吗 作业学习目标 完成最 ...
- 基于h5+的微信分享,hbuilder打包
1.打开app项目的manifest.json的文件,选择模块权限配置,将Share(分享)模块添加至已选模块中 2.选择SDK配置,在plus.share·分享中,勾选□ 微信消息及朋友圈,配置好a ...
- 学习Kubernetes,这些负载均衡知识点得知道!
负载均衡 负载均衡是高可用架构的一个关键组件,主要用来提高性能和可用性,通过负载均衡将流量分发到多个服务器,同时多服务器能够消除这部分的单点故障. 一个没有使用负载均衡的Web架构一般会长得像这样: ...
- js弹窗输入
<html> <head> <title>js输入对话框</title> </head> <body> <script l ...
- 使用safe-rm替换rm命令,防止误删除
1.下载safe源码包: wget https://launchpad.net/safe-rm/trunk/0.12/+download/safe-rm-0.12.tar.gz 2.解压safe-rm ...