Stackoverflow上看到的Java对象头部mark word和kclass pointer的大小 从Stackoverflow上看到,Java对象头部有一个mark word和一个klass java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit 2.2 验证Java数组对象的头部占用byte数 List-3 验证数组的情况 import org.openjdk.jol.info.ClassLayout; import org.openjdk.jol.vm.VM 图2 List-3的运行结果 图2的说明:第一个红框和第二个红框分别是mark word和kclass pointer,它们分别占8bytes和4bytes,之后的4bytes用来表示数组长度 List-3源码中的,我们的数组new A[2]的长度是2,每个下标处占4bytes,这个类似C语言中的指针。 所以可以看到数组和普通的Java对象头部是有区别的。
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 JdbcClientDetailsService则是将ClientDetails存储在数据库中,如下List-3所示 List-3 JdbcClientDetailsService的loadClientByClientId new NoSuchClientException("No client with requested id: " + clientId); } return details; } 如List
8303698.html,而后自己结合hotspot源码看的 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long arg1, java.lang.Object arg2, java.lang.Object arg3); compareAndSwapInt(java.lang.Object arg0 , long arg1, int arg2, int arg3); compareAndSwapLong(java.lang.Object arg0, long arg1, long arg2, long /jdk8u/jdk8u60/hotspot/file/37240c1019fd/src/share/vm/oops/oop.inline.hpp中,如下List-3所示: List-3 inline } return (oop)Atomic::cmpxchg_ptr(exchange_value, (oop*)dest, compare_value);//核心 } } 如上的List
来看lookupOrder方法: 首先,判断Object类型的参数是否是Ordered.java,它是个接口,如下List-2所示。 如果参数不是Ordered接口,那么判断参数是否是Class<? >,那么取出它上面的注解Order.java;如果参数是对象,那么先获取参数的Class<?>,再判断是否有Order.java注解(如List-3所示),之后调用Order的value()。 * @see java.lang.Integer#MIN_VALUE */ int HIGHEST_PRECEDENCE = Integer.MIN_VALUE; /** * Useful * @see java.lang.Integer#MAX_VALUE */ int LOWEST_PRECEDENCE = Integer.MAX_VALUE; /** * Get the order value * @see #HIGHEST_PRECEDENCE * @see #LOWEST_PRECEDENCE */ int getOrder(); } 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
List-1 package org.springframework.security.web; import java.io.IOException; import javax.servlet.ServletException 所以,我们可以通过定义AuthenticationEntryPoint统一处理抛出的异常,如下List-3 List-3 @Component @AllArgsConstructor public class
service的hello方法"); return "Hello"; } } import org.springframework.aop.MethodBeforeAdvice; import java.lang.reflect.Method System.out.println("beforeAdvice的before方法"); } } import org.springframework.aop.AfterReturningAdvice; import java.lang.reflect.Method 最后getProxy调用的是JdkDynamicAopProxy的getProxy方法,如下List-3所示,Proxy.newProxyInstance的方法中,最后的InvocationHandler List-3 public Object getProxy(@Nullable ClassLoader classLoader) { if (logger.isDebugEnabled()) {
(ExecMapper.java:160) ... 8 more Caused by: org.apache.hadoop.hive.ql.metadata.HiveFatalException: [ (Operator.java:879) at org.apache.hadoop.hive.ql.exec.SelectOperator.process(SelectOperator.java:95) (TableScanOperator.java:130) at org.apache.hadoop.hive.ql.exec.MapOperator$MapOpCtx.forward(MapOperator.java :149) at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:489) ... 9 more FAILED 再设置partitions和partitions.pernode,如下List-3 List-3 set hive.execution.engine=mr; set hive.exec.dynamic.partition
return nextc == 0; } } } CountDownLatch里面有个内部类Sync继承了AbstractQueuedSynchronizer——这个类在java.util.concurrent.locks CountDownLatch调用await()时,调用的是Sync的acquireSharedInterruptibly()——这个方法是AbstractQueuedSynchronizer里面的,如下List List-3 public final void acquireSharedInterruptibly(int arg) throws InterruptedException { Reference http://openjdk.java.net/
图1 如上面图1所示,RequestMappingHandlerMapping的类继承图,List-2中getHandler方法调用在AbstractHandlerMapping中,如下List -3,接着来看getHandlerInternal(request)的实现 List-3 public final HandlerExecutionChain getHandler(HttpServletRequest executionChain, config); } return executionChain; } getHandlerInternal的实现在AbstractHandlerMethodMapping中,如List -3所示 获取request中的url 调用lookupHandlerMethod方法获取HandlerMethod,如List-4所示 List-3 @Override protected HandlerMethod 回到List-3,在List-4中返回HandlerMethod后,调用getHandlerExecutionChain方法构造一个HandlerExecutionChain,读者可以去看下HandlerExecutionChain
var1, ThreadPoolExecutor var2); } 此方案不行 方案三 自定义queue,改写offer逻辑 覆写ThreadPoolExecutor的execute() List submittedTaskCount.get(); } } execute()开始时,将提交的任务数加1,之后调用父类的execute()方法,如List-1中,当线程数达到coreSize后,就会调用queue.offer(),即List List-3中offer中做了一些操作,有可能这期间队列就有空了,所以要重试下。 https://github.com/apache/dubbo/blob/fb5761683729f63c715e39c78a8b7b75278050c9/dubbo-common/src/main/java /org/apache/dubbo/common/threadpool/support/eager/EagerThreadPoolExecutor.java
先来定义实体类,如下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 \"com.mjduan.project.objectRedisTemplate.model.Department\",\"name\":\"System\",\"officeStaffs\":[\"java.util.ArrayList
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 /app/tomcat8 exec "$PRGDIR"/"$EXECUTABLE" start "$@" 执行startup.sh,如下List-3,这样就启动了。 List-3 [root@iZwz9bjiawhqzfsklyht4rZ bin]# . :${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH #tomcat export TOMCAT_HOME=/opt
classpaths:",再加上后缀"**/*.class",之后用PathMatchingResourcePatternResolver获取该package下的所有类,并将每个类封装为Resource,如下List List-3 private Set<BeanDefinition> scanCandidateComponents(String basePackage) { Set<BeanDefinition scanning"); } catch (ClassNotFoundException ex) { // JSR-250 1.1 API (as included in Java this.conditionEvaluator.shouldSkip(metadataReader.getAnnotationMetadata()); } List-3中,将符合要求的类解析为BeanDefinition
this.registry); } return this.registry.getBeanDefinitionCount() - beanCountAtScanStart; } List holder.getBeanName() + "'."); } definition.setAutowireMode(2); } } } List List-3的processBeanDefinitions方法中设置BeanClass为MapperFactoryBean,答案就在这个MapperFactoryBean中。 注意List-3的末尾处有个"definition.setAutowireMode(2);",这是设置注入的类型,哪2是哪种类型呢,来看AbstractBeanDefinition,如下List-4,2 or 'sqlSessionTemplate' are required"); } } Spring会调用List-6中的方法setSqlSessionFactory方法,为什么这么说,List
即还有线程还在执行,由于timed是false,所以到5处,将当前线程加入到CLH队列中睡眠 最后一个线程执行完了,是如何唤醒其它已经执行完,在睡眠的线程呢,7处调用nextGeneration方法,如下List List-3 private void nextGeneration() { // signal completion of last generation trip.signalAll Reference http://openjdk.java.net/ (adsbygoogle = window.adsbygoogle || []).push({});
安装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 export SCALA_HOME=/opt/software/tool/scala2.12 export PATH=$SCALA_HOME/bin:$PATH List-3 mjduan 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.
systemd/system/ sudo vim /etc/systemd/system/mysql.service 在/etc/systemd/system/mysql.service文件末尾加入如下List -3中的内容 List-3 LimitNOFILE=65535 LimitMEMLOCK=65535 3.编辑/etc/mysql/my.cnf,加入List-4中的内容 List-4 [mysqld
来分析getDefaultStrategies的源码,如下List-3所示。 List-3 getDefaultStrategies的源码 protected <T> List<T> getDefaultStrategies(ApplicationContext context, 我们来看下这个文件里面的内容,如下图3所示,可以看到默认情况下HandlerMapping定义了俩个,即BeanNameUrlHandlerMapping和DefaultAnnotationHandlerMapping,所以List 图3 文件DispatcherServlet.properties的内容 List-3中的createDefaultStrategy(context, clazz),代码如下List-4所示。
, TLS-Outgoing: false, TLS-Incoming: false ==> Log data will now stream in as it occurs: 4、查看节点信息 List Reference: https://www.cnblogs.com/java-zhao/p/5356744.html (adsbygoogle = window.adsbygoogle ||