2 * Copyright (C) 2014, United States Government, as represented by the
3 * Administrator of the National Aeronautics and Space Administration.
6 * The Java Pathfinder core (jpf-core) platform is licensed under the
7 * Apache License, Version 2.0 (the "License"); you may not use this file except
8 * in compliance with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0.
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
19 package gov.nasa.jpf.vm.serialize;
21 import gov.nasa.jpf.vm.ElementInfo;
22 import gov.nasa.jpf.vm.ThreadInfo;
25 * even more aggressive under-approximation than AdaptiveSerializer. This one
26 * only looks at the top frame of each thread, and only serializes objects
27 * referenced from there. It ignores static fields and deeper heap objects that
28 * are not directly referenced.
30 * While this seems too aggressive, it actually finds a lot of concurrency
31 * defects in real world applications. This is esp. true if there are
32 * a lot of field access CGs, i.e. shared objects. In this case, the
33 * TopFrameSerializer can behave an order of magnitude better than CFSerializer
35 public class TopFrameSerializer extends CFSerializer {
37 boolean traverseObjects;
40 protected void initReferenceQueue() {
41 super.initReferenceQueue();
43 traverseObjects = true;
47 protected void serializeStackFrames(ThreadInfo ti){
48 // we just look at the top frame
49 serializeFrame(ti.getTopFrame());
54 protected void queueReference(ElementInfo ei){
61 protected void processReferenceQueue() {
62 // we only go one level deep
63 traverseObjects = false;
64 refQueue.process(this);
68 protected void serializeClassLoaders(){
69 // totally ignore statics