- 浏览: 459981 次
- 性别:
- 来自: 杭州
最新评论
-
sbpcx:
发布式Java应用基础和实践 -> 分布式Java应用基 ...
Java执行机制 -
wangyaopeng1992:
同一机器不同线程都会获取锁,有并发问题
基于zookeeper的分布式锁实现 -
icanfly:
我只能说你实现的有严重的并发问题,并没有考虑并发的情况。
基于zookeeper的分布式锁实现 -
aiheng1988:
若多个客户端同时调用tryLock去获取锁,最开始不存在锁的节 ...
基于zookeeper的分布式锁实现 -
Mynameisyuan:
...
基于zookeeper的分布式锁实现
文章列表
初始化是类加载中最后的一个阶段,也是与我们敲代码关系最大的一个阶段,所以我特意提了一个章节出来说这个问题.我想很多2B老湿经常会拿这个来考学生,看最后打印的值是什么..一般我看到这种题目就觉得恶心,但是我这次还是决定踩这坨屎...
初始化的部分我想分为两个部分
(1)虚拟机什么时候会对类做初始化
(2)继承关系类按照什么顺序进行初始化
虚拟机什么时候会对类做初始化
类在什么情况下被加载,虚拟机的规范中并没有明确的规定 ,但是,类的初始化却明确规定了:有且只有四种情况必须立即对类进行初始化.
(1) 遇到new ,getstatic ,puts ...
解析
解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程.这里需要注意三个点,第一是”常量池”,也就是是处理常量池信息的,第二个和第三个点一起说就是”直接引用”和”符号引用”.其实这两个概念很好理解.
看上图的常量池,有”//”注释的就是符号引用常量.它在常量池中的信息是通过一个引用值来标识的.其他可以直接获取到的值,它其实是直接指向目标的指针,
说明
1 类加载(Class Loading)包括加载,验证,准备,解析,和初始化五个部分.
2 这个文档里介绍的是加载,验证和准备
加载
加载(Loading)是类加载(Class Loading)过程中的一个阶段,
类的生命周期
基本上,类的生命周期可以通过如下图来说明
这个图当中,验证+准备+解析 可以统称为装载,这是错误的(好吧,我承认这个图我是copy来的.)这三个在一起,应该统称为连接(Linking).有jvm 规范为证.
可以看到 Verification(验证) + Preparation(准备) + Resolution(解析)
说明一下,虽然类的生命周期在上图中是按照这个箭头走的,但是并不是所有阶段的顺序都是确定的.比如,类的加载过程必须按照这个顺序开始,但是解析阶段却并不一定,比如某些情况下解析阶段会在初始化之后进行.这个是为了支持Java语言的运行时绑定(动态绑 ...
之前遇到的一些问题..mark一下
package zhenghui.jvm.parse;
/**
* Created by IntelliJ IDEA.
* User: zhenghui
* Date: 13-1-14
* Time: 下午4:43
* 表示无符号数.类似在jvm specs里规定的u1,u2,u4,u8
*/
public class Type {
/**
* 对应的16进制表示值
*/
private String value;
Type(String value) {
...
https://github.com/zhenghui/jvm-tool
文件解析基本完成了..不过指令的解析没有做...也只是解析了几个比较常用的attribute..不过出于演示的作用肯定是够的了. 源代码看附件
/**
* 去除会带来json格式出错的特殊字符.
*
* @param string
* @return
*/
public static String replaceSpecialStr(String string) {
if (string == null || string.length() == 0) {
return "";
}
char b;
char c = 0;
int ...
package com.taobao.ju.c2b.item.manager.impl;
import com.taobao.ju.c2b.item.domain.ItemOnlineBO;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.Date;
public final class SizeCalculator {
public static int calcSize(ja ...
package com.taobao.ju.c2b.facade.manager.impl;
import com.taobao.ju.common.manager.ManagerException;
import com.taobao.ump.client.meta.TargetDef;
import com.taobao.ump.client.result.ResultSupport;
import com.taobao.ump.core.service.client.MarketingActivityTopServiceClient;
import com.taobao ...
public abstract class Either<L, R> implements Serializable{
/**
*
*/
private static final long serialVersionUID = 0l;
private Either() { }
@SuppressWarnings("unchecked")
public boolean isLeft() {
return (this instanceof Left);
}
@SuppressWarnings(&q ...
package com.taobao.ju.c2b.facade.manager.impl;
import com.taobao.ju.c2b.facade.domain.CommentQuery;
import com.taobao.ju.c2b.follow.domain.CommentBO;
import com.taobao.ju.common.manager.ManagerException;
import com.taobao.matrix.comment.domain.*;
import com.taobao.matrix.comment.enumcons ...
不多说,直接看代码。。谢谢韩棠同学提供..这里做了 一个转换成大写的步骤,也可以去除掉。
public class Test {
private static Transliterator pinyinTransliterator = Transliterator
.getInstance("Han-Latin;NFD;[[:NonspacingMark:][:Space:]] Remove");
/**
* 将中文转换成字母。
* example: 正回--> ZHEN ...
做个记录。
今天前端要求组装一个如下的json格式数据,
{
"sid" : "50012906",
"name" : "低帮鞋",
"spell": "dbx",
"leaf" : 2,
},
{
"sid" : ...
我在linux(fedora)上装了idea debug工程,但是报 ERROR: Cannot load this JVM TI agent twice, check your java command line for duplicate jdwp options. 主要是调试器加了 xrunjdwp:transport=dt_socket 但是在idea中是无法去掉这个配置到。具体到方法是在 $jboss_home/bin/run.sh 中,去除
JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_s ...
今天继续得空,优化了下idea的速度.它自带的配置真的无法恭维啊.
开始,果断修改 IntellJ/bin/idea.exe.vmoptions (记得备份哦亲)修改成
-Xms512m
-Xmx512m
-Xmn164m
-XX:MaxPermSize=250m
-XX:ReservedCodeCacheSize=64m
-Xverify:none
-Xnoclassgc
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=85
-ea
重启Idea ...