Stackoverflow上看到的Java对象头部mark word和kclass pointer的大小 从Stackoverflow上看到,Java对象头部有一个mark word和一个klass 注意:我电脑上装的JDK1.8,64位的 2.1 验证Java对象的头部占用byte数 如下: List-1 mjduan@mjduandeMacBook-Pro:/tmp % java -version java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit 所以可以看到数组和普通的Java对象头部是有区别的。 图4 List-5的运行结果 我们来对比下图3和图4的结果,图3中显示对象占了16bytes,但是图4中显示对象占了24bytes。
先来定义实体类,如下List-3和List-4 List-3 Department.java /** * @author dmj1161859184@126.com 2018-09-18 01:21 this.officeStaffs = officeStaffs; this.strings = strings; } } List-4 OfficeStaff.java AllArgsConstructor public class OfficeStaff { private String name; private Integer age; } 如下List \",\"name\":\"System\",\"officeStaffs\":[\"java.util.ArrayList\",[{\"@class\":\"com.mjduan.project.objectRedisTemplate.model.OfficeStaff 思考: List-5中,Department并没有名为"@class"的属性,那么它是怎么被添加进去的呢,这个问题暂时不研究了。
environment export JAVA_HOME=/opt/app/jdk8 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=. :${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH #tomcat export TOMCAT_HOME=/opt tomcat8 exec "$PRGDIR"/"$EXECUTABLE" stop "$@" [root@iZwz9bjiawhqzfsklyht4rZ bin]# 执行shutdown.sh,如下图List -5,这样就关闭了 List-5 [root@iZwz9bjiawhqzfsklyht4rZ bin]# . tomcat-users.xsd -rw------- 1 root root 169566 6月 29 22:44 web.xml [root@iZwz9bjiawhqzfsklyht4rZ conf]# 修改List
RequestBodyAdvice的实现 有人用RequestBodyAdvice来做参数的解密(前端传过来的是加密的),或者使用RequestBodyAdvice进行全局统一返回,但是我的需求是只对Java RequestResponseBodyAdviceChain的afterBodyRead中,调用getMatchingAdvice方法,获取RequestBodyAdvice类型的advice,如下List advice.afterBodyRead(body, inputMessage, parameter, targetType, converterType); } } return body; } List ; } else { throw new IllegalArgumentException("Unexpected adviceType: " + adviceType); } } List ArgumentResolverAdvice 4处判断这个类是否是RequestBodyAdvice类型,如果不是则不会加到结果集,所以就是我们要实现RequestBodyAdvice的原因 List
return nextc == 0; } } } CountDownLatch里面有个内部类Sync继承了AbstractQueuedSynchronizer——这个类在java.util.concurrent.locks } } finally { if (failed) cancelAcquire(node); } } 2.countDown() List -5 public void countDown() { sync.releaseShared(1); } 如List-5,内部调用了Sync的releaseShared(1),即释放1 Reference http://openjdk.java.net/
2 InMemoryClientDetailsService package org.springframework.security.oauth2.provider.client; import java.util.HashMap ; import java.util.Map; import org.springframework.security.oauth2.provider.ClientDetails; import org.springframework.security.oauth2 来看下ClientDetailsRowMapper,如下List-5,最终返回的是BaseClientDetails。 List-5 private static class ClientDetailsRowMapper implements RowMapper<ClientDetails> { private JsonMapper
transactionLog.logConnectException(e); return Receipt.forSystemFailure(e.getMessage()); } } } 3.测试 List BillingService.class); billingService.chargeOrder(new PizzaOrder(), new CreditCard()); } } List 图1 List-5的运行结果 (adsbygoogle = window.adsbygoogle || []).push({});
scanning"); } catch (ClassNotFoundException ex) { // JSR-250 1.1 API (as included in Java ScannedGenericBeanDefinition,所以这个俩个处理方法都会被调用,我们来看下AnnotationConfigUtils.processCommonDefinitionAnnotations,如下List -5: List-5 public static void processCommonDefinitionAnnotations(AnnotatedBeanDefinition abd) { List-5中处理完了后,回到List-2,方法registerBeanDefinition将这个BeanDefinition注册到Spring容器中。 2.
如下List-5所示: List-5 public class MapperFactoryBean<T> extends SqlSessionDaoSupport implements FactoryBean List-5的getObject()中,调用父类SqlSessionDaoSupport的方法getSqlSession(),来看下SqlSessionDaoSupport,如下List-6 List 不过还是遗留了很多问题,比如最重要的,List-5中SqlSessionTemplate的.getMapper(this.mapperInterface)方法底层上是如何实现的。
安装JDK,步骤略, List-1 mjduan@mjduan-ubuntu:~$ java -version java version "1.8.0_111" Java(TM) SE Runtime Environment (build 1.8.0_111-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode) SCALA_HOME/bin:$PATH #spark export SPARK_HOME=/opt/software/tool/spark export PATH=$SPARK_HOME/bin:$PATH List WARN NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_111) Type in expressions to have them evaluated.
则会报错 4处获取resultMap,从List中 5处是核心,调用handleResultSet->handleRowValues->handleRowValuesForSimpleResultMap List List-5的1处,调用getRowValue方法,该方法获取resultSet中的一行数据,并将数据封装位对象 List-6 private Object getRowValue(ResultSetWrapper 回到List-5中,getRowValue方法返回值,storeObject方法中将值放入到List中。 描述较为泛华,建议个人阅读源码。
handlerMethodsInitialized(getHandlerMethods()); } 来看List-4中的方法detectHandlerMethods,传入的是String类型的bean name,如下List List-5 protected void detectHandlerMethods(Object handler) { Class<? builder.customCondition(customCondition); } return builder.options(this.config).build(); } List
objects); System.out.println(method.getName()+" 后"); return result; } } 来测试下,如下List HelloWorldSubject.class.getInterfaces(), new JdbcDynamicalProxy(subject)); instance.print(); } } List
=4 --mysql-host=localhost --mysql-db=foo --mysql-user=root --mysql-password=密码 prepare 2. run分析结果 List events (avg/stddev): 7.9940/3.22 execution time (avg/stddev): 10.2680/0.14 从List-3和List
Springboot中SpringApplicationRunListener的默认实现有个EventPublishingRunListener,如下List-5所示 List-5 public class 如List-5中所示,Springboot启动的不同阶段,会传不同的event实现给EventPublishingRunListener,而EventPublishingRunListener则用Delete
的最后,有如下List-4,调用HandlerExecutionChain的triggerAfterCompletion,会逆序调用HandlerInterceptor的afterCompletion,由List = null) { mappedHandler.triggerAfterCompletion(request, response, null); } } List-5 void triggerAfterCompletion threw exception", ex2); } } } } 位置7/8,如果之前的步骤抛出异常,就会到步骤7/8,调用triggerAfterCompletion,并将异常作为参数传入,由List
com.mjduan.project.springbootlearn.selector.SelectorB"}; } } 之后定义自己的EnableMyX,如下List-3 List-3 import java.lang.annotation.Documented ; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy ; import java.lang.annotation.Target; @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME SpringbootLearnApplication.class, args); } } 我们通过BeanPostProcessor来验证SelectorA和SelectorB加入到容器中了,如下 List
ReflectionUtils.makeAccessible(method); return method.invoke(target, args); ... } 如下的List List-5 public class AspectJAfterAdvice extends AbstractAspectJAdvice implements MethodInterceptor,
List-4 export JAVA_HOME=/opt/jdk1.8 export HADOOP_HOME=/opt/hadoop-2.7.7 export SCALA_HOME=/opt/scala2.12 spark-defaults.conf cp spark-defaults.conf.template spark-defaults.conf,之后修改spark-defaults.conf,如下List List-5 spark.eventLog.enabled true spark.eventLog.dir hdfs://master:9000/opt/
spark-env.sh文件(如果不存在,则cp spark-env.sh.template spark-env.sh),修改为如下List-2,这个修改三台机器上都要做: List-2 export JAVA_HOME spark-mjduan/logs/spark-root-org.apache.spark.deploy.master.Master-1-master.out,可以看到master url和masterWebUrl: List